Снижает слюни, отображая картирование, не удалось - что я делаю не так?

StackOverflow https://stackoverflow.com/questions/1507662

  •  19-09-2019
  •  | 
  •  

Вопрос

Я создал два процесса «Hello World», чтобы дать подпроцессовым узлам вихрь. У меня проблемы с получением вывода из подпроцесса обратно в основной процесс. Я надеюсь, что кто -то сможет просветить меня на то, что я делаю неправильно, так как я не могу найти никаких документаций или примеров, которые проливают свет на то, почему мой не работает.

В моем основном процессе у меня есть следующее (обратите внимание, что я обрезал заголовки, нижние колонтитулы и позиционные x, y, высота, атрибуты ширины):

 ... snip...

 <header>
   <variables>
     <variable name="name" >
      <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
       <value>World</value>
     </variable>
     <variable name="length" >
       <type name="org.drools.process.core.datatype.impl.type.IntegerDataType" />
       <value>0</value>
     </variable>
   </variables>
 </header>

 ... snip...

 <subProcess id="4" name="SubHello"
             processId="subhello" waitForCompletion="true" >
 <mapping type="in" from="name" to="name" />
 <mapping type="out" from="length" to="length" />
</subProcess>

 ... snip...

И вот просто subhello Подпроцесс, который просто выводит вход и распечатывает его, а затем получает длину ввода, чтобы вернуть его обратно:

 ... snip...

 <header>
   <variables>
     <variable name="name" >
      <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
       <value></value>
     </variable>
     <variable name="length" >
       <type name="org.drools.process.core.datatype.impl.type.IntegerDataType" />
       <value></value>
     </variable>
   </variables>
 </header>

 <nodes>
   <start id="1" name="Start" />
   <end id="2" name="End" />
   <actionNode id="3" name="Action" >
       <action type="expression" dialect="mvel" >
System.out.println(name + ", " + length + ", in SubProcess, before");
length = name.length;
System.out.println(length + ", in SubProcess, after");
       </action>
   </actionNode>
 </nodes>

 ... snip...

Это как то, как я интерпретировал документ и примеры. Необходимые переменные объявляются как в основном процессе, так и на подпроцессе, а затем просто используйте элементы отображения подпроцесса в/out для установки атрибутов от и для атрибутов.

Проблема в том ... пока name был передан в подпроцесс без проблем, пытаясь получить length Вернуться к основному процессу не удалось. А length В подпроцессе был успешно изменен. Но на выходе, length В основном процессе не изменился.

Что я делаю не так? Указатели и объяснения высоко ценятся. Спасибо.

Это было полезно?

Решение

Проблема в том, что ваше действие не изменяет переменную длины. Это просто изменяет локальную переменную длину внутри вашего действия. Чтобы изменить значение переменной, используйте kcontext.setVariable ("length", name.length ());

Вы также должны обновить до последнего релиза Drools 5.1 M1, так как это включает в себя решение для проблемы с отображениями на случай, если подпроцесс полностью синхронно (как в вашем примере).

Крис Верлаенен

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top