1.2.3 Target
对于Target,在运行时如果该节点已经存在,那么无论XPath是否有prefix都可以正确的赋值;如果运行时该节点不存在,那么流程引擎会根据XPath来创建节点,这时就有区别了:没有加prefix的XPath会导致生成“空命名空间”的节点,如下图所示:
这时如果后面还要用到x,y的值,通过含标准prefix的XPath就已经取不出来了:
而通过不加prefix的XPath表达式,还是可以取出的:
1.3 消息覆盖 Message overwriting
每个活动产生的输入(input message)和输出(output message)都被记录在Message Map中,直到流程结束。但是,如果有两个活动对应同一个Service,那么将共享同样的命名空间和消息名称,也就是说后一个活动会缺省使用前一个活动的输入消息,它的输出消息也会覆盖前一个活动的输出。因此,如果希望保留前面活动输出的信息,应该在它的”message map after”动作中,将其保存到一个process specific message中,而对于不再使用的信息,应当显式地删除。
1.4 作用范围 Scope of Message Map
缺省情况下,MessageMap的作用范围限于流程内部。换言之,主流程和子流程相互独立,各自维护MessageMap,互相不能访问。它们之间互通信息应当采用InputMessage,OutputMessage和SendMessage方式实现。但是,如果配置调用子流程的活动属性为”Share Message Map”,那么主子流程将共享同一个message map了(实际上是主流程的全部message map都传给子流程,子流程结束后再传出。)
在share messsage map之后,子流程属性“Wait till sub-process is finished”就一
直为真了(界面上已被隐藏,不再可选),也就是说,主流程总会等待子流程结束后,才执行下一步。
和以前的版本不同,由于C3中引入了namespace,主子流程如果namespace不同,那么即使share message map,它们的process specific message也是各自独立的。因为主流程可以引用到子流程的namespace prefix,所以可以使用该前缀影响子流程的process specific message,反之不成立。
比较有趣的是instance properties,它对应的节点名称是instanceProperties,命名空间是http://schemas.cordys.com/bpm/instance/1.0,为了对主子流程有所区分,在主流程中,把对应子流程的消息节点改名为childInstanceProperties;而在子流程中,把主流程对应的消息改名为:callerInstanceProperties。
1.5 多个节点的选择与赋值
一般来说,我们对message map的操作总是针对一个节点的,但有时也有操作多个节点的需要,BPM支持这样的方式:在operation中选择“Select Children”,可以选出指定节点的所有子节点。
1.6 调用Static Java Method
在message map中,如果选用Expression类型的赋值表达式(如下图),那么可以在Source中直接调用静态的Java方法。
这里的Java Class必须能在当前流程引擎的Classpath中找到,一般情况下,我们会在BPM Processor的JRE Configuration中设置classpath。
Static java method调用语法和在Java中直接调用非常类似,例如:
相关推荐: