欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Slickflow.Graph 开源工作流引擎快速入门之四: 图形编码建模工具使用手册

程序员文章站 2022-04-14 19:44:40
前言: 业务人员绘制流程时,通常使用图形GUI界面交互操作来完成,然而对于需要频繁操作或者管理较多流程的系统管理用户,就需要一款辅助工具,来帮助他们快速完成流程的创建和编辑更新。Slickflow.Graph 图形编码建模工具通过命令行直接编写代码创建图形,实现了流程图形绘制效率的快速提升。 申明: ......

前言: 业务人员绘制流程时,通常使用图形gui界面交互操作来完成,然而对于需要频繁操作或者管理较多流程的系统管理用户,就需要一款辅助工具,来帮助他们快速完成流程的创建和编辑更新。slickflow.graph 图形编码建模工具通过命令行直接编写代码创建图形,实现了流程图形绘制效率的快速提升。

申明: 本篇文章为slickflow原创文章,任何人不得私自转载,博客园为作者授权的中文文章唯一来源。

1. 图形创建代码文本

 首先通过一个代码片段来进行说明,这个代码片段创建了一个简单的序列流程。代码如下:

using slickflow.graph;
using slickflow.engine.common;

//firstly, create a process model builder
var pmb = processmodelbuilder.createprocess("booksellerprocess", "booksellerprocesscode", "3"); 
var process = pmb.start("start")
        .task("package books", "003")       //task name, code
        .task("deliver books", "005")       //task name, code
        .end("end")
        .store();

 

图形截图如下:

Slickflow.Graph 开源工作流引擎快速入门之四: 图形编码建模工具使用手册

1.1 流程创建命令

命令示例:

var pmb = processmodelbuilder.createprocess("booksellerprocess", "booksellerprocesscode", "3");

参数: (processname, processcode, processversion)

1.2 活动节点创建命令

1.2.1 开始节点创建: start()

命令示例: 

pmb.start("start")

参数: (activityname, activitycode)

1.2.2 结束节点创建: end()

命令示例: 

pmb.end("end")

参数: (activityname, activitycode)

1.2.3 任务节点创建: task()

1.2.3.1 基本方法

命令示例:  

pmb.task("package books", "003")

参数: (activityname, activitycode)

1.2.3.2 扩展方法

命令示例: 

                   pmb.task(
                        vertexbuilder.createtask("task-001")
                                   .seturl("http://www.slickflow.com")
                                   .addrole("testrole")
                                   .addaction(
                                        vertexbuilder.createaction(actiontypeenum.event,
                                            firetypeenum.before,
                                            "slickflow.module.external.ordersubmitservice"
                                        ))
                    )

1) createtask(): 创建任务节点

参数: (task)

2) seturl(): 设置节点url页面属性

参数: (pageurl) 页面地址字符串

3) addrole(): 设置节点绑定角色数据

参数: (rolecode) 角色代码

4) addaction(): 添加action操作明细项目

参数: (action) 对象

5) createaction(): 创建action操作明细对象

参数: (actiontype, firetype, methodname)

1.2.4 分支节点创建: split()

分支和合并通常作为一个整体的代码片段来创建,如下图,创建了两个分支的流程图,每个分支上又有两个任务节点,完整的代码片段示例如下:

               pmb.split("split")
                  .parallels(
                        () => pmb.branch(
                            () => pmb.task("task-010"),
                            () => pmb.task("task-011")
                        )
                        , () => pmb.branch(
                             () => pmb.task("task-020"),
                             () => pmb.task("task-021")
                         )
                  )
                  .join("join")

图形截图如下:

Slickflow.Graph 开源工作流引擎快速入门之四: 图形编码建模工具使用手册

1) split(): 创建分支节点

参数: (activityname, activitycode)

2) parallels(): 创建多个分支的外部方法

参数: 

(params func<processmodelbuilder>[] branches)

描述: 参数branches 表示分支列表的组合, 一个并行模式可以由多个分支组成,params表示是可变参数列表关键字。

