ofbiz工作流Word文档下载推荐.docx
- 文档编号:19663530
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:15
- 大小:24.52KB
ofbiz工作流Word文档下载推荐.docx
《ofbiz工作流Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《ofbiz工作流Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
YES)
canStart-告诉工作流引擎,如果本扩展属性设定为yes的任务都能够初始化工作流。
因此,工作流不但可以从第一个任务开始启动,而且可以从任何本属性设定为yes的任务开始启动。
实现/工具扩充属性和实际参数
runAsUser-这个扩展属性将告诉TOOL(如果是过程)以这个用户来运行定义的服务。
取用户的userLoginId作为属性值。
缺省情况下不传递用户登录对象。
ActualParameters:
表达式:
可以使用ActualParameters里的表达式对上下文属性与服务参数进行映射。
你必须用expr:
来注释一个表达式。
例如:
<
ActualParameter>
expr:
orderNumber=orderId<
/ActualParameter>
先将上下文属性orderId映射到一个叫orderNumber的内存缓冲变量,然后,如果你接着写:
orderNumber<
表示参数orderNumber将被传递到值为orderId的服务中。
工作任务ID:
你可以把workEffortId作为一个实际参数,这个参数映射为当前任务的主关键字。
缺省启动任务(ACTIVITY)
缺省地,一个工作流从任务列表的第一个任务开始启动,因为列表中的第一个任务为缺省启动任务。
这意味着当一个工作流正常启动时,将首先运行第一个任务,然后在根据路由(transition)继续流转。
最常见的方式是调用一个工作流时,可能从许多不同的起点开始调用。
在这种情况下,采用客户端API来启动合适的任务。
路由(transition)将从这个起点继续下去。
只有任务的'
canStart'
扩展属性设定为yes的任务才可以初始化一个工作流。
3、客户端API
OFBiz工作流引擎的客户端API由一组全局服务和factory类组成。
这个factory类叫org.ofbiz.core.workflow.WfFactory,能用来创建一个工作流构件(process/activity/assignment)的新实例,或者定位一个已存在的实例。
实例被储存在工作任务实体中,并且在必要时装入内存。
在org.ofbiz.core.workflow.WorkflowServices里的这组全局服务被设置能够很容易生成、接受和完成委派/任务。
虽然使用这些服务不是必须的,但是强烈建议你使用。
复习JavaDocs可以让你了解到这些类。
工作任务(workeffort)的web应用就是一个工作流web客户端的例子。
通过这个界面,你可以接受到当前委派给你的组别/角色的工作委派,并可以编辑其状态。
如果你想尝试一下,请单击http:
//localhost:
8080/workeffort.。
4、工作流任务
手动和自动任务的组合让一个工作流变得功能十分强大。
OFBiz工作流引擎当前已经实现无(NO)、路由(ROUTE)、工具:
过程(TOOL:
Procedure)、子流程等类型任务。
工作:
应用(TOOL:
Application)类型任务目前仍未实现,但是将来版本会实现。
无(NO)-如字面意义显示一样,表示没有任务。
这用来描述一个'
手动'
任务。
路由(ROUTE)-一个路由活动是利用路由(transition)简单地转移到其他任务中。
工具(TOOL)-
应用(Application):
调用一个外部应用程序-目前暂未实现。
过程(Procedure):
OFBiz工作流引擎把过程当作一个内部服务调用来实现。
子流程(SUB-FLOW)-同步或异步地创建和运行一个子流程。
当前OFBiz工作流引擎版本并没有实现LOOPS,但将来版本会实现。
5、用法
在使用工作流引擎之前,你必须先准备一个预计调用的流程,流程要按XPDL格式进行设计。
一旦流程设计完成,需要把XPDL文件导入到工作流实体中。
你可以通过web界面的webtools工具来完成这些工作。
工作流被导入后,就可以被执行了。
调用一个工作流最容易的方法是把它定义成一个服务。
为工作流创建一个服务,并把引擎类型设定为'
workflow'
,然后就可以象运行任何其他服务一样启动一个工作流。
6、文档注释
我们知道本文档不够详细,为此我们向你道歉。
然而,我们大部分时间都在写代码,因此,不能全力写文档。
虽然我们也认识到好文档是有必要的,但是我们的资源终究有限。
如果你或了解的其他任何人愿意花时间来为OFBiz写文档,请根据本文档顶部的e-mail地址联系我们。
多谢。
二、编程指南
建立流程状态实体
开发一个流程首先要建立一个,记录流程状态的实体,比如在ofbiz的流程例子中建立了一个OrderHeader的实体,这个实体最起码要有三个基本属性描述,一个是partyId,另外一个是roletypeId,还有一个是被控对象的Id。
PartyId和RoletypeId指明流程中某个流程的执行者,被控对象Id指明要控制的对象。
比如在公文流转中控制的是公文。
在ofbiz的定单管理中控制的是定单。
编写流程活动的服务
流程在执行过程中,依据PartyId、RoletypeId和被控对象的Id,并根据环境参数,执行特定的动作,这个动作可以由开发人员具体编写。
并将执行的状态保存到流程状态实体中。
对于MANUAL类型的服务,开发人员编写特定的应用,在应用执行完成后重新执行流程。
三、编程参考
本部分结合ofbiz中定单管理中的例子来阐述
1、在定单管理中,若一个定单结束则定单进入流程控制,
1)、流程的触发
定单流程是在在清空购物车后由clearcart请求触发的,其定义在Controll.xml描述,结构如下:
------------------------------------------------------------------------------------------
request-mapuri="
clearcart"
>
<
securityhttps="
true"
auth="
/>
eventtype="
java"
path="
monapp.order.shoppingcart.ShoppingCartEvents"
invoke="
destroyCart"
responsename="
success"
type="
request"
value="
initiateOrderWorkflow"
error"
view"
confirm"
/request-map>
direct-request="
false"
monapp.order.shoppingcart.CheckOutEvents"
success”type=”view”value=”confirm"
---------------------------------------------------------------------------
清空购物车后发出initiateOrderWorkflow请求,而initiateOrderWorkflow请求触发CheckOutEvents类中initiateOrderWorkflow方法的执行initiateOrderWorkflow启动流程.
2)、流程的启动
流程启动是由initiateOrderWorkflow类中initiateOrderWorkflow的方法来启动的,具体过程如下
--------------------------------------------------------------------
publicstaticStringinitiateOrderWorkflow(HttpServletRequestrequest,HttpServletResponseresponse){
GenericDelegatordelegator=(GenericDelegator)request.getAttribute("
delegator"
);
LocalDispatcherdispatcher=(LocalDispatcher)request.getAttribute("
dispatcher"
StringorderId=(String)request.getAttribute("
order_id"
GenericValueorderHeader=null;
try{
orderHeader=delegator.findByPrimaryKey("
OrderHeader"
UtilMisc.toMap("
orderId"
orderId));
}catch(GenericEntityExceptione){
Debug.logError(e,"
Problemsgettingorderheader"
module);
request.setAttribute(SiteDefs.ERROR_MESSAGE,"
li>
Problemsgettingorderheader.WFnotstarted!
"
return"
;
}
if(orderHeader!
=null){
dispatcher.runAsync("
processOrder"
orderId,"
orderStatusId"
orderHeader.getString("
statusId"
)));
}catch(GenericServiceExceptione){
Cannotinvokeprocessingworkflow"
ProblemsstartingorderWF!
-------------------------------------------------------------------------------------------
该方法的主要工作为
准备服务的参数
服务的参数有两个,一个是orderId,另外一个是orderStatusId,这两个参数是从orderHeader实体中获取的,orderHeader实体记录了定单状态和参数
OrderHeader在entitymodel_order.xml中定义:
其结构如下
----------------------------------------------------
entityentity-name="
package-name="
monapp.order.order"
never-cache="
title="
OrderHeaderEntity"
fieldname="
type="
id-ne"
/field>
orderTypeId"
id"
orderDate"
date-time"
entryDate"
visitId"
createdBy"
id-vlong"
syncStatusId"
billingAccountId"
originFacilityId"
webSiteId"
grandTotal"
currency-amount"
prim-keyfield="
--------------------------------------------------------
调用流程服务
initiateOrderWorkflow调用的服务为processOrder,processOrder在services_order.xml中描述,其内容为:
servicename="
engine="
workflow"
location="
ProcessOrder"
description>
Servicefortestingtheworkflowengine<
/description>
attributename="
String"
mode="
IN"
optional="
INOUT"
/service>
-----------------------------------------------------------
说明这个服务是流程服务。
流程服务是由wfmc的标准语言xpdl来描述的程序脚本。
指的流程脚本中的包(package)
指的是流程脚本中的WorkflowProcess,
3)、活动的执行
a)参数传入
上面已经说明,ofbiz在调用服务时要给流程传入两个参数,这两个参数在流程脚本中的要有描述:
----------------------------------------------------------------
FormalParameters>
FormalParameterId="
Index="
1"
Mode="
DataType>
BasicTypeType="
STRING"
/DataType>
Description>
Theordernumber<
/Description>
/FormalParameter>
2"
Theorderstatus<
/FormalParameters>
-------------------------------------------------------
b)活动的执行
在流程脚本中,活动tool说明要调用的过程
如果Type="
PROCEDURE"
,则服务名称缺省为ToolId,若存在类似于ExtendedAttributeName扩展属性中存在serviceName的定义,则服务名称为ExtendedAttributeName中定义的名称
APPICATION"
则服务名称为wfActivateApplication
其他所有情况都使用ToolId作为服务的名称
-------------------------------------
ToolId="
orderNotReadySuspend"
Type="
ActualParameters>
workEffortId<
/ActualParameters>
ExtendedAttributes>
ExtendedAttributeName="
serviceName"
Value="
wfSuspendActivity"
runAsUser"
admin"
/ExtendedAttributes>
/Tool>
----------------------------------------------
其中<
说明该活动调用ofbiz定义的一个标准服务wfSuspendActivity,这个服务在services_workflow.xml中定义结构如下
location="
org.ofbiz.core.workflow.client.WorkflowServices"
suspendActivity"
Suspendaworkflowactivity<
workEffortId"
使用的ActualParameter参数为workEffortId,<
workEffortId<
workEffortId的值是内部自动获取的。
说明该活动是由admin来建立,如果没有指明则说明该活动的建立是由workflowOwnerId来指定,workflowOwnerId指的是登录用户
这里说明(活动的创建者和活动的执行者不是一回事,也即一个是workflow的owner,一个是workflow的performer
c)Type="
时的服务
当Type="
时调用wfActivateApplication服务,该服务是向ApplicationSandbox实体中记录当前活动的状态信息,其中最重要的是workEffortId,通过它可以获取当前的流程、当前的处理、当前的活动等。
以便由应用程序进行处理。
一般情况下他是流程引擎处理的结果。
GetApplicationContext获取信息
CompleteApplication完成应用
d)活动中ActualParameters参数的获取方法和步骤
活动中可以使用的参数,包括
服务运行传入的参数
运行环境参数,是从根据workEffortId从WorkEffort中获取runtimeDataId,由runtimeDataId从RuntimeData中读取
extendedAttributes定义的参数(runAsUser,workflowOwnerId等)
userLogin,
workEffortId
assignedPartyId(由Performer定义)
assignedRoleTypeId,(由Performer定义)
参数值的获取
活动依据ActualParameters的定义从上述可运行的参数中取得或计算出参数值
如果只列出变量名称,则直接从上述环境中取值
如果变量以:
expr:
打头则变量值用bsh计算出来
name:
打头则变量值从环境中取值并影射到新的名称上
比如:
流程中的服务,需要的变量名称为statusId,而环境中实际的名称为currentStatusId,则ActualParameters可以描述成name:
statusId=currentStatusId
综合起来Ac
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ofbiz 工作流