Перебор списка объектов класса в Drools Rule Engine - PullRequest
0 голосов
/ 26 февраля 2019

Я изучаю Drools с помощью Kie Workbench.мой ввод будет именем внутри класса возможностей продукта, и я ожидаю, что выход в Ip внутри класса возможностей.после выполнения механизма правил я получаю только нулевое значение на выходе.

Pojo Struture:

Opportunity.Java :
    private java.lang.Boolean result;
    private java.lang.String ip;
    private java.util.List<com.sample2.sampledemo2.OpportunityProduct> productlist;

OpportunityProduct.Java
    private java.lang.String name;

Ввод:

{
   "commands":[
      {
         "insert":{
            "out-identifier":"com.sample2.sampledemo2.Opportunity",
            "return-object":true,
            "object":{
               "com.sample2.sampledemo2.Opportunity":{
                  "productlist":[
                     {
                        "name":"abc"
                     }
                  ]
               }
            }
         }
      },
      {
         "fire-all-rules":""
      }
   ]
}

Выход:

{
   "type":"SUCCESS",
   "msg":"Container abcdef successfully called.",
   "result":{
      "execution-results":{
         "results":[
            {
               "key":"",
               "value":0
            },
            {
               "key":"com.sample2.sampledemo2.Opportunity",
               "value":{
                  "com..sample2.sampledemo2.Opportunity":{
                     "result":null,
                     "ip":null,
                     "productlist":[
                        {
                           "name":"abc"
                        }
                     ]
                  }
               }
            }
         ],
         "facts":[
            {
               "key":"com.sample2.sampledemo2.Opportunity",
               "value":{
                  "org.drools.core.common.DefaultFactHandle":{
                     "external-form":"0:2:1366747666:1366747666:2:DEFAULT:NON_TRAIT:com.sample2.sampledemo2.Opportunity"
                  }
               }
            }
         ]
      }
   }
}

Таблица принятия решений:

NAME                  CONDITION                               ACTION

           o:Opportunity(pd: productlist)
             OpportunityProduct
      (name == $param , this memberOf pd)      o.setIp($param);

Origination  "abc"                                  "IPP"

Drl:

rule "Origination"
    when
        o:Opportunity(pd: productlist)
        (OpportunityProduct(name == "abc" , this memberOf pd))
    then
        o.setIp("IPP");
end

Я не смог определить, неверен ли мой ввод или условие в таблице решений.

1 Ответ

0 голосов
/ 27 февраля 2019

При вводе вы отправляете объект Opportunity для вставки, но вы никогда не вставляете факт OpportunityProduct.Ваше правило нуждается в обоих фактах для запуска.

Помните, что в Drools вы можете только рассуждать о фактах, которые были вставлены в ваш сеанс, и что вложенные объекты внутри факта не являются фактами самих себя.

Если вы не планируете вставлять OpportunityProduct в качестве независимых фактов, вы можете использовать условный элемент from, чтобы рассуждать о данных, которые не являются фактом:

rule "Origination"
    when
        o:Opportunity(pd: productlist)
        OpportunityProduct(name == "abc") from pd
    then
        o.setIp("IPP");
end

Надеюсь, это поможет,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...