Шаблон Drools для замены свойства объекта не будет работать

Контекст: я пытаюсь написать шаблон jboss drools, который проверяет значение объекта, является ли оно пустым, пустым или допустимым.

Свойство, содержащее значение, является переменной в зависимости от значения $pitCaract

пример, если $pitCaract=='C' => $valueProperty=valeurItemChaine

поэтому в моем шаблоне я хотел проверить itemDataCheck.valeurItemChaine

вот что я пробовал до сих пор

    template header
    $pitCaract
    $valueProperty


    package fr.xxx.validation;
    /*created on: Jun 20, 2017*/
    import fr.xxx.fides.dashboard.questionnaire.api.models.items.ItemData;
    import fr.xxx.fides.dashboard.questionnaire.api.models.types.Item;
    import  fr.xxx.fides.dashboard.questionnaire.api.checks.QuestionnaireItemException;
    import fr.xxx.fides.dashboard.questionnaire.api.ExceptionMessage;

    template "Blocking Objects check"

    rule "pre-check of blocking @{$pitCaract}  @{row.rowNumber}"
    auto-focus true
    agenda-group "validate"
    dialect "mvel" 
    salience 100
        when
            $item: Item(
                        itemProperty.pitCaract== "@{$pitCaract}",   
                        itemProperty.isMandatory
                    )

            Boolean(booleanValue ==true ) from  nullOrEmptyStr($item.itemDataCheck.@{$valueProperty} )
---------------------------------------------------------------^ this line
        then
          $item.setQuestionnaireItemException(new QuestionnaireItemException(ExceptionMessage.Blocking_item ,QuestionnaireItemException.ERROR ) );
          delete($item);
    end

    end template


    function boolean nullOrEmptyStr(Object o)
    {
        System.out.println("nullOrEmptyStr:"+o);
        return o==null || o.toString().trim().isEmpty();
    }

Я получаю сообщение об ошибке вида

[Ошибка: невозможно разрешить метод с использованием строгого режима: java.lang.Object.valeurItemChaine()] [Near: {... nullOrEmptyStr( $item.itemDataCheck.valeurItemChaine) ....}]

я пытался

$item: Item(
                            itemProperty.pitCaract== "@{$pitCaract}",   
itemDataCheck!.@{$valueProperty}.toString().trim().isEmpty(),
                            itemProperty.isMandatory
                        )

а также

$item: Item(
                                itemProperty.pitCaract== "@{$pitCaract}",   
    nullOrEmptyStr(itemDataCheck!.@{$valueProperty}),
                                itemProperty.isMandatory
                            )

Но не повезло заставить это работать.

Единственное рабочее решение itemDataCheck.@{$valueProperty}==null но этого недостаточно, поскольку значение может быть пустой строкой.

Спасибо за помощь

0 ответов

Другие вопросы по тегам