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

时间:2022-09-21 09:43:33

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

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

1. 图形创建代码文本

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

using Slickflow.Graph;
using Slickflow.Engine.Common; //firstly, create a process model builder
var pmb = ProcessModelBuilder.CreateProcess("BookSellerProcess", "BookSellerProcessCode", "");
var process = pmb.Start("Start")
.Task("Package Books", "") //task name, code
.Task("Deliver Books", "") //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("", 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("", ActivityTypeEnum.TaskNode, "task004", "")

参数: (currentActivityCode, addActivityType, addActivityName, addActivityCode)

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

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

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

2.3.3 更新节点属性: Set()

1) 命令:

//set task 003(Package Books) property url and name
pmb.Set("", (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("", ActivityTypeEnum.TaskNode, "task222", "")

参数: (currentActivityCode, replacedByActivityType, replacedByActivityName, replacedByActivityCode)

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

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

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

2.3.5 互换节点: Exchange()

1) 命令:

//exchange task 222 to zzz
pmb.Exchange("", "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", "")

参数: (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("", "",
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("", "")
.Update();

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

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

 2.3.10 连接节点: Connect()

1) 命令

//connect two task node
pmb.Connect("", "")
.Update();

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

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

2.3.11 断开节点: Disconnect()

1) 命令:

//disconnect two task node
pmb.Disconnect("", "")
.Update();

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

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

2.4 流程更新命令Update()

1) 命令:

pmb.Update();

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

3. 编程环境

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

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

4. 在线地址

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

http://demo.slickflow.com/sfd/model

5. 总结

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

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

  1. Slickflow&period;NET 开源工作流引擎快速入门之三&colon; 简单或分支流程代码编写示例

    前言:对于急切想了解引擎功能的开发人员,在下载版本后,就想尝试编写代码,完成一个流程的开发和测试.本文试图从请假流程,或分支模式来快速了解引擎代码的编写. 1. 创建或分支流程图形 或分支流程是常见的 ...

  2. Slickflow&period;NET 开源工作流引擎快速入门之二&colon; 简单并行分支流程代码编写示例

    前言:对于急切想了解引擎功能的开发人员,在下载版本后,就想尝试编写代码,完成一个流程的开发和测试.本文试图从一个最简单的并行分支流程来示例说明,如何快速了解引擎代码的编写. 版本:.NET Core2 ...

  3. Slickflow&period;NET 开源工作流引擎快速入门之一&colon; 简单序列流程代码编写示例

    前言:对于急切想了解引擎功能的开发人员,在下载版本后,就想尝试编写代码,完成一个流程的开发和测试.本文试图从一个最简单的流程来示例说明,如何快速了解引擎代码的编写. 版本: .NETCore 2.1 ...

  4. Slickflow&period;NET 开源工作流引擎高级开发&lpar;三&rpar; -- 并行分支容器与会签工作流模式的组合

    前言:  流程引擎的核心功能是负责解析流程定义XML和流转,业务环节的不断积累,让人们不断总结和抽象出一些模式,这些模式统称为工作流模式(Workflow Pattern).本文的重点就是介绍一种常见 ...

  5. Slickflow&period;NET 开源工作流引擎高级开发&lpar;二&rpar; -- 流程快速测试增值服务工具介绍

    前言:流程是由若干个任务节点组成,流转过程就是从一个节点转移到下一个节点,通常需要不断切换用户身份来完成流程的测试,这样使得测试效率比较低下,本文从实战出发,介绍常见的两种快速测试方法,用于提升流程测 ...

  6. Slickflow&period;NET 开源工作流引擎基础介绍&lpar;二&rpar; -- 引擎组件和业务模块的交互

    集成流程引擎的必要性 业务过程的变化是在BPM系统中常见的现象,企业管理层需要不断优化组织架构,改造业务流程,不可避免地带来了业务流程的变化,企业信息系统就会随之面临重构的可能性.一种直接的方式是改造 ...

  7. Slickflow&period;NET 开源工作流引擎基础介绍&lpar;二&rpar; -- 引擎组件和业务系统的集成

    集成流程引擎的必要性 业务过程的变化是在BPM系统中常见的现象,企业管理层需要不断优化组织架构,改造业务流程,不可避免地带来了业务流程的变化,企业信息系统就会随之面临重构的可能性.一种直接的方式是改造 ...

  8. RoadFlowCore工作流引擎快速入门

    RoadFlow新建一个流程分为以下几步: 1.建表 在数据库建一张自己的业务表(根据你自己的业务需要确定表字段,如请假流程就有,请假人.请假时间.请假天数等字段),数据表必须要有一个主键,主键类型是 ...

  9. Slickflow&period;NET 开源工作流引擎高级开发&lpar;四&rpar; -- 硬核编码:代码式快速构建流程图

    前言:通过设计器交互来创建流程图是比较常见的方式,这种方式是比较方便业务人员对流程的操作.然而,在需要流程模板,或者技术开发阶段以及一些自动化流程的处理过程中,使用代码快速创建流程图也是一种非常有必要 ...

