本项目是BPMN协议的一个实现,也只实现了一个子集。只包括:startEvent、endEvent、serviceTask、userTask、parallelGateway、exclusiveGateway、sequenceFlow
在此基础上进行了扩展:
扩展属性有:
beforeStart 活动开始之前执行,作用于所有Task,值是script标签的id
afterStart 活动开始之后执行,作用于所有Task,值是script标签的id
beforeEnd 活动结束之前执行,作用于所有Task,值是script标签的id
afterEnd 活动结束之后执行,作用于所有Task,值是script标签的id
exclusiveFlowTrigger 排他路由顺序流判断是否可继续,作用于exclusiveGateway之后的sequenceFlow。
用于判断当前sequenceFlow能否继续。值是script标签的id,脚本返回值必须是布尔值
assignRule 派任用户脚本,值是script标签的id,返回值是用户的id
viewConfig 视图配置标签,作用于所有userTask,值是script的标签的id
扩展标签:
script 脚本标签,内部是程序代码。如:<script>User.create! email: 'abc@abc.com' </script>
viewConfig 视图配置
如:
<viewConfig>
...
<showUrl>/path/to/your/page</showUrl> 必须的标签
...
</viewConfig>
具体的协议描述请参考: http://www.mossle.com/docs/jbpm4devguide/html/bpmn2.html
RBPMN文档示例: http://git.oschina.net/tavern/rBPM/blob/master/xml_demo.md
将下面这行加入到你程序的Gemfile文件:
gem 'rBPM', git: 'https://git.oschina.net/tavern/rBPM.git'
添加完之后执行:
$ bundle
本插件有3个生成命令:
生成引擎数据库的迁移文件
$ rails g rBPM:migration
生成引擎分布视图
$ rails g rBPM:templates
生成引擎需要的模型
$ rails g rBPM:model
create_instance:method 创建流程实例 参数 user_id:integer 返回值 ProcessInstance:object
####ProcessTask
show_url:method 获取用户任务记录的业务地址 返回值 string
view_configs:Hash 获取BPMN文档中记录的视图配置,固定数据
在需要使用引擎的Controller继承 RBPM::BaseController, 如:
class YourController < RBPM::BaseController
Controller通过参数process_task_id
来确认用户任务,以下方法均是在传有该属性时可用:
class RBPM::BaseController < ApplicationController::Base
# 任务是否存在
def task_present?
@task.present?
end
# 获取当前传入的 process_task_id确定的用户任务
def task
end
# 任务提交
def task_commit
# 自动获取流程变量@process_variables hash类型,此类型中的数据将会持久化
# 自动获取活动变量@process_parameters hash类型,一次性使用,一直生效到下一个用户任务
end
end
如:
# 此段代码演示了当前任务提交。 此controller中设置了after_action, 当执行了deal_with这个action之后, 自动任务提交。
# deal_with中设置了2个实例变量。 task_commit会自动获取这两个实例变量当做参数
class YourController < RBPM::BaseController
after_action :task_commit, only: [:task_commit]
def deal_with
# your code
@process_variables = {name: 'Tavern', age: 100}
@process_parameters = {address: 'CQ'}
end
end
在通过YourController < RBPM::BaseController
控制器生成出来的页面中,请加上分布视图,此视图是会自动设置当前用户任务的id,提交之时业务代码不需要传用户任务的id
class YourController < RBPM::BaseController
after_action :task_commit, only: [:task_commit]
def deal_with
# your code
@process_variables = {name: 'Tavern', age: 100}
@process_parameters = {address: 'CQ'}
end
end
以下视图没有使用rails helper,若要使用请替换相应方法。 主要的语句在 <%= render partial: 'layouts/engine_actions' %>
<form action="<%= your_deal_with_path %>" method="post">
<%= render partial: 'layouts/engine_actions' %>
<button type="submit">提交</button>
</form>
git checkout -b my-new-feature
)git commit -am 'Add some feature'
)git push origin my-new-feature
)此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型