3) branch(): 分支具体创建方法

参数: 

(params func<processmodelbuilder>[] nodes)

描述: 参数nodes表示节点列表的组合,一个分支可以由多个节点组成,params表示是可变参数列表关键字。

4) join(): 创建合并节点

参数: (activityname, activitycode)

说明: 合并和分支通常是对应成对出现的,用于表达决策类型的分支选择模式。

1.3 图形存储命令

命令示例: 

pmb.store();

存储命令会把上述图形按照xml序列化后,作为数据库中的一条记录进行存储。

2. 图形维护命令

2.1 流程载入命令

1) 命令: 

var pmb = processmodelbuilder.loadprocess("booksellerprocesscode", "3");

参数: (processcode, processversion)

 说明: 流程代码和版本组成唯一关键字标识用于唯一确定流程记录。

2.2 图形节点编辑代码

1) 命令:

using slickflow.graph;
using slickflow.engine.common;

//firstly load a process model builder
var pmb = processmodelbuilder.loadprocess("booksellerprocesscode", "3");

//execute deffrient task operation once together
pmb.add("003", activitytypeenum.tasknode, "zzz", "zzz-code")
   .insert("003", activitytypeenum.tasknode, "task004", "004")
   .set("003", (a) => pmb.getbuilder(a).seturl("slickflow.com").setname("mer-sss-ryxmas"))
   .replace("004", activitytypeenum.tasknode, "task222", "222")
   .exchange("222", "zzz-code")
   .fork("zzz-code", activitytypeenum.tasknode, "yyy", "555")
   .remove("222", true)
   .update();

说明:对图形节点元素的增加、插入、交换、取代、分支、编辑和删除等所有更新操作,可以通过链式服务接口一次执行完成。

2.3 节点编辑命令详解

2.3.1 增加节点: add()

1) 命令: 

//add a new task node zzz after task with code 003(package books)
pmb.add("003", activitytypeenum.tasknode, "zzz", "zzz-code")

参数: (currentactivitycode, addactivitytype, addactivityname, addactivitycode)

说明: add()方法是在当前节点的后面增加一个新的节点,而且继续保持新增加的节点也是在流程的连线上。

2) 命令执行后的图形示例:

 Slickflow.Graph 开源工作流引擎快速入门之四: 图形编码建模工具使用手册

2.3.2 插入节点: insert()

1) 命令: 

//insert a new task node named task004 before task 003(package books)
pmb.insert("003", activitytypeenum.tasknode, "task004", "004")

参数: (currentactivitycode, addactivitytype, addactivityname, addactivitycode)

说明: insert()方法是在当前节点的前面增加一个新的节点,而且继续保持新增加的节点也是在流程的连线上。

2) 命令执行后的图形示例:

Slickflow.Graph 开源工作流引擎快速入门之四: 图形编码建模工具使用手册 

2.3.3 更新节点属性: set()

1) 命令:

//set task 003(package books) property url and name
pmb.set("003", (a) => pmb.getbuilder(a).seturl("slickflow.com").setname("mer-sss-ryxmas"))

参数: (currentactivitycode, vertexbuilder)

说明: 根据当前节点的代码表示,获取当前节点对象,然后更新url属性和name属性。

2) 命令执行后的图形示例:

Slickflow.Graph 开源工作流引擎快速入门之四: 图形编码建模工具使用手册

2.3.4 替换节点: replace()

1) 命令:

//replace task 004(task004) by the new task named task222
pmb.replace("004", activitytypeenum.tasknode, "task222", "222")

参数: (currentactivitycode, replacedbyactivitytype, replacedbyactivityname, replacedbyactivitycode)

说明: 可以把当前节点用一个新增的节点进行代替,新增的节点为: replacedbyactivity,取代操作,相当于先执行删除(remove)操作,然后再执行新增(add)操作。节点取代之后原来的连线transition的唯一标识guid也会发生改变。

2) 命令执行后的图形示例:

Slickflow.Graph 开源工作流引擎快速入门之四: 图形编码建模工具使用手册

