ofbiz工作流Word文档下载推荐.docx

上传人:b****5 文档编号:19663530 上传时间:2023-01-08 格式:DOCX 页数:15 大小:24.52KB
下载 相关 举报
ofbiz工作流Word文档下载推荐.docx_第1页
第1页 / 共15页
ofbiz工作流Word文档下载推荐.docx_第2页
第2页 / 共15页
ofbiz工作流Word文档下载推荐.docx_第3页
第3页 / 共15页
ofbiz工作流Word文档下载推荐.docx_第4页
第4页 / 共15页
ofbiz工作流Word文档下载推荐.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

ofbiz工作流Word文档下载推荐.docx

《ofbiz工作流Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《ofbiz工作流Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。

ofbiz工作流Word文档下载推荐.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1