Solon v3.3.2

flow - 链的加载与文本转换

</> markdown

1、编排格式支持

  • yaml [推荐]
  • json
  • properties

或者其它自定义格式,最终能转换成 Properties 或 ONode 对象即可。

2、加载方式

通过 url 加载编排文件

Chain chain = Chain.parseByUri("classpath:flow/demo1.yml");
Chain chain = Chain.parseByUri("classpath:flow/demo1.json");
Chain chain = Chain.parseByUri("classpath:flow/demo1.properties");

//flowEngine.load(chain); //加载到引擎

通过 text 加载编排配置(可以存入数据库,再加载出来)

String txt = flowService.get("demo1");
Chain chain = Chain.parseByText(txt); //会自动识别 yaml, json, properties

//flowEngine.load(chain); //加载到引擎

通过 Properties 或 ONode 对象加载

Chain.parseByProperties(properties);
Chain.parseByDom(dom);

3、文本与实体相互转换

文本格式(yml、json、properties)可以转换为 Chain。用代码动态构建的 Chain 对象,也可以转为 json 格式用于持久化。

//从文本加载
Chain chain =  Chain.parseByText(txt); 

//转为文本
String json  = chain.toJson();

示例:

Chain chain = new Chain("d2", "请假审批");
        
chain.addNode(NodeDecl.startOf("s").title("发起人").metaPut("role", "employee").metaPut("form", "form1").linkAdd("n1"));
chain.addNode(NodeDecl.activityOf("n1").title("主管批").metaPut("role", "tl").linkAdd("g1"));
chain.addNode(NodeDecl.exclusiveOf("g1")
        .linkAdd("g2", l -> l.title("3天以下"))
        .linkAdd("n2", l -> l.title("3天以上").condition("day>=3"))
);
chain.addNode(NodeDecl.activityOf("n2").title("部门经理批").metaPut("role", "dm").linkAdd("g2"));
chain.addNode(NodeDecl.exclusiveOf("g2")
        .linkAdd("e", l -> l.title("7天以下"))
        .linkAdd("n3", l -> l.title("7天以上").condition("day>=7"))
);
chain.addNode(NodeDecl.activityOf("n3").title("副总批").metaPut("role", "vp").linkAdd("e"));
chain.addNode(NodeDecl.endOf("e"));
        

//转为 json ,并持久化
String json  = chain.toJson();


//攻取 json,并加载
Chain chain =  Chain.parseByText(json);