1 Star 0 Fork 19

yanxunjian/snakersite

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
example.html 20.66 KB
一键复制 编辑 原始数据 按行查看 历史
TOPZX 提交于 2018-12-04 11:13 . add book
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636
<!DOCTYPE html>
<html lang="zh-CN" manifest="cache.manifest">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Snaker - 开源轻量级工作流引擎</title>
</head>
<link rel="stylesheet" type="text/css" href="css/bootstrap-responsive.min.css"/>
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"/>
<link rel="stylesheet" type="text/css" href="css/common.css"/>
<link rel="stylesheet" type="text/css" href="css/shCoreDefault.css" />
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/bootstrap.min.js"></script>
<script type="text/javascript" src="js/shCore.js"></script>
<script type="text/javascript" src="js/shBrushXml.js"></script>
<script type="text/javascript" src="js/shBrushJava.js"></script>
<script type="text/javascript">SyntaxHighlighter.all();</script>
<body>
<div class="navbar-wrapper">
<div class="container">
<div class="navbar navbar-inverse">
<div class="navbar-inner">
<button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="brand" href="#"><img src="img/logo.png"/></a>
<div class="nav-collapse collapse">
<ul class="nav">
<li><a href="index.html">首页</a></li>
<li><a href="quickstart.html">入门</a></li>
<li><a href="plugin.html">插件</a></li>
<li class="active"><a href="example.html">实例</a></li>
<li><a href="integration.html">集成</a></li>
<li><a href="design.html">设计</a></li>
<li><a href="book">文档</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<article class="container">
<section class="row" id="travel" style="margin-top: 80px;">
<div class="span12 panel" style="display: block;">
<div class="row">
<div class="span12">
<div class="block-left">
<h4>Step1 定义流程</h4>
<p>使用eclipse插件创建流程定义,如:</p>
<pre class="brush: xml;">
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;process displayName="请假流程" instanceUrl="/flow/leave/all" name="leave"&gt;
&lt;start displayName="start1" layout="27,19,-1,-1" name="start1"&gt;
&lt;transition g="" name="transition1" offset="0,0" to="apply"/&gt;
&lt;/start&gt;
&lt;end displayName="end1" layout="284,208,-1,-1" name="end1"/&gt;
&lt;task assignee="apply.operator" displayName="请假申请" form="/flow/leave/apply" layout="5,104,-1,-1" name="apply" performType="ANY"&gt;
&lt;transition g="" name="transition2" offset="0,0" to="approveDept"/&gt;
&lt;/task&gt;
&lt;task assignee="approveDept.operator" displayName="部门经理审批" form="/flow/leave/approveDept" layout="134,104,-1,-1" name="approveDept" performType="ANY"&gt;
&lt;transition g="" name="transition3" offset="0,0" to="decision1"/&gt;
&lt;/task&gt;
&lt;decision displayName="decision1" expr="day &gt; 2 ? 'transition5' : 'transition4'" layout="156,208,-1,-1" name="decision1"&gt;
&lt;transition displayName="&lt;=2天" g="" name="transition4" offset="0,0" to="end1"/&gt;
&lt;transition displayName="&gt;2天" g="" name="transition5" offset="0,0" to="approveBoss"/&gt;
&lt;/decision&gt;
&lt;task assignee="approveBoss.operator" displayName="总经理审批" form="/flow/leave/approveBoss" layout="262,104,-1,-1" name="approveBoss" performType="ANY"&gt;
&lt;transition g="" name="transition6" offset="0,0" to="end1"/&gt;
&lt;/task&gt;
&lt;/process&gt;
</pre>
<img src="img/leave.png"/>
<br>
<h4>Step2 部署流程</h4>
<p>流程部署使用ProcessService的deploy方法.参数为InputStream.使用StreamHelper帮助类[org.snaker.engine.helper.StreamHelper]可以很方便
操作流,如:</p>
<pre class="brush: java;">
//几种部署流程方法
snakerEngine.process().deploy(StreamHelper.getStreamFromClasspath("leave.snaker"));
snakerEngine.process().deploy(StreamHelper.getStreamFromString("流程定义的xml字符串"));
snakerEngine.process().deploy(StreamHelper.getStreamFromFile(new File("流程定义文件的绝对路径")));
//重新部署流程方法
snakerEngine.process().redeploy(String processId, InputStream input);
//卸载流程
snakerEngine.process().undeploy(String processId);
</pre>
<br>
<h4>Step3 启动流程</h4>
<p>流程启动使用startInstanceById、startInstanceByName方法.</p>
<pre class="brush: java;">
Map&lt;String, Object&gt; args = new HashMap&lt;String, Object&gt;();
args.put("apply.operator", new String[]{"snaker"});
//根据流程定义id启动流程,可接收1~3个参数,分别为流程定义id、处理人、变量参数
snakerEngine.startInstanceById(processId, "snaker", args);
//根据流程定义name启动流程.可接收1~4个参数,分别为流程定义name、版本号、处理人、变量参数
snakerEngine.startInstanceByName(String name, Integer version, String operator, Map&lt;String, Object&gt; args);
</pre>
<br>
<h4>Step4 任务处理</h4>
<p>处理任务使用executeTask方法.可接收1~3个参数,分别为任务id、处理人、变量参数</p>
<pre class="brush: java;">
Map&lt;String, Object&gt; args = new HashMap&lt;String, Object&gt;();
args.put("approveDept.operator", new String[]{"admin"});
List&lt;Task&gt; tasks = snakerEngine.query().getActiveTasks(new QueryFilter().setOperator("admin"));
for(Task task : tasks) {
snakerEngine.executeTask(task.getId(), "admin", args);
}
</pre>
<h3>流程引擎API参考:SnakerEngine</h3>
<pre class="brush: java;">
/**
* 获取process服务
* @return IProcessService 流程定义服务
*/
public IProcessService process();
/**
* 获取查询服务
* @return IQueryService 常用查询服务
*/
public IQueryService query();
/**
* 获取实例服务
* @return IQueryService 流程实例服务
*/
public IOrderService order();
/**
* 获取任务服务
* @return ITaskService 任务服务
*/
public ITaskService task();
/**
* 获取管理服务
* @return IManagerService 管理服务
*/
public IManagerService manager();
/**
* 根据流程定义ID启动流程实例
* @param id 流程定义ID
* @return Order 流程实例
* @see #startInstanceById(String, String, Map)
*/
public Order startInstanceById(String id);
/**
* 根据流程定义ID,操作人ID启动流程实例
* @param id 流程定义ID
* @param operator 操作人ID
* @return Order 流程实例
* @see #startInstanceById(String, String, Map)
*/
public Order startInstanceById(String id, String operator);
/**
* 根据流程定义ID,操作人ID,参数列表启动流程实例
* @param id 流程定义ID
* @param operator 操作人ID
* @param args 参数列表
* @return Order 流程实例
*/
public Order startInstanceById(String id, String operator, Map&lt;String, Object&gt; args);
/**
* 根据流程名称启动流程实例
* @param name 流程定义名称
* @return Order 流程实例
*/
public Order startInstanceByName(String name);
/**
* 根据流程名称、版本号启动流程实例
* @param name 流程定义名称
* @param version 版本号
* @return Order 流程实例
*/
public Order startInstanceByName(String name, Integer version);
/**
* 根据流程名称、版本号、操作人启动流程实例
* @param name 流程定义名称
* @param version 版本号
* @param operator 操作人
* @return Order 流程实例
*/
public Order startInstanceByName(String name, Integer version, String operator);
/**
* 根据流程名称、版本号、操作人、参数列表启动流程实例
* @param name 流程定义名称
* @param version 版本号
* @param operator 操作人
* @param args 参数列表
* @return Order 流程实例
*/
public Order startInstanceByName(String name, Integer version, String operator, Map&lt;String, Object&gt; args);
/**
* 根据任务主键ID执行任务
* @param taskId 任务主键ID
* @return List&lt;Task&gt; 任务集合
* @see #executeTask(String, String, Map)
*/
public List&lt;Task&gt; executeTask(String taskId);
/**
* 根据任务主键ID,操作人ID执行任务
* @param taskId 任务主键ID
* @param operator 操作人主键ID
* @return List&lt;Task&gt; 任务集合
* @see #executeTask(String, String, Map)
*/
public List&lt;Task&gt; executeTask(String taskId, String operator);
/**
* 根据任务主键ID,操作人ID,参数列表执行任务
* @param taskId 任务主键ID
* @param operator 操作人主键ID
* @param args 参数列表
* @return List&lt;Task&gt; 任务集合
*/
public List&lt;Task&gt; executeTask(String taskId, String operator, Map&lt;String, Object&gt; args);
/**
* 根据任务主键ID,操作人ID,参数列表执行任务,并且根据nodeName跳转到任意节点
* 1、nodeName为null时,则跳转至上一步处理
* 2、nodeName不为null时,则任意跳转,即动态创建转移
* @param taskId 任务主键ID
* @param operator 操作人主键ID
* @param args 参数列表
* @param nodeName 跳转的节点名称
* @return List&lt;Task&gt; 任务集合
*/
public List&lt;Task&gt; executeAndJumpTask(String taskId, String operator, Map&lt;String, Object&gt; args, String nodeName);
/**
* 根据流程实例ID,操作人ID,参数列表按照节点模型model创建新的自由任务
* @param orderId 流程实例id
* @param operator 操作人id
* @param args 参数列表
* @param model 节点模型
* @return List&lt;Task&gt; 任务集合
*/
public List&lt;Task&gt; createFreeTask(String orderId, String operator, Map&lt;String, Object&gt; args, WorkModel model);
</pre>
<h3>流程定义API参考:IProcessService</h3>
<pre class="brush: java;">
/**
* 保存流程定义
* @param process 流程定义对象
*/
void saveProcess(Process process);
/**
* 根据主键ID获取流程定义对象
* @param id 流程定义id
* @return Process 流程定义对象
*/
Process getProcessById(String id);
/**
* 根据流程name获取流程定义对象
* @param name 流程定义名称
* @return Process 流程定义对象
*/
Process getProcessByName(String name);
/**
* 根据流程name、version获取流程定义对象
* @param name 流程定义名称
* @param version 版本号
* @return Process 流程定义对象
*/
Process getProcessByVersion(String name, Integer version);
/**
* 根据给定的参数列表args分页查询process
* @param page 分页对象
* @param filter 查询过滤器
* @return List&lt;Process&gt; 流程定义对象集合
*/
List&lt;Process&gt; getProcesss(Page&lt;Process&gt; page, QueryFilter filter);
/**
* 根據InputStream輸入流,部署流程定义
* @param input 流程定义输入流
* @return String 流程定义id
*/
String deploy(InputStream input);
/**
* 根據InputStream輸入流,部署流程定义
* @param id 流程定义id
* @param input 流程定义输入流
* @return String 流程定义id
*/
void redeploy(String id, InputStream input);
/**
* 卸载指定的流程定义,只更新状态
* @param id 流程定义id
*/
void undeploy(String id);
</pre>
<h3>流程实例API参考:IOrderService</h3>
<pre class="brush: java;">
/**
* 创建抄送实例
* @param orderId 流程实例id
* @param actorIds 参与者id
* @since 1.5
*/
void createCCOrder(String orderId, String... actorIds);
/**
* 更新抄送记录为已阅
* @param orderId 流程实例id
* @param actorIds 参与者id
*/
void updateCCStatus(String orderId, String... actorIds);
/**
* 删除抄送记录
* @param orderId 流程实例id
* @param actorId 参与者id
*/
void deleteCCOrder(String orderId, String actorId);
/**
* 流程实例正常完成
* @param orderId 流程实例id
*/
void complete(String orderId);
/**
* 流程实例强制终止
* @param orderId 流程实例id
*/
void terminate(String orderId);
/**
* 流程实例强制终止
* @param orderId 流程实例id
* @param operator 处理人员
*/
void terminate(String orderId, String operator);
</pre>
<h3>任务API参考:ITaskService</h3>
<pre class="brush: java;">
/**
* 根据已有任务id、任务类型、参与者创建新的任务
* @param taskId 主办任务id
* @param taskType 任务类型
* @param actors 参与者集合
* @return List&lt;Task&gt; 创建任务集合
*/
List&lt;Task&gt; createNewTask(String taskId, int taskType, String... actors);
/**
* 完成指定的任务,删除活动任务记录,创建历史任务
* @param taskId 任务id
* @return Task 任务对象
*/
Task complete(String taskId);
/**
* 完成指定的任务,删除活动任务记录,创建历史任务
* @param taskId 任务id
* @param operator 操作人
* @return Task 任务对象
*/
Task complete(String taskId, String operator);
/**
* 完成指定的任务,删除活动任务记录,创建历史任务
* @param taskId 任务id
* @param operator 操作人id
* @param args 参数集合
* @return Task 任务对象
*/
Task complete(String taskId, String operator, Map&lt;String, Object&gt; args);
/**
* 根据任务主键ID,操作人ID提取任务
* 提取任务相当于预受理操作,仅仅标识此任务只能由此操作人处理
* @param taskId 任务id
* @param operator 操作人id
* @return Task 任务对象
*/
Task take(String taskId, String operator);
/**
* 向指定的任务id添加参与者
* @param taskId 任务id
* @param actors 参与者
*/
void addTaskActor(String taskId, String... actors);
/**
* 向指定的任务id添加参与者
* @param taskId 任务id
* @param performType 参与类型
* @param actors 参与者
*/
void addTaskActor(String taskId, Integer performType, String... actors);
/**
* 对指定的任务id删除参与者
* @param taskId 任务id
* @param actors 参与者
*/
void removeTaskActor(String taskId, String... actors);
/**
* 根据任务主键id、操作人撤回任务
* @param taskId 任务id
* @param operator 操作人
* @return Task 任务对象
*/
Task withdrawTask(String taskId, String operator);
</pre>
<h3>管理服务API参考:IManagerService</h3>
<pre class="brush: java;">
/**
* 保存或更新委托代理对象
* @param surrogate 委托代理对象
*/
public void saveOrUpdate(Surrogate surrogate);
/**
* 删除委托代理对象
* @param id 委托代理主键id
*/
public void deleteSurrogate(String id);
/**
* 根据主键id查询委托代理对象
* @param id 主键id
* @return surrogate 委托代理对象
*/
public Surrogate getSurrogate(String id);
/**
* 根据过滤条件查询委托代理对象
* @param filter 查询过滤器
* @return List&lt;Surrogate&gt; 委托代理对象集合
*/
public List&lt;Surrogate&gt; getSurrogate(QueryFilter filter);
/**
* 根据授权人、流程名称获取最终代理人
* 如存在user1->user2->user3,那么最终返回user3
* @param operator 授权人
* @param processName 流程名称
* @return String 代理人
*/
public String getSurrogate(String operator, String processName);
/**
* 根据过滤条件查询委托代理对象
* @param page 分页对象
* @param filter 查询过滤器
* @return List&lt;Surrogate&gt; 委托代理对象集合
*/
public List&lt;Surrogate&gt; getSurrogate(Page&lt;Surrogate&gt; page, QueryFilter filter);
</pre>
<h3>流程查询API参考:IQueryService</h3>
<pre class="brush: java;">
/**
* 根据流程实例ID获取流程实例对象
* @param orderId 流程实例id
* @return Order 流程实例对象
*/
Order getOrder(String orderId);
/**
* 根据流程实例ID获取历史流程实例对象
* @param orderId 历史流程实例id
* @return HistoryOrder 历史流程实例对象
*/
HistoryOrder getHistOrder(String orderId);
/**
* 根据任务ID获取任务对象
* @param taskId 任务id
* @return Task 任务对象
*/
Task getTask(String taskId);
/**
* 根据任务ID获取历史任务对象
* @param taskId 历史任务id
* @return HistoryTask 历史任务对象
*/
HistoryTask getHistTask(String taskId);
/**
* 根据任务ID获取活动任务参与者数组
* @param taskId 任务id
* @return String[] 参与者id数组
*/
String[] getTaskActorsByTaskId(String taskId);
/**
* 根据任务ID获取历史任务参与者数组
* @param taskId 历史任务id
* @return String[] 历史参与者id数组
*/
String[] getHistoryTaskActorsByTaskId(String taskId);
/**
* 根据filter查询活动任务
* @param filter 查询过滤器
* @return List&lt;Task&gt; 活动任务集合
*/
List&lt;Task&gt; getActiveTasks(QueryFilter filter);
/**
* 根据filter分页查询活动任务
* @param page 分页对象
* @param filter 查询过滤器
* @return List&lt;Task&gt; 活动任务集合
*/
List&lt;Task&gt; getActiveTasks(Page&lt;Task&gt; page, QueryFilter filter);
/**
* 根据filter查询流程实例列表
* @param filter 查询过滤器
* @return List&lt;Order&gt; 活动实例集合
*/
List&lt;Order&gt; getActiveOrders(QueryFilter filter);
/**
* 根据filter分页查询流程实例列表
* @param page 分页对象
* @param filter 查询过滤器
* @return List&lt;Order&gt; 活动实例集合
*/
List&lt;Order&gt; getActiveOrders(Page&lt;Order&gt; page, QueryFilter filter);
/**
* 根据filter分页查询抄送工作项(包含process、order)
* @param page 分页对象
* @param filter 查询过滤器
* @return List&lt;WorkItem&gt; 抄送工作项集合
*/
List&lt;HistoryOrder&gt; getCCWorks(Page&lt;HistoryOrder&gt; page, QueryFilter filter);
/**
* 根据filter查询历史流程实例
* @param filter 查询过滤器
* @return List&lt;HistoryOrder&gt; 历史实例集合
*/
List&lt;HistoryOrder&gt; getHistoryOrders(QueryFilter filter);
/**
* 根据filter分页查询历史流程实例
* @param page 分页对象
* @param filter 查询过滤器
* @return List&lt;HistoryOrder&gt; 历史实例集合
*/
List&lt;HistoryOrder&gt; getHistoryOrders(Page&lt;HistoryOrder&gt; page, QueryFilter filter);
/**
* 根据filter查询所有已完成的任务
* @param filter 查询过滤器
* @return List&lt;HistoryTask&gt; 历史任务集合
*/
List&lt;HistoryTask&gt; getHistoryTasks(QueryFilter filter);
/**
* 根据filter分页查询已完成的历史任务
* @param page 分页对象
* @param filter 查询过滤器
* @return List&lt;HistoryTask&gt; 历史任务集合
*/
List&lt;HistoryTask&gt; getHistoryTasks(Page&lt;HistoryTask&gt; page, QueryFilter filter);
/**
* 根据filter分页查询工作项(包含process、order、task三个实体的字段集合)
* @param page 分页对象
* @param filter 查询过滤器
* @return List&lt;WorkItem&gt; 活动工作项集合
*/
List&lt;WorkItem&gt; getWorkItems(Page&lt;WorkItem&gt; page, QueryFilter filter);
/**
* 根据filter分页查询已完成的历史任务项
* @param page 分页对象
* @param filter 查询过滤器
* @return List&lt;WorkItem&gt; 历史工作项集合
*/
List&lt;WorkItem&gt; getHistoryWorkItems(Page&lt;WorkItem&gt; page, QueryFilter filter);
/**
* 根据类型T、Sql语句、参数查询单个对象
* @param T 类型
* @param sql sql语句
* @param args 参数列表
* @return
*/
public &lt;T&gt; T nativeQueryObject(Class&lt;T&gt; T, String sql, Object... args);
/**
* 根据类型T、Sql语句、参数查询列表对象
* @param T 类型
* @param sql sql语句
* @param args 参数列表
* @return
*/
public &lt;T&gt; List&lt;T&gt; nativeQueryList(Class&lt;T&gt; T, String sql, Object... args);
/**
* 根据类型T、Sql语句、参数分页查询列表对象
* @param page 分页对象
* @param T 类型
* @param sql sql语句
* @param args 参数列表
* @return
*/
public &lt;T&gt; List&lt;T&gt; nativeQueryList(Page&lt;T&gt; page, Class&lt;T&gt; T, String sql, Object... args);
</pre>
<br>
</div>
</div>
</div>
</div>
</section>
</article>
</body>
</html>
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
CSS
1
https://gitee.com/erpapp/snakersite.git
[email protected]:erpapp/snakersite.git
erpapp
snakersite
snakersite
clear

搜索帮助