2.3.5 互换节点: exchange()

1) 命令: 

//exchange task 222 to zzz
pmb.exchange("222", "zzz-code")

参数: (firstactivitycode, secondactivitycode)

说明: 该方法将两个节点进行位置调换,其它节点的属性保持不变。此外说明的是:调换之后节点之间的连线transition重新赋予唯一标识guid,因为连线的节点已经发生变化,需要改变连线标识guid的取值。

2) 命令执行后的图形示例:

Slickflow.Graph 开源工作流引擎快速入门之四: 图形编码建模工具使用手册

2.3.6 分支节点: fork()

1) 命令: 

//fork a new task 555 from task zzz
pmb.fork("zzz-code", activitytypeenum.tasknode, "yyy", "555")

参数: (currentactivitycode, forkactivitytype, forkactivityname, forkactivitycode)

说明: 该方法是在当前节点上增加分支路径,如果当前节点的没有后续节点,则等同于新增add方法。如果当前节点已经有后续节点,则在邻近位置新增加一个节点。

2) 命令执行后的图形示例:

Slickflow.Graph 开源工作流引擎快速入门之四: 图形编码建模工具使用手册

2.3.7 删除节点: remove()

1) 命令:

//remove the task 222, and afterward nodes will be caught up
pmb.remove("222", true)

参数: (currentactivitycode, iscaughtup)

说明: 删除当前节点,并且如果当前节点已经有后续节点,则需要前置该后续节点到当前已经删除节点的位置,包括重新增加连线。

2) 命令执行后的图形示例:

Slickflow.Graph 开源工作流引擎快速入门之四: 图形编码建模工具使用手册

 

2.3.8 添加分支/合并: cover()

1) 命令:

//cover a split/join pattern into canvas
pmb.cover("003", "005",
  vertexbuilder.createsplit(gatewaydirectionenum.andsplit,"andsplit", "andspliccode"),                    
vertexbuilder.createjoin(gatewaydirectionenum.andjoin, "andjoin", "andjoincode"),
vertexbuilder.createtask("branchtask001", "b001"), vertexbuilder.createtask("branchtask002", "b002") ) .update();

2) 命令执行后的图形示例: 

Slickflow.Graph 开源工作流引擎快速入门之四: 图形编码建模工具使用手册

2.3.9 删除分支/合并: uncover()

1) 命令

//uncover a split/join pattern from canvas
pmb.uncover("003", "005")
   .update();

2) 命令执行后的图形示例:

Slickflow.Graph 开源工作流引擎快速入门之四: 图形编码建模工具使用手册

 2.3.10 连接节点: connect()

1) 命令

//connect two task node
pmb.connect("003", "005")
      .update();

2) 命令执行后的图形示例:

Slickflow.Graph 开源工作流引擎快速入门之四: 图形编码建模工具使用手册

2.3.11 断开节点: disconnect()

1) 命令:

//disconnect two task node
pmb.disconnect("003", "005")
      .update();

2) 命令执行后的图形示例:

Slickflow.Graph 开源工作流引擎快速入门之四: 图形编码建模工具使用手册

2.4 流程更新命令update()

1) 命令: 

pmb.update();

说明: 将会重新对流程节点和连线数据进行xml序列化处理,并且保存数据到数据库。

3. 编程环境

目前代码编程建模工具已经提供线上使用体验工具,左侧为纯文本代码输入区域,右侧为更新后的图形显示区域。每次执行代码文本后,将会更新右侧的图形显示。

Slickflow.Graph 开源工作流引擎快速入门之四: 图形编码建模工具使用手册

4. 在线地址

为方便流程爱好者用户学习和掌握slickflow流程图形语言模型,特意提供了网上编写代码的示例环境,请按照如下地址进行访问:

5. 总结

代码编程建模工具的实现,方便了用户快速创建和更新图形,代码命令简单易学,建议流程技术人员、流程管理用户和系统分析人员可以投入时间学习掌握,从而提升流程开发效率。