flow - 链的加载与文本转换
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);