流程相关的数据类和流程步骤中的属性在理论上是没有限制的,我们可以使用复杂的数据类型,比如Dictionary<string,string>或者具有复杂层次的数据类,但在研究中我们发现由于JSON DSL定义的限制,我们无法实现复杂数据结构的数据传递。使用Fluent API定义的流程中,可以使用Lamdba 表达式,但在JSON DSL中没找到更好的方法。
下面的代码展示通过Lamdba表达式实现两个Dictionary<string,string>之间的数据传递,但在DSL中没有对应的方式:
.Output((step, data)=> {
var dic = step.EventData as Dictionary<string, object>;
foreach (var key in dic.Keys)
{
if (data.MyDic.ContainsKey(key)) data.MyDic[key] = dic[key];
else data.MyDic.Add(key, dic[key]);
}
而在实际应用中,我们需要使用流程定义文件而不是写死的代码来定义流程,这样在流程修改时,就不需要修改代码和重新编译部署。这个限制是WorkflowCore在实际项目中落地的一个主要障碍。