随机推荐

  1. ASP&period;NET - SqlSugar ORM框架 更新列表

    以后SqlSugar所有更新都会在这个贴子更新 SqlSugar是一款轻量级的MSSQL ORM ,除了具有媲美ADO的性能外还具有和EF相似简单易用的语法. 学习列表 0.功能更新 1.SqlSug ...

  2. HTML DOM appendChild&lpar;&rpar; 方法

    <!DOCTYPE html> <html> <body> <ul id="myList"> <li>Coffee&lt ...

  3. CSS3媒体查询

    随着响应式设计模型的诞生,Web网站又要发生翻天腹地的改革浪潮,可能有些人会觉得在国内IE6用户居高不下的情况下,这些新的技术还不会广泛的蔓延下去,那你就错了,如今淘宝,凡客,携程等等公司都已经在大胆 ...

  4. C&num;构造函数使用

    作用:帮助我们初始化对像(给对像的每个属性依次的赋值) 构造函数是一个特殊的方法 1.构造函数没有返回值,连void也不能写 2.构造函数名称要和类名一样 3.创建对像时会执行构造函数 4.构造函数可 ...

  5. Error &lpar;0xc0000225&rpar; installing Windows 8 R2 on VirtualBox

    Windows Boot Manager Windows failed to start. A recent hardware or software change might be the caus ...

  6. How do I Find Out Linux CPU Utilization&quest;

    From:http://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html Whenever a Linux sys ...

  7. httpd配置ResponseHeader

    今天遇到一个问题:我把项目编译后的静态文件发布到开发机上,开发机使用httpd启的静态文件服务,页面的访问是在特制的壳浏览器里面,我更新了代码后,发现页面被缓存了,找到壳的RD联调了一下,发现我的主页 ...

  8. poj1847 Tram 最短路Dijkstra

    题目链接:http://poj.org/problem?id=1847 Dijkstra算法的模版应用 题意:给你N个点和起点终点,点与点有铁路,接下来的N行分别为点i的情况 第一个数字表示与该点连通 ...

  9. 室内地图1:从CAD到Map(画图,发布,路径导航)

    首先这个教程整理,比较偏细节. 因为我本身不是做GIS,所以可能有点流水账,当然错漏难免,恳请指正. 当我们做定位的时候,想要可视化展示,室外当然可以直接使用google,百度的底图.对于室内,有两种 ...

  10. dnmp&lpar;docker的lnmp&rpar;安装WordPress之后图片上传问题 问题:图片上传大小问题解决和 报错413 Request Entity Too Large

    首先是提示超过图片尺寸和大小, 最后发现都是图片大小的问题, 需要修改php的最大上传size 修改之后查看php配置  已经生效  但是还是报错, 提示返回不是合法的json,  查看控制台, 报错 ...