Drools模板替换对象属性将不起作用

时间:2017-06-21 09:10:43

标签: jboss drools mvel

背景: 我正在尝试编写一个jboss drools模板来测试对象的值,无论是null还是空或有效的。

持有该值的属性是一个变量,具体取决于$ 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()] [近:{... 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 个答案:

没有答案