工作流:形参,实参,相关数据
关于形参,实参,相关数据
一、形参(FormalParameter)
形参用于WorkflowProcess和Application的定义中,一旦WorkflowProcess和Application定义了一定数量的形参,那么:
- 引用该WorkflowProcess做为Subflow的Activity的定义中,必须定义相同数量的实参;引用该Application做为Tool的Activity的定义中,必须定义相同数量的实参;由建模工具负责保证
- 实例化该WorkflowProcess和Application时,引擎负责用正确的实参的值初始化其形参
二、实参(ActualParameter)
实参用于Subflow类型的Activity和Tool类型的Activity定义中
- 其数量必须符合所引用的WorkflowProcess或Application中所定义的形参;由建模工具负责保证
- 定义时其数据来源可以是本流程的相关数据及本流程的形参;由建模工具负责保证
- 实例化时引擎负责用正确的相关数据的值和本流程实参的值初始化其值
三、相关数据(DataField)
相关数据用于WorkflowProcess的定义中
- 实例化时,引擎负责将其初始化为定义中所声明的初始值(InitialValue)
- 做为实参的数据来源之一,引擎负责将其关联到正确的实参
四、IN,OUT,INOUT
形参有三种类型,IN,OUT,INOUT
- IN:对应到实参时,引擎负责该实参必须有初始值,并且Activity执行完毕之后,引擎负责忽略该实参值的任何改变,保持原值
- OUT:对应到实参时,引擎不必为该实参赋初值,Activity执行完毕前,必须为该实参赋值,Activity执行完毕之后,引擎必须保留其值
- INOUT:对应到实参时,引擎负责该实参必须有初始值,Activity执行完毕前,可以为该实参赋值,也可以不赋,Activity执行完毕之后,引擎必须保留其值
五、Index
形参有传递顺序问题,定义中用Index属性来表示,引擎负责将实参对应到正确的形参;例如:
<FormalParameters><BasicType Type="STRING" /></DataType><Description>姓名</Description></FormalParameter><BasicType Type="INTEGER" /></DataType><Description>数量</Description></FormalParameter><BasicType Type="BOOLEAN" /></DataType><Description>是否同意</Description></FormalParameter></FormalParameters>
假设实参放在object[] actParams中,那么Subflow.Wor2.For1的值应该是actParams[2],Subflow.Wor2.For2是actParams[0],Subflow.Wor2.For3是actParams[1]
-----------------------------------------------------WfMC 原文-----------------------------------------------------------
<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-font-kerning: 0pt">7.1.2</span></chsdate>.1. 参数传递语义
参数传递语义定义如下:
i. 在调用中,只读的形式参数(IN)由其相对应的实际参数的值初始化。这就是按值传递语
义。
ii. 可读/写形式参数(INOUT)由其相对应的实际参数的值来初始化,但实际参数必须是工作
流相关数据实体的标识符。当过程完成后,输出形式参数的值要复给对其初始化的实际参
数。这是拷贝归还语义。
iii. 只写形式参数(OUT)初始化为0(String类型的被设为空)。在过程完成后,输出形式参数的值要复给原始的实际参数(实际参数必须是工作流相关数据实体的标识符)。这就是
0-归还语义。
<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-font-kerning: 0pt">7.1.2</span></chsdate>.2. 并发语义
参数的拷贝和存储是自动完成的,从而避免在并发的工作流相关数据操作中出现访问冲突,而这些操作是序列化的。在<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: ËÎÌå">7.1.2</span></chsdate>.1的(C)中,调用返回时,拷贝和存储间默认是不加锁的,并且返回参数值会覆盖本地值。
<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US" style="FONT-FAMILY: 宋体; mso-font-kerning: 0pt">7.1.2</span></chsdate>.3. 形式——实际参数 映射
参数映射表定义了,调用过程中实际参数向形式参数的映射。实际参数按照顺序1:1映射到形式参数,例如第一个实际参数映射到第一个形式参数,第二个实际参数映射到第二个形式参数。在过程定义时需要类型兼容,或者在工作流系统运行时进行强制类型转换。
在实际参数是一个表达式的情况下,工作流机对表达式进行计算和缓冲,同时缓冲器的内容用来进行形式——实际参数映射。缓冲和运算是如何运行的超出了本篇规范的范围。
上一篇: 使用Dockerfile定制镜像
下一篇: (摘)编程经验分享(四)