Получение атрибутов из bpm

Всем привет, ребят.

Появился вопрос. Хочу сделать легко маштабируемым свой бпм процесс, а для этого надо уйти от ифчиков. От сюда воппрос, как я могу получить Entity.class (именно ентити над которой запустили процесс, например удаления) из процесса. В своей примере я не использую едитор для старта процесса, а происходит это с браузера сущности - фразмент расположен в браузере и инициализируется так:

if (productTypesTable.getSingleSelected() != null) {
            procActionsFragment.initializer()
                    .setAfterStartProcessListener(() -> {
                        notifications.create().withCaption("Заявка на удаление отправлена").show();
                        productTypesDl.load();
                    })
                    .init(PROCESS_CODE, productTypesTable.getSingleSelected());

Спасибо.

Типо взять в пример демку от bpm - есть метод удаления сущности, но не создавать же кучу ифчиков для разных сущностей, надо передать аргументом Entity.class, но не могу найти способ как его “выдернуть”.

public void deleteEntity(UUID entityId, String state ) {

        try (Transaction tx = persistence.getTransaction()) {
            ProductType productType = persistence.getEntityManager().find(ProductType.class, entityId);
            if (productType != null) {

                dataManager.remove(dataManager.getReference(ProductType.class,entityId));

            }
            tx.commit();
        }
    }

Как я понимаю, вопрос про старый addon BPM.
Там у вас на стороне процесса есть процессная переменная entityName (имя класса сущности, связанной с процессом ).
Передавайте в метод ее и “танцуйте” имени класса.

Есть такое параметр, но с ним не потанцевать, есть возможность получить так из процесса можем саму ентити ?

Я пытался сеттать в новую сущность, сделав у нее такой атрибут

    @Column(name = "TEST")
    private Class<? extends StandardEntity> test;

    public Class<? extends StandardEntity> getTest() {
        return test;
    }

    public void setTest(Class<? extends StandardEntity> test) {
        this.test = test;
    }

но при этом получаю ошибку инициализации приложения.

Имея имя класса сущности и ID - можно в вашем методе прочитать сущность через dataManager/entityManager.

@andrey_vb

Не пойму как

image

А если дергать через лоадконтекст, то опять же нужен Entity.class

Нам же просто стринга прилетает из процесса, с именем сущности

Спасибо.

Через reflection, примерно так:

Class objectClass = Class.forName(className);
//Загружаем документ по ID
Entity doc = persistence.getEntityManager().find(objectClass, entityId);

Не хочет, Caused by: java.lang.ClassNotFoundException: bpm_ProductType

Посмотрите под отладчиком.
Скорее всего, из процессной переменной entityName прилетает сокращенное имя класса типа “bpm_ProductType”.
А на вход Class.forName надо подать полное имя класса в формате com.company.project....
Преобразуйте строку в className к нужному полному имени класса и все получится.

Все верно, такая стринга и прилетает. Спасибо большое.

В переменной entityName лежит имя сущности, не сокращённое имя java-класса. Вот тут есть пример как получить экземпляр сущности.

1 симпатия

О спасибо, Макс. А то начал уже колхозить сплиты и стринг с пакетами ))