Перебор списка объектов класса в Drools Rule Engine

Я изучаю 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 ответ

Решение

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

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

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

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

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

Это связано с тем, что по умолчанию интерфейс отдыха kie-server работает так:

1) На стороне клиента A, связанный с B (Ab=b)

2) Вы вставляете A, а затем B

3) на стороне сервера для каждой команды вставки будет:

3.1) объект A (вставленный в kie-сессию), связанный с экземпляром B1 (который не вставлен)

3.2) другой экземпляр B2 (точная копия содержимого B1, но не связанного с A)

Вот два решения:

1) Живите с этим и используйте от

2) создайте собственное расширение kie-server, и это то, что я делаю в своем проекте с открытым исходным кодом, чтобы облегчить жизнь с помощью слюни. Все мои клиенты используют этот тип kie-server, вставляя путем отражения все java-объекты, подключенные к верхнему объекту (большую часть времени это называется запросом)

С уважением

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