扩展jPDLP中的动作元素
1. 动作使用于:
??? (1) 向另一个系统一步的发送消息;
??? (2) 以同步的方式调用外部的Web服务;
??? (3) 用于回调场景,向远程的系统发送请求,完成以后发起一次方法调用。
2. jPDL中action元素使用的位置
??? (1)Node节点类型:用动作处理器实现节点定制的功能并将信标前移到合适的转换路径;
??? (2)转换路径:作为transition元素的子元素(或属性),当转换路径被触发时,可以调用一个动作;
??? (3)事件
??? (4)异常
??? (5)定时器:当定时器到期时可以触发动作。
3. 实例化动作类的属性
??? 默认情况下采用字段值的方式,也可以配置属性@config-type来指定,config-type的值包括:
??? bean,constructor,constructor-property.当采用字段值的风格的类实例化方式时,jBPM会尝试自动将XMl中
??? action元素的子元素值按照其名称填充到匹配的类成员变量中。当要传递跟更复杂的数据时,可采用下面几种方式:
??? (1)使用任意复杂的XMl数据
??? (2)转换成dom4j的Element
??? (3)使用一种<map><entry><key>的XML格式将数据以一个Java Map对象传入
??? <action name="action">
??? <message>Going to the field state!</message>
??? <xml>
?????????? <value1>Value 1</value1>
?????????? <value2>Value 2</value2>
?????????? <value3 value="Value 3"/>
???? </xml>
???? <map>
?????????? <entry><key>key1</key> <value>Value 1</value></entry>
?????????? <entry><key>key2</key> <value>Value 2</value></entry>
???? </map>
???? </action>
???? 用于接收注入数据的MessageActionHandlerField类:
???? public class MessageActionHandlerField implements ActionHandler {
????????? String message;
????????? Element xml; //org.dom4j.Element;
????????? Map<String, String> map;
????????? public void execute(ExecutionContext context) throws Exception {
??????????????? context.getContextInstance().setVariable("message", message);
??????????????? System.out.println("map is: " + map.size());
??????????????? System.out.println("xml is: " + xml.asXML());
????????? }
???? }