??xml version="1.0" encoding="utf-8" standalone="yes"?>
是否启用Q?/span>如果此流E在q行启用它Q不q行׃启用它,可用于流E的历史版本理Q也可以因管理的需要,讄它?/span>
q行方式Q?/span>是ؓ(f)程的自动做的标讎ͼ自动q行的流E,可以用户?/span>sdk的方式开发?/span>
是否可以独立启用Q如果是一个独立启用的程可以显C在发v程列表里,否则׃昄Q如果该程是一个子程q且该流E不能被独立发vQ只能被调用Q就讄他ؓ(f)不可独立L(fng)?/span>
Durl:是在发v程时的要点的连接,如果为空pC直接启动流E,MyFlow.aspx?FK_Flow=xxx&FK_Node=xxx?/span>如果你指定了q个q接在发L(fng)面连接上Q就直接转向(zhn)指定的q接上去Q?zhn)的页面可以进行二ơ业务处理在转?/span>MyFlow.aspx上来?/span>
比如Q合同修Ҏ(gu)E,要发赯个流E首要的界面是要呈现一个合同列表,用户选择q个列表后,在{入流E发赗这个合同列表界面就是一个流E发起列表界面与程启动界面一个缓册Ӏ?/span>
标题生成规则Q?/span>
标题Q是程标题Q一个流E在开始节Ҏ(gu)必须有一个标题字D?/span>TitleQƈ且这个字D不可别删除Q默认ؓ(f)隐藏的?/span>
标题字段用于待办、在途的工作列表上,是能让用者知道这是那一条流E?/span>
标题字段不能修改Q它是系l根据一定的规则自动生成的?/span>
默认生成规则为:(x)"@WebUser.FK_DeptName,@WebUser.No,@WebUser.Name?/span>@RDT发v.";解析为:(x)财务?/span>,zhangna,张娜?/span>11?/span>12?/span>10Q?/span>20发v?/span>
程设计人员可以Ҏ(gu)自己的需要设计自q规则Q规则表辑ּ中支持节点表单字Dc?/span>
比如Q?/span>"@wenjianmingcheng?/span>@RDT发v.";其中@wenjianmingcheng是节点表单的数据库字Dc?/span>
程应用cdQ?/span>
是说明流E类型,如果没有Ҏ(gu)的指定,是正常的流E?/span>
工程cd的流E是ccflow的一U特定的程Q它有项目组的概念,什么是工程cȝ程?/span>baidu ccflow 工程cd程?/span>
多表单附件是用户上传的附件格式不能确定,数量不能定情况下用?/span>
设计步骤Q在工具栏点多附件按钮:(x)
多表单附件属性:(x)
附g名称Q就是ؓ(f)控g起一个名Uͼ附g~号需要全局唯一。保存到是文件要保存的位|?/span>
是否可下载,是否可删除,是否可上传是用来控制附g的访问权限的?/span>
特别说明Q?/span>
cd可以为空Q如果不为空时系l就?x)自动?f)它附件按U定的格式分cR?/span>
两种附g的展现模式:(x)
?/span>表的事g的格式与主表的事件格式一L(fng)描述。在实际工作中,我们l常用到?/span>表保存完后要处理一些业务逻辑?/span>
比如Q要Ҏ(gu)主表的字D|C些从表的信息?/span>
比如Q在每条数据更新前后都要做安全性校验?/span>
以下界面从从表设计界面进入:(x)
特别说明Q?/span>
对于明细表保存前Q保存后两个事gQ用@W号获取的变量是主表字段的变量?/span>
其它的事件是明细表的字段?/span>
@WebUser.No,@WebUser.Name@WebUser.FK_Dept 全局字段U定不变?/span>
关键字:(x)工作程理pȝ,workflow,bpm,执行效率,~存.
Ccflow通过如下Ҏ(gu)高业务流E系l执行效率?/span>
~存机制
1,什么情况下用到~存?
有以下几条缓存数据的规则?/span>
1,数据被频J利用,但是不经常更?/span>,数据量不太大.
比如人员、岗位、部门?/span>
2,数据在同一个过E中l常利用,比如:程对一个实体进行运?/span>.它经常被各个Ҏ(gu)所使用.
比如U税人流E中:U税人的信息\土地程中的土地信息.
3,用户的个Z息,比如他的岗位集合Q部门集?/span>.....
2 ,~存分类.
全局U的:?/span>application中应?/span>.比如:部门、岗位、h员、持久化存储的映?/span>.
用户U的.?/span>session中应?/span>.一个操作员的个Z?/span>.
临时U的.临时应用Q在各个q程中应用,一个操作中消亡?/span>
3,~存怎么?/span>ccflow工作引擎中表现?
1,pȝ启动Ӟ自动的把一个常用的数据调入?/span> 全局U的~存区?/span>
2,用户登陆后,把该用户的岗位、部门集合放入到用户U的~存?/span>.
3,pȝ在运时,大部分数据已l被加工处理?/span>,大大减轻了服务器的负?/span>.
事先计算:
事先计算是把能够计得到的属性在程设计时提前计出来,比如Q节点的位置Q它是一个枚丄型,开始节炏V中间节炏V结束节炏V如果在q行中计会(x)消耗服务器的资源,如果在设计阶D计好Q就?x)节省这W开销?/span>
q些事先计算包含多个斚wQ比如:(x)表单是否有明l、是否有框架、是否有扩展应用。。。。?/span>
XML数据的缓?/span>
pȝ启动h后就?x)?/span>xml数据调入到缓存处?/span>,节省了大量的IO操作?/span>
参数执行Q?/span>
多达95%以上?/span>sql都是用参数执行的Q?zhn)可以通过监控工具捕获到它们?/span>Ccflow是运行在bp框架上的Q所有的实体c,都是攑֜SQLCashq个cMQ所有的update,delete,insert,select操作都是采用的参数执行,生成?/span>sql攑օ~存里?/span>
W一ơ接触工作流pȝQ可能会(x)对一些基本的术语和名词有误解。如程实例Q流E模版,程版本{,以及(qing)q些名词之间的关p,需要有一个学?fn)和理解的过E。这些名词和术语也是工作系l中的通用名词Q通过学习(fn)和理解后Q会(x)对这些术语和名词有一个共同的认识和理解?/span>
如下面的词语
工作引擎:(x)抽象的业务流E设计模型,负责业务程的定义,解释和运转?/span>
工作模版:(x)用工作流引擎的基本概念和路由q程表示Z个业务办理过E,q个q程通常是用xml格式的文件来记录的,q个xml文gQ就是工作流模版Q也可以说是程模版?/span>
工作名Uͼ(x)是工作模版文件的名称。也可以叫流E名U?/span>
工作版本:(x)工作模版的版本Q也可以叫流E版本。在工作系l中Q对工作模版有个版本管理,新徏一个工作流模版时候,它的工作模版是.1。当再次做修改的时候,可以选择创徏新的版本Q如.2?/span>
因ؓ(f)一旦业务流E模版投入用了Q有了运行的程实例了,再次对业务流E做的修改,需要更新到新的版本中,原来的流E版本还需要存在,原来的流E定义信息,按版本仍然能查询到。新的修改在新的版本中?/span>
程名称Q流E版?是唯一标识一个业务流E的?/span>
工作徏模:(x)利用程设计器将业务处理q程用工作流的节Ҏ(gu)式表C出来,是工作徏模,也可以说是流E徏模?/span>
工作节点:(x)是工作流引擎的设计基本节点,一个节点表CZ个业务处理过E,在流E设计器中,?x)有相应的表C方式?/span>
程实例Q?/span>按照工作模版定义的处理q程启动q行的业务处理过E,xE实例。利用徏立好的业务流E模版,可以多次启动程实例Q一个流E实例即一个业务处理过E。如请假审批的流E,张三填写他的请假单,启动一个审Ҏ(gu)E实例。李四也填写一个自q清单单,也是启动了一条流E实例?/span>
程实例idQ每条启动的程实例Q在工作引擎中Q都?x)对应一个流E实例idQ来唯一标识q条程实例?/span>
业务数据Q?/span>程中每个节点上处理的业务记录等。通常程数据和业务数据是有关联的?/span>
程设计?/span>Q利用工作流引擎的设计基本节点和概念l业务流E徏模的可视化编辑工P是程设计器?/span>
当前步骤Q?/span>程实例未结束前Q正q行到的当前节点Qؓ(f)当前步骤?/span>
历史步骤Q?/span>程实例q行完成的节点,都认为是历史步骤?/span>
程实例q行轨迹Q?/span>每条程实例在工作流模版的节点上q行的轨qV?/span>
程实例监控Q?/span>监控每个程实例在各个节点的q行情况?/span>
dQ?/span>每条程实例在运行到程的各个节Ҏ(gu)Q会(x)产生一些待执行的Q务信息。有d名称Q描qͼ和参与hQ完成h{Q务的基本信息。通过d链接到待处理的业务过E?/span>
d参与人:(x)d信息的参与hQ能够查看到d的相关h?/span>
d执行人:(x)可执行Q务的操作人?/span>
d工单Q?/span>dz֏下来的工单?/span>
UŞ程(串行路由)Q?/span>业务建模中,节点按顺序一个一个的往后串联的方式?/span>
分合?q行路由)Q?/span>业务建模中,节点q行的方式往后链接?/span>
分支Q?/span>业务建模中,q分支的节点\由方式?/span>
合ƈQ?/span>业务建模中,^行分支的节点路由再合qv来的路由方式?/span>
子流E:(x)Z个独立的业务程Q嵌入到LE中?/span>
q里只是列出一些常用的工作系l中的术语,不体现流E引擎的设计基本概念?/span>
特别是流E模版,程实例Q业务数据这之间的关联和区别Q?/span>
程模版Q是业务处理过E用工作引擎的支持的方式表C出来的一个模版文件?/span>
程实例Q按照工作流模版定义的处理过E启动ƈq行的业务处理过E,通常对应一条主业务数据?/span>
2, 目程权限控制比较Ҏ(gu)Q比如一个h在a目中是目l理Q在b目中是工程师。这cȝ程在节Ҏ(gu)限控制时?x)遇到局限在本项目中{?/span>
3Q一个项目会(x)有资料树(wi)的概念,每一个有关项目的程h一些文档,q些文档?x)于目兌?/span>
4Q项目流Eccflow在表单设计中有一个约定。每个节点表单中Q流E表单除外)都必LPrjNo,PrjName两个属?
在流E设计时必须指明此流Eؓ(f)目cd的流E?/span>
环境搭徏
----------------------------------------
1. D:\ccflow\ExpandingApplication\Prj\Prj 复制?D:\ccflow\VisualFlow\ 中去.
2. 在ccflow webapplication 中引?D:\ccflow\ExpandingApplication\Prj\Components\BP.PRJ\BP.PRJ.csproj
3. 在目? D:\ccflow\VisualFlow\DataUser 下创Z个Prj.Data 目录. q个目录会(x)放资料树(wi)。?/span>
D:\ccflow\VisualFlow\DataUser\PrjData\Data 资料?wi)数据?/span>
D:\ccflow\VisualFlow\DataUser\PrjData\Templete 资料?wi)模板数?
3. ~译该项?
创徏(zhn)的W一个工E项目流E?
----------------------------------------
1, 在流E设计器中徏立一个项? 该项目的~号?0001.
2, 目设计目?wi)模?
2.1 创徏目录: D:\ccflow\VisualFlow\DataUser\PrjData\Templete\001
2.2 在以上目录下创徏目录模板, pȝ中读取文件名.文g里面可以没有M内容. (Z方便期间你可以把 D:\ccflow\ExpandingApplication\Prj\Templete\*.* copy 里面试)
目前只支持一U的资料?
2.3 说明:在?zhn)上传资料后,pȝ׃(x)自动的把文g上传?D:\ccflow\VisualFlow\DataUser\PrjData\Data\001 下面?/span>
3. 目设计岗位与h?设计资料?wi)节点访问规?
4. 新徏一个流E,在流E属性中讄该流Eؓ(f)目cd的流E?
5. 程的每个节点表单都要增加一个PrjNo,PrjName字段.
6, 在表单上Q增加一个超q接 q接地址?=当前节点ID. pȝ׃(x)打开目?wi)?
============== over =================
如果以上有变动,请参考ccflow程设计器说明书 .http://ccflow.org下蝲.
1, 撤销abcU用L(fng)限制?/span>
2Q开放手问源代码Q表单设计器源代码。分别是:
D:\ccflow\CCForm
D:\ccflow\VisualFlow\WF\WAP
到目前ؓ(f)止,ccflow 的源代码完全开放了Q欢q各位潜心研IӞ心诚则灵?/span>
以下是给学习(fn)使用ccflow的一些徏议?/span>
1, 多看看两个重要的操作手册?/span>
D:\ccflow\Documents\驰骋工作程引擎-自由表单设计器操作说明书.doc
D:\ccflow\Documents\驰骋工作程引擎-程设计器操作说明书.doc
2, 多看操作录像.
3, 按操作录像模仿徏立一个简单的程Q流E的一些基本元素概c?/span>
4, 加入ccflow的qq讨论? q把问题攑֜论坛上?/span>
其它:
ccflow 更新通知
http://hi.baidu.com/ccflow/blog/item/039ec84744bde0146a63e573.html
关于发布ccflow 程设计器源代码与ccflow未来产品U的声明.
http://hi.baidu.com/ccflow/blog/item/d70431df1932394895ee3755.html
C?!
ccflow.org
本次更新内容:
------------------------------------
1, 目录l构做了调整 原来 visualflow/*.* 重要的文件移?visualflow/WF/Admin/Xap 里面?
2, 把原来cU用L(fng)wap模块加入?visualflow/WF/WAP目录?
3, 删除了各个层是间的隐藏文? 一些排除的文g都被删除?
d的升U办?
----------------------
1, 重命名本Z的D:\ccflow, 比如QD:\ccflowBak
2, 重新下蝲 ccflow ?D:\ccflow svn 地址 http://ccflow.googlecode.com/svn/ccflow/
3, 修改本机上的 IIS 虚拟目录名称 Flow ?ccflow.
4, 启动D:\ccflow\VisualFlow\BP.Web.CCFlow.sln
?!!
ccflow.org
各位ccflow爱好者:(x)
最qccflow 要做一些调整与变动Q会(x)l各位的升与正怋用带来问题。遇到问题,h如下步骤解决?/span>
1Q全部更?更新内容(BP.En30,BP.WFV4, VisualFlow整个目录)
2Q提交错误与截图到群论坛?
q段旉估计要持l?天左?
谢谢(zhn)对ccflow的支?
南驰骋信息技术有限公?/span>
2011/11/21
在启动开始节Ҏ(gu)Q通常?x)向其发L(fng)(程的第一个点)传输一序列|来减用L(fng)输入或者处理特定业务。下面把q些特定的方法ȝ汇d下?/span>
利用url传输数据l表单:(x)
事例Q?/span>MyFlow.aspx?FK_Flow=001&FK_Node=101&PrjNo=GB1002&PrjName=目名称.
解释Q利?/span>Url的方式传递|Key是表单的字D名Q如果一?/span>ccform是自动获取它们把值放入表单控仉?/span>
q种方式适用于数据量比较?yu),没有明细表的倹{?/span>
把指定物理表的一列g递给表单Q?/span>
事例Q?/span>
MyFlow.aspx?FK_Flow=001&FK_Node=101&FromTableName=Prj_Main&FromTablePK=No&FromTablePKVal=GB1001
解释Q利用特定的标记传?/span>table名称Q这?/span>table的主键列名称Q指定的行数据?/span>pȝ׃(x)自动的生成一?/span>sql查询到这个行数据?/span>
Select * from FromTableName where FromTablePK =?FromTablePKVal?
如果查询不到数据Q就?x)抛异常?/span>
查询到数据就?x)把q一行的数据Ҏ(gu)列名与表单属性名U相对应?/span>copy上去?/span>
q种方式适用于数据量比较大数据传递?/span>
其它程节点通过url转向Q{向到开始节点:(x)
应用背景Q一个流E?/span>Al束后,Ҏ(gu)条g它要启动另外一个流E?/span>BQ对?/span>A程l束点的数据Q主表数据,明细表数据,附g数据Q都要传递到B程的第一个节点上去,cMccflow节点之间数据传递?/span>
事例Q?/span>
?/span>A程节点属性中->配置->成功发送后转向方式:转向指定?/span>url转向处理内容:MyFlow.aspx?FK_Flow=001&FK_Node=101q种方式pȝ׃(x)直接?/span>A程l束节点的数据复制到B程的开始节点上厅R这些数据包?/span>:主表、多个从表、附件数据?/span>Ccflow采用静默的默认的传递。实现这些方法请参?/span>BP.WFV4中的Flow.cscM?/span>NewWork()Ҏ(gu)?/span>
删除草稿Q?/span>
ccflow草稿的概?/span>:当启动一个流E时Q?/span>ccflow׃(x)为当前操作h员第一个节点表单插入一条数据,用户点保存时Q就?x)更新这条数据,q个NodeState=0Q做E,如果发送出MQ?/span>NodeState=1Q就变成了节点表单的历史数据了?/span>
如果有了草稿ccflow׃(x)把这个草E调出来昄l用戗也是说当前打开当前Ҏ(gu)草稿׃生了?/span>
草稿的生是因ؓ(f)用户在开始节Ҏ(gu)Q数据了数据Q保存了但是没有发送?/span>
如何删除草稿Q?/span>
事例Q?/span>MyFlow.aspx?FK_Flow=001&FK_Node=101& IsDeleteDraft=1
说明Q删除主表草E数据,从表草稿数据Q附件数据?/span>
程在退回时Q有一D|E数据就是从当前点到退回点的所做的工作Q这部分节点的数据如何处理成Z我们要探讨与取舍的难炏V?/span>
以请假流Eؓ(f)例,甌人发P部门l理审批Qȝ理审批,人力资源归档。如果ȝ理退回到W一个点Q可以解释ؓ(f)Q部门经理做的无效的工作Q此部分工作需要删除,?/span>3.0以前的版本,ccflow都是q样的处理的Q这L(fng)解释也是用户所接受的?/span>
但是在其它的程׃能这栯释了Q因Z需要保留历史痕q,q且在退回后有如下可能要发生?/span>
1Q?/span> 退回到指定的点后,发v人删除流E?/span>
2Q?/span> 退回到退回节点后Q发起h修改表单后发送,按原节点发回来?/span>
3Q?/span> 退回到退回节点后Q发起h修改表单后发送,l历与其它的路线步骤到当前点?/span>
4Q?/span> 退回到退回节点后Q发起h修改表单后发送,该走其它的\U不l当前点?/span>
Z如上可能性的发生ccflowQ做了如下处理?/span>
1Q?/span> 退回阶D|E数据写?/span>txt文g里,攑֜D:\ccflow\VisualFlow\DataUser\ReturnLog
2Q?/span> 增加了流E报告与节点的焦点字D功能,pȝ把每一步骤的操作都记到日志表里了,通过焦点字段的配合,可以让操作员方便明晰的看到轨qV?/span>
Ccflow4.5通过如上两个Ҏ(gu)解决退回数据的完整性问题?/span>
ccflow焦点字段:
http://hi.baidu.com/ccflow/blog/item/af7fa2580a0a26362834f0ff.html
如果你是独立q行模式Q用的ccflow的整体界面,那就修改ccflow主菜单文件?/span>
D:\ccflow\VisualFlow\DataUser\XML\BarOfTop.xml
1Q?span>
讄Url=”?2Q?span>
?/span>OnClick=”?增加一D?/span>js代码让其转入你的查询界面中去?/span>
在做(zhn)个性化的查询时Q你可能需要调用如下接口:(x)
程轨迹图:(x)
http://10.150.224.239/Flow/WF/Chart.aspx?WorkID=943&FK_Flow=008&FID=0
程工作报告:
http://10.150.224.239/Flow/WF/WFRpt.aspx?WorkID=943&FK_Flow=008&FID=0
表单附g
如何打开表单附g需要你查询了解表单设计器,多个附g的存储。在q里q如下:(x)
1Q?span>
首先要明要查询那个节点上的附gQ你能明节?/span>ID?/span>2Q?span>
查询物理?/span>SELECT*FROMSys_FrmAttachmentDBWHERERefPKVal=工作ID AND FK_MapData='ND'+节点~号?/span>Ҏ(gu)你的需要生成客h需要的样式?/span>
如下程图是一个典型的寚w件的审批程Qv草h发v一个标准文Ӟl过各部门审批,意见征集Q分合流Q,各部门汇{(分合)?span>
在工作日志中Q用户希望看到日志记录每ơ审Ҏ(gu)见,如果有多ơ退回,多次审批意见Q个是什么。如下图Q?/span>
如何?/span>ccflow要知道记录表单的那个字段Q这个字D可能是审批意见也可能是备注。如果?zhn)不设|它Q?/span>ccflowp录不上?/span>
解释说明Q?/span>
节点属性中的焦点字D|用来处理记录一个表单中重要的字D,比如Q一个审批表单中的审批处理意见字D,对这个表单来说他非常重要Q在程中我要记录这个字D作为此节点的审怿息?/span>
q所有的节点都要讄焦点字段?/span>
如下功能中用到焦点字D,工作日志、{发、退回?/span>
在工作日志中应用Q?/span>
如果(zhn)ؓ(f)此节点设|了焦点字段Q系l在日志记录Ӟ׃(x)记录到日志中厅R如果没有则不记录,如果对一个审Ҏ(gu)E来_(d)记录每个节点的审Ҏ(gu)见记录工作日志非怸要?/span>
在{发中应用Q?/span>
如果讄了焦点字D,用户可以在当前表单上在q个字段上填写意见,按下转发按钮后这个字D늚数据׃(x)被带到{发功能界面里去,W合操作?fn)惯?/span>
在退回中应用Q?/span>
同上?/span>
业务背景:
case1: 父流E在特定的节点启动子程后,在子程完成后,需要{到父程的发起子程的发起子程的节点上?
在父程的节点上可以在启动子程Q或者处理父程上的以后节点?/p>
case2: 一个节点完成后Q需要按照指定的条gQ一般就是表单中的一个字D늚|q行转向?/p>
要满以上功能,q里需要熟(zhn)与灉|q用节点属性的[成功发送后转向方式] ?/p>
在节Ҏ(gu)功发送后有如下处理方?
0 提示ccflow默认信息
pȝ提示详细的发送信息,包括下一步的接受人。。?br> 1 提示指定信息
按照(zhn)定义的信息提示l用戗此选项需要在[转向处理内容]文本框里输入提示内容?br> 2 转向指定的URL
按照(zhn)定义的url转向Q此选项需要在[转向处理内容]文本框里输入url?br> 3 按照条g转向
在相兛_能里定义转向条g?br>
利用此属性?zhn)可以个性化提示信息。可以在程处理完成后{向指定的url,也可以根据表单的字段的D{向指定的url?/p>
在父子流E中Q当子流E启动v来之后,可以利用此功能{到父程节点上去?/p>
在子程完成后,从子程转向父流E配|案例:(x)
1Q 打开子流E的最后一个节点属性界面,讄成功发送后转向方式Qؓ(f)3Q既Q{向指定的url
2Q 在转向处理内容输入一个url
l过如上的配|,子流E在完成后就转向父流E的节点? 其中: FK_Flow 是父流E的~号QFK_Node 是父流E启动子程?/p>
节点~号?子流E的FIDQ就是父程WorkID.
其它Q在ccflow中, OID 是WorkID. WorkID是OID . 他们两个在ccflow中是一个概念,一直被沿用下来了,不要h.
采用?c)表单和自p单设计审Ҏ(gu)E时到以下问题该如何解冻I(x)
采用?c)表单设计审批程存在的问?
样式固定Q无法调整文本框的宽度和高度.
re: ?c)表单里的文本框,有三U类型,大块文本Q整行显C,半行昄的?br>宽度与高度是固定的?/p>
字体无法调整Q控件的布局只能是两列;无法调整背景Q?
re:
1,背景不能调整?
2, 控g默认是四列显C,可以整行昄, q就?friendly form 的特炏V?br>
当文本框未激zL无法调整框内字体颜色?br>re: 可以考虑Q增加激zȝ效果Q等待升U吧?br>
设计时指定文本框的长度ؓ(f)整行Q显C时却显CZ段?br>re: 此属性对?c)表单无效Q对自由表单Q与明细表有效?/p>
采用自由表单设计审批程存在的问?
样式固定Q无法调整文本框的高度;不可~辑的文本框无法调整Q?br>RE: 对于文本狂,明细表,多选,控gQ选择该控Ӟshift+ 方向键可实现?/p>
字体无法调整Q控件的M布局无法调整Q无法调整背景;
REQ?字体大小可调整的, 背景不能调整Q需要二ơ开发它?/p>
U条_细调整没有合理的分U功能?br>re:选择U条 按下 A+ A- 可实现线条的_细?/p>
当控件ؓ(f)日期控gӞ无法调整控g的宽度和高度?br>re: 日期cȝtextbox 是固定的?/p>
要想二次开发你需要熟(zhn)如下查询方法?br> 查询待办一个h的待办工?
SELECT * FROM WF_GenerWorkerList WHERE FK_Emp='zhoupeng' and IsPass=0 AND IsEnable=1
查询在途工?
SELECT * FROM WF_GenerWorkerList WHERE FK_Emp='zhoupeng' and IsPass=1 AND IsEnable=1
查询一个h的一个流E的历史处理工作.
SELECT * FROM V_FlowData WHERE FlowEmps LIKE ',zhoupeng,' and WFState=1
公文程是以文档传递ؓ(f)基础的流E,而业务流E则是以表单数据为基的流E?/span>
cd的约?/span>:
公文程中只有一个类?/span>: 01表示公文c?/span>. 只要~号不是01的流E就是业务流E?/span>
在创建流E时Q?/span>ccflow自动判断~号是否?/span>01如果是就按照公文cȝ程创徏否则按照业务cȝ程创徏?/span>
表单区别:
公文程的表单字D|固定的,一般不做变化,比如Q文P发文单位Q收文单位,机密E度Q紧急程度等{,而业务类程表单是变化的。公文流E节点上只有一个表单,而业务流E有多个表单?/span>
载体区别Q?/span>
公文以文档ؓ(f)中心Q公文流E表单是描述文档的属性,公文程用户操作的前台表现Ş式以word为处理工作的载体Q采用了vsto技术,处理文g{?/span>业务程?/span>IE或?/span>csE序体处理数据流转?/span>
数据存储区别Q?/span>
公文程的数据分Z部分Q流E运转记录存储在数据表里Q公文模板存储在ftp服务器上Q公文文档数据存储在ftp服务器上?/span>
在本说明书中如果特别说明都是业务程开发?/span>
应用需求特?
1, 在开始节点生?
2, 生成后会(x)自动传递到其它的节点上?
实现Ҏ(gu):
1, 创徏一个生成自动编h者时间戳的函? 比如: GenerMyNo
2, 建立一个string字段Q设|ؓ(f)只读属?
3, 在这个字D中的属性的扩展讄中,数据获取-> 方式2Q利用sql 自动填充.
填写一个sql
for sqlserver:
比如: SELECT dbo.GenerMyNo()
for oracle:
比如: SELECT dbo.GenerMyNo()
设计一个好的工作流引擎Q就像设计一部汽车,必须有发动机提供动力Q轮子提供行赎ͼ车灯提供照明Q喇叭提供提C,刹R提供停止Q倒挡提供后退QR门提供钥匙进入系l?/span> (也可以说是安全验?/span>)Q导航器提供方向。现在试想一下:(x)我们拿着钥匙Q用户名与密码)Q进入汽车(工作引擎前台操作)Q先看看仪表有多水与a(b)料(待办工作Q。好Q现在我们开始进入发动引擎(启动程Q,看看前面是否有障物Q采集信息)Q挂挡,采a(b)门(点击发送流E按钮)Q松dQ前q。。。。。。{弯时要看前面的条件是怎样的(方向条gQ,停RQ是否有情况Q,到达目的圎ͼ程l束Q,中途情늉D(程完成的条Ӟ提前q回Q意外情冉|锚(程体检Q需要检修?/span>
一个好的工作流引擎h以下几个要素Q?/span> 1. 节点 2. 节点完成的条?/span> 3. 方向 4. 方向条g 5. 程完成的条?/span> 6. 文书、单?/span> 7. 岗位 8. 部门 9. 操作员?br />
Ƣ迎参考开源的ccflow.
http://ccflow.org
关键?ccflow,workflow,bpm,pȝ集成.
我们知道如果要把ccflow集成C的系l中(如果你不明白你可以看看相关的文档)Q?是
采用L(fng)换柱的概忉|ccflow 原来讉K物理表,现在改写成访问视图这个视图数据是从你
的业务系l中映射而来Q所以ccflow在运行时5大组l结构表数据权限体系都可以成功的?/p>
你的pȝ集成在一起了?/p>
我们知道Qccflow被集成到你的pȝ后,用户d首先是从应用pȝ(?/p>
?OA,ERP,CRM) q入的,在登陆时,p向用戯SID裂上写入一个随机的字符丌Ӏ?br />
在采用嵌入方式工作时Q每个功能都需?UserNo ?SID 两个参数。在讉K功能之前ccflow 需要对来访者进行n份验证。如果能够匹配了Qccflow׃(x)认ؓ(f)是合法的用户?/p>
在是否验证时有一个开兛_在web.config 中配|的,
IsAuth=1 需要验证,IsAuth=0 不需要验证?/p>
ZE序调试方便Q请把IsAuth 讄??/p>
更多的帮助信息请讉K http://ccflow.org/Help.aspx.
Ƣ迎使用开源的工作程引擎 ccflow.
各位ccflow的爱好?
期待已久的函数验证库功能与大家见面了Q经q多ơ的修改与设计,最后改成现在的操作与实现模式?br />目前已经提供部分pȝ函数验证库,q些通用的函数库?x)慢慢丰富v来。同时也提供了用戯定义函数功能?/p>
xQ希望各位能够在使用q程中:(x)
1Q提出更多更好的修改意见Q尤其是不能满你需求的地方?br /> 2, 提供ccflow 自己使用的通用数据输入校验函数?br /> 3, 期待着?提出在用过E中遇到的bug?br />
更如下内?
D:\ccflow\VisualFlow\DataUser\
D:\ccflow\VisualFlow\Data
D:\ccflow\VisualFlow\bin
D:\ccflow\VisualFlow\WF
操作步骤:
字段属?> 扩展讄-> js验证.
更详l的操作说明?lt;<自由表单设计器表单操作手?gt;>?
更多的帮助文?http://ccflow.org/Case.aspx
你使用愉快Q谢?
ccflow.org 2011/8/27
消息是ccflow发给用户的提CZ息,比如待办Q退回,转发Q逾期工作提醒?/span>
Ccflow有几U消息提C模式?
共有5U,分别是:(x)不提C,手机短信提示Q邮件提C,邮g+手机短信提示Q内部消息?/span>
特别说明Q内部消息,是与之耦合pȝ的消息处理。比如与oapȝ耦合Q可以把ccflow的消息传入到(zhn)的oapȝ中去Q用(zhn)的oapȝ提示l用戯处理的工作?/span>
如何Ҏ(gu)ccflow与我的系l内部消息通讯Q?/span>
在数据库下有一个叫[CCstaff] 的存储过E,ccflow产生内部消息后就?x)调用这个存储过E,把相关信息传入里?/span>(目前不支持附?/span>)。流E开发h员只要接受过来参数然后把其写入自q数据表里完成了?/span>
程使用人员如何军_接受信息的方式?
在个人配|里q行Q如下图?/span>
关于CCstaff 存储q程的参数说明:(x)
@Sender nvarchar(100), -发送h?/span>
@Receivers nvarchar(2000), -接受人,如果多个中间以逗号隔开?/span>
@Title nvarchar(100), -消息标题
@Context nvarchar(max) ?/span>消息内容?/span>
1,增加节点.
2,减少节点.
3,节点工作人员发生变化.
4,表单内容增加.
5,表单内容减少.
6,方向条g变化.
面对以上的变?/span>,ccflow采取的应Ҏ(gu)案如?/span>.
--------------------------------
1,增加节点.
RE:解决Ҏ(gu):Ҏ(gu)E没有媄?/span>.
1.对原来与现有的流E没有什么媄响,历史的工作报告还能打开.
程轨迹囑֏能会(x)出现不连l的情况,但是不媄响查?/span>.
2,在途工作会(x)按照新的设计去运?/span>.
2,减少节点.
影响范围:
1,历史数据?x)不能正常打开Q被删除的节Ҏ(gu)据反映不出来.
2,历史轨迹图不能被正确的显C?/span>.
3,在途工作会(x)出现错误.
RE:解决Ҏ(gu).
在原来的基础上改?/span>:
1,如果历史数据不多Q不是很重要.可以考虑,在原来基上修?/span>.
2,采用节点的生命周期的模式处理.要用的节?/span>.也就是说节点不删?/span>,而是改变它的生命周期.让其辑ֈ不可用的目的.
废止当前程,新徏新的程发布:
1,复制当前的流E,做ؓ(f)新的程发布.
2,用当前程.
采取后者方?/span>.
3,节点工作人员发生变化.
RE:Ҏ(gu)E运行没有媄响,对历史数据没有媄?/span>.
4,表单内容增加.
RE:Ҏ(gu)E运行没有媄响,对历史数据没有媄?/span>.
5,表单内容减少.
RE:把减的字段隐藏h. Ҏ(gu)E运行没有媄响,对历史数据没有媄?/span>.
6,方向条g变化.
RE:Ҏ(gu)E运行没有媄响,对历史数据没有媄?/span>.
表单扩展有那些类型?
---------------------------------------
1, U联下拉?
可以实现N个下拉框的数据联动?比如Q片区,省䆾Q洲地市Q区ѝ之间的联动?/p>
2, 自动完成&自动填充.
自动完成:cMbaidu, google搜烦的自动完成?br> 自动填充:比如输入一个商品编Ppȝ׃(x)把这个商品的相关属性绑定到其它的控件上厅R?/p>
3, 输入验证.
对于一些文本框数据采集的格式有特定的要求,比如Q电(sh)话号码,手机P邮g有特定的采集格式Q输入验证就解决了这个问题。即使你Ҏ(gu)则表辑օ不熟(zhn),pȝ自带的这些就可以满(zhn)的需要?/p>
4, popH返回倹{?br> 文本框的数据采集如果需要高U的查找查询Q需要个性化的定义这个窗体,此扩展设|就可以满(zhn)的要求?/p>
如何讄Q?br>---------------------------------------
1Q在?wi)的左边选择要设|的cd?br> 2Q根据系l的提示q行讄?/p>
cdQ?/b>默认分类 查看评论
CA点向B点发送ؓ(f)例?/span>
(一)岗位定范围模式:
?/span>B点设|的岗位来确定接受h员的范围Q这是一个通用的模式。岗位可以设|多个,因ؓ(f)岗位与h员是多对多的关系Q所以,有可能多个处理人出现。发送后Q你可以对这个集合进行修改,q也叫工作分配,分配的\径是被系l记录下来的。每ơ发送就?x)取q个记忆的\径?/span>
现在以流E事例说明:(x)比如B点岗位是副局长处理,q个单位里有三个副局长,他们分管的业务不同,q个程是什么业务就需要指定那个局长审扏V如果第一ơ指定了以后Q系l就把这个\径记录下来。下一ơ他?x)自动取出?/span>,(当然Q操作员可以q行二次分配)。按照你的上ơ分配的计算。这叫投递\径的自动记忆?/span>
q种以岗位确定接受h员的模式是最常用的模式?/span>
(?/span>)可以选择接受人的发送模?/span>:
讄方式Q在A点节点属性里讄可以选择接受?/span>(一个开兛_?/span>)Q在B点设|岗位。那么在A点向B点发送时Q引擎就?x)让你选择人员范围。这个h员的范围Q是B点的岗位来确定的?/span>
q种方式与上一个模式有惛_的地方,但是应用场景是不同的?/span>
(?/span>)指定特定的h接受人:(x)
在表单中讄一个字D,接受人的下拉列表。指定这个hL受下一步的工作。这是最直接的一U模式,但是只能指定一个hd理。这U模式用来处理每ơ不能确定h的工作h员,q且只有一个工作h员的模式?/span>
(?/span>)指定处理人集合的模式Q?/span>
?/span>B点上选择接受人的集合Q系l就?x)自动的投递给他们Q当然也可以q行二次分配。这U模式应用于特定的情况下?/span>
递归做ؓ(f)一U算法在E序设计语言中广泛应?/span>.是指函数/q程/子程序在q行q程中直接或间接调用自n而生的重入现象.递归是计机U学的一个重要概?/span>,递归的方法是E序设计中有效的Ҏ(gu),采用递归~写E序能ɽE序变得z和清晰.?/span>
递归在工作流E引擎中有广泛的应用Q以以下事例来说明:(x)
应用一Q退回到指定的节点,要把当前节电(sh)与退回节点之间的节点数据清空?/span>
/// <summary> /// ?/span>ÌY?/span>t¦?/span>¦??/span>y?/span>¢??/span>??/span>t²?/span>Ì??/span>??/span>??/span>Ì??/span>ºy?/span>Y /// </summary> /// <param name="nds">?/span>Ì??/span>ä??/span>Ì??/span>t²?/span>Ì??/span>¡¥?/span>?</param> publicvoid DeleteToNodesData(Nodes nds) { /*开a?/span>º??/span>Àt¦?/span>]t²?/span>Ì??/span>ä??/span>Ì??/span>t²?/span>Ì??/span>¡¥?/span>?*/ foreach (Node nd in nds) { Work wk = nd.HisWork; wk.OID = this.WorkID; if (wk.Delete() == 0) { wk.FID = this.WorkID; if (wk.Delete(WorkAttr.FID, this.WorkID) == 0) continue; }
/*?/span>¦Ì?/span>¡Â:?/span>?l?/span>-?/span>¦??/span>y?/span>??/span>t²?/span>Ì??/span>ºy?/span>Y?/span>¡^*/ DBAccess.RunSQL("DELETE WF_GenerWorkerList WHERE (WorkID=" + this.WorkID + " OR FID=" + this.WorkID + ") AND FK_Node=" + nd.NodeID);
//?/span>¦??/span>y?/span>y?/span>¡^?/span>Ì??/span>]??/span>??/span>ºy?/span>Y?/span>¡^ DBAccess.RunSQL("DELETE WF_GenerWorkFlow WHERE WorkID NOT IN (SELECT WorkID FROM WF_GenerWorkerList )"); DBAccess.RunSQL("DELETE WF_GenerFH WHERE FID NOT IN (SELECT FID FROM WF_GenerWorkerList)");
DeleteToNodesData(nd.HisToNodes); } }
|
应用二:(x)在分合流E过E中Q流E结束时Q要Ҏ(gu)用户的需要判断ƈ杀掉没有完成的q程?/span>
/// <summary> /// l?/span>t¢?/span>º??/span>¢¡ÂE?/span>t¬ /// </summary> /// <returns></returns> publicstring DoFlowOver() { // ?/span>¡?/span>¢¡é?/span>¢¡ÂE?/span>t¬?/span>º??/span>]y?/span>¡^ GenerWorkFlow gwf = newGenerWorkFlow(this.WorkID); Node nd = newNode(gwf.FK_Node); string msg = this.BeforeFlowOver();
//?/span>tt?/span>t??/span>t¹?/span>Ì??/span>Át®?/span>¢¡ÂE?/span>t¬l?/span>t¢?/span>º??/span>¡^ WorkerLists wls = newWorkerLists(); wls.Retrieve(WorkerListAttr.FID, this.WorkID); foreach (WorkerList wl in wls) { WorkFlow wf = newWorkFlow(wl.FK_Flow, wl.WorkID); wf.DoFlowOver(); } 。。。。。。。。。。。。。?/span> ?/span> |
应用?/span>:Ҏ(gu)当前节点?/span>ID,向上q溯一个分节炏V?/span>
/// <summary> /// ?/span>??/span>t??/span>t¹?/span>Ì??/span>¦?一??/span>??/span>Ì??/span>]??/span>¢¡Â?/span>Ì? /// </summary> privateNode _GetHisPriFLNode(Nodes nds) { foreach (Node mynd in nds) { if (mynd.IsHL) return mynd; else return _GetHisPriFLNode(mynd.HisFromNodes); } returnnull; } /// <summary> /// ?/span>t¹?/span>Ì??/span>¦?一??/span>??/span>]??/span>¢¡Â?/span>t²?/span>Ì? /// </summary> publicNode HisPriFLNode { get { return _GetHisPriFLNode(this.HisFromNodes); } }
|
在退回工作时Q上一步h员直接退回给指定的h员,只有q节点上的岗位h员可以接受退回信息ƈ处理退回的工作Q这个节点上q个岗位上的人员是不可以操作此工作的。所以它是一对一的关pR?/span>
在撤消时Q是当前的操作员撤消本次发送,但是他有可能自己的错误,也有可能不需要自己处理需要其它的同岗位同节点上的人员处理了,所以撤消回来的工作应该?/span>1?/span>n的关p,回复到工作强办的状态。以便可以让其它的同事也有机?x)参与处理这件工作。实现这个的状态就要上ơ的发送轨qw扑ֈ可以处理当前节点的工作h员,q行对他们执行工作分配?/span>
开发逻辑:
讄q个参数名就员完成通过率,他是在节点一个重要属性之一Q取D围在0-100之间。如果设|成0Q就按照M一个h完成后就可以通过Q设|成100Q就是所有的人完成后才能通过。之间的通过的情冉|按照如下公式求出通过?/span>= 已完成h?/span>/ȝEh?/span>*100%.
当通过完成?/span><=通过率时p其它通过Q也是下一个h的待办工作可见的?/span>
对于要处理的人员来说Q退回是被动的,撤消是主动的?/span>
q不是所有的节点都可以退回,所以节点的退回功能是可以配置的?/span>
退回有两种情况一U是直接退回上一步骤Q另外一U是可以退回到以前工作的Q意一步骤?/span>
q不是所有的节点都可以退回到L步骤Q所以是否要可以退回到L步骤也是需要配|的?/span>
退回可分ؓ(f)显性退回与隐性退回,q两者的不同之处是是否记录退回轨qV隐性退回是于特D的领导使用的功能?/span>
撤消功能是主动的操作Q对于Q意一个步骤来_(d)只要发出去,Ҏ(gu)没有处理完之前,都可以撤消?/span>
q个功能在结束节点以外的炚w是有效的Q撤消是没有工作轨迹可以记录的?/span>
如果一个节点要求实C流E运行那一个环节都可以撤消Q这个的功能叫强制撤消。ƈ不是所有的节点都可以强制撤消?/span>
应用案例Q一个工作h员受理了一件工作,当这件工作运行了n (n>2)个环节后Q受理h员突然发现填写受理的资料错误了,他要撤消回来?/span>
有两U方式:(x)
1.打电(sh)话给当前处理的工作h员让他退回给(zhn)?/span>
2Q向理员申请强制撤消功能?/span>
我们ȝ一下流E类型的模式Q那有助与我们在开发流E引擎,或者在设计与分析流E是以便可以对号入Q说明:(x)本文量用通俗的语a来描q?/span>
W一U类型:(x)q面程Q也可以U呼它ؓ(f)单线E流E,q种cd的流E在我们工作中非常多Q比如:(x)请假程、报销程、借款程、出库流E。它的特Ҏ(gu)Q整个流E中只有一个流E?/span>ID.不允怸个在在同一个时间点处理一件工作,工作是一个步骤接着一个步骤。它的{向是Ҏ(gu)一定的条g来完成的?/span>
W二U类型:(x)分发式流E,也可以叫它ؓ(f)分发式多U程程。这cȝ程开始节点必L分流节点。结束节点可以是合流节点Q也可以是普通节炏V比如:(x)周例?x)流E,销售周ȝ汇报程。以“销售部周ȝ汇报程”ؓ(f)例来说明Q第一部系l定期在?/span>1启动h程Q把工作Q或者说填写销售表Q发送给各个销售h员。各个销售h员接受到d后,发送给销售部l理汇d理。这cȝ程叫分发式多线E流E?/span>
W三U类型:(x)汇流式流E,也可以称为汇d多线E流E。这cLE的特点是发hE的人员是不定的,但是处理q个事务是成批的。用现实的生zMD例:(x)区门口的邮政信,邮寄信g的h是不固定的,我们把每个客L(fng)作一个工作线E,邮递员可以Ҏ(gu)需要在规定的时间去收取一ơ。如果没有一个信件要邮寄Q他׃收取为空Q也是不进行下一步。这U类型的l束点,也是不确定的可以是汇ȝ合流Ҏ(gu)受,也可以普通点l束。但是开始点必须是普通的节点?/span>
W四U类型:(x)唤醒程Q也UCؓ(f)父子程Q一个^面流E在特定的节点上需要唤醒其它的程。比如:(x)工程理程Q一般来说有如下几个环节?{订合同-》实施工E?/span>=》验收工E?/span>
在实施工E这个点上,可以延很多的子程比如Q催ƾ流E,zַ程Q设计流E。等{。项目经理可以根据需要在M旉唤醒子流E。工E管理流E叫LE,催款程Q派工流E。。?/span>则是子流E。这U流E与W二三种模式不同那种Q可以称gؓ(f)U程Q这U也可以叫父子流E?/span>
唤醒的子程与手工发L(fng)程的区别是它有一个流E?/span>ID。由程ID.来确定这U流E?/span>
lg所qͼ(x)大千世界Q各U流E都可以被提|归纳Q分c,抽象出来q四U模式。你可以把你分析与设计的程对号入Q驰骋业务流E引擎已l把完全实现q四U工作模式,q且0代码实现?/span>
如果你是一个工作流E引擎设计h员,分析q四U模式是必须的?/span>
?什么应用背景需要用到定时启?
当一个流E是定期的Q务需要手工作需要定期的启动?它就需要定时的来启?
比如:
在办公流E中:
月䆾销售例?
销售部门需要每个月定期启动一ơ月份销售例?
周工作ȝ程:
每个周需要基层h员向上部门负责h提交工作ȝ.
定期起动有几U时间模式?
定期启动的模?
手动启动:
按年启动: 讄格式:@MM-dd,hh:mm CZ:@05-01,12:01 每年???2?1分执?
按月启动: 讄格式:@dd,hh:mm CZ:@01,12:01 每月??2?1分执?
按周启动: 讄格式:@X,hh:mm (X代表周几, x=0 周末, x=1 ? ...... )
按天启动: 讄格式:@hh:mm CZ:@12:01 每天?2?1分执?
CZ:@1,12:01 每周1?2?1分执?
按小时启?讄格式:@mm CZ:@1,12:01 每周1?2?1分执?
格式说明:
多个旉点以@W号分开.
它能形象的反应出来,一个h的工作内容,l合日历面板的方式呈玎ͼ让用户对数据的感知更加直观?/p>
驰骋工作程引擎, ?x)?.0 为新老用h供这个功能,老用户将获取免费升?/p>
ccflow 工作月日?/span>
工作周日?/span>
公文菜单-利用vsto技术,因ؓ(f)没有发v程Q所以一些菜单是灰色的?/p>
发v程选择一个流E模板,公文模板是显C在下面的?/span>
{֏程
切换登陆用户