JTangFlowJ应用服务器程序员手册.doc_第1页
JTangFlowJ应用服务器程序员手册.doc_第2页
免费预览已结束,剩余67页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

jtangflow-s v3.0程序员手册浙江省杭州市东部软件园a座1212室浙江大学中间件工程技术中心修订记录日期修订版本描述作者2007-05-161.00初稿完成阮凌波、吴斌、黄颂博67jtang应用服务器程序员手册目录1. 概述31.1 文档概览31.2 文档受众31.3 相关文档32. 系统简介32.1 系统基本概念32.2 系统体系结构42.3 系统组成部分52.3.1 流程定义工具52.3.2 工作流引擎52.4 系统功能82.4.1 业务流程建模功能82.4.2 流程执行和监控功能92.5 系统运行环境92.6 系统性能92.7 系统特色102.7.1 规范化和标准化102.7.2 完整的系统部件102.7.3 灵活的流程定义102.7.4 丰富的应用编程接口102.7.5 方便的第三方组织数据的重用方案102.7.6 跨语言的工作流二次开发113. 基于jtangflow的接口开发工作流任务管理器113.1 工作流任务管理器功能框架113.2 登录模块设计123.3 任务列表模块的开发(主要介绍allworkitem.jsp)123.4 任务执行模块的开发133.4.1 任务执行模块功能框架133.4.2 启动新流程的功能开发143.4.3 执行任务的功能开发(主要介绍doworkitem.jsp)153.4.4 动态设置任务的功能开发173.4.5 任务转发对象的选取的功能开发(未做)183.4.6 任务转发的功能开发(未做)193.5 用户应用页面开发193.5.1 获取应用数据193.5.2 用户页面内容203.5.3 回传数据203.6 流程监控模块的开发(缺)203.7 消息发送的功能开发(缺)203.7.1 获取当前系统消息列表的功能开发204. 附录204.1 工作流接口wapi大全204.1.1 全局接口 globalapi(ejb接口) jtangflowfactory(ejb接口) transfer(ejb接口)284.1.2 实例接口2 packageinstance(ejb接口)2 processinstance(ejb接口)3 actinstance(ejb接口)3 workitem(ejb接口)3 datainstance(ejb接口)4 participantinstance434.1.3 定义接口4 flowpackage(ejb接口)4 process(ejb接口)4 activity(ejb接口)50 transition(java类)5 participant(java类)5 data(java类)5 application包561. 概述1.1 文档概览第一章,概述,从总体上介绍了文档的组织结构。第二章,系统简介,介绍了jtangflow-s的整体结构,重点说明了引擎部分第三章,讲述了如何基于jtangflow-s提供的接口进行二次开发,主要包括任务管理器和监控器的开发。第四章,附录部分对jtangflow-s提供的二次开发接口进行了具体说明。1.2 文档受众本文档面向基于jtangflow-s系统进行二次开发的程序员,文档中包含的主题主要集中在如何使用系统提供的接口开发任务管理器和监控器,同时,也包含了一些jtangflow-s系统的基本架构和工作流的一些基本概念,对于测试和使用工作流系统也有一定的参考价值。1.3 相关文档jtangflow用户使用手册.doc:工作流定义器使用帮助文档2. 系统简介2.1 系统基本概念l 工作流(workflow)业务流程的全部或部分自动化,在此过程中,文档、信息或者任务按照一定的过程规则流转,实现组织成员间的协调工作以期达到业务的整体目标。l 工作流管理系统(wfms: workflow management system)一种能定义、创建和管理工作流执行的系统。主要包含三种功能:在流程建立建模的建模功能,即完成工作流过程和相关活动的定义和描述;在流程执行阶段的控制功能,即执行工作流过程,完成活动调度、任务分发和流程流转;在流程运行阶段的人机交互功能,即在各种活动执行过程中实现用户与应用工具之间的数据交互。 l 业务流程(business process)在功能确定的组织结构中,能够实现业务目标和策略的相互连接的过程和活动集。例如,投保过程、项目开发过程。l 流程定义(process definition)业务流程的形式化描述,来支持系统建模和运行过程的自动化。过程可分解为一系列子过程和活动,其定义主要包括描述过程起始、终止的活动关系网络,以及一些关于个体行为的信息,例如组织成员,与过程相关的应用和数据等。l 活动(activity)实现过程逻辑步骤的一项工作任务的描述,一般分手工操作和自动处理两类。活动是过程执行中可被工作流引擎调度的最小工作单元,它要求有人或机器的参与。l 流程实例/活动实例(process instances/activity instances)实际运行中的一个过程或活动。每个实例代表一个能独立控制执行,具有内部状态的线程,可被外界通过标识存取。下图工作流基本概念及其关系。图 21工作流概念及关系图2.2 系统体系结构jtangflow工作流管理系统是在wfmc的工作流参考模型的基础上进行开发的,下图为系统的整体结构图。系统可以分为系统建模工具、工作流运行平台两个部分。系统建模工具是提供给应用系统开发者,让其定义流程,定义组织结构和登记所开发的页面应用的工具,包括流程定义工具,组织结构定义工具和应用管理工具。这些工具都是运行于客户端的windows程序。流程运行平台用以在系统运行时,支持流程的执行,主要作用有保证流程正常流转,分派任务,提供接口让用户获取任务等。流程运行平台又可以分为工作流接口,工作流引擎、工作流任务管理器和工作流监控工具。图 22 jtangflow-s整体体系结构图2.3 系统组成部分2.3.1 流程定义工具流程定义工具主要是一个图形化的流程定义工具,提供所见即所得的流程定制平台,其中包括流程定制部分、人员管理部分。具体请见jtangflow用户使用手册.doc。2.3.2 工作流引擎工作流引擎是在后台运行的一个java程序,主要负责流程的正常流转。主要的作用有启动和结束活动,检查流程是否超期等。这个程序直接操作数据库,和工作流接口以及应用系统没有直接的联系,而系统开发者和使用者也都不需要做和其相关的工作。引擎结构图如下:图 23 jtangflow-s引擎体系结构图从下往上依次为:工作流持久化层:用于保存流程运行的定义信息和运行时信息,备份历史数据,保证在引擎正常关闭或者异常后能继续未完成工作。中间件服务器:jtangflow-s引擎运行在如jtang、jboss之类的中间件平台之上,主要使用了web和ejb技术。后台引擎:jtangflow-s引擎的核心部分,主要包括流程控制子模块、应用调用子模块、事件处理子模块。工作流接口:工作流的接口是直接提供给应用开发者,用于在工作流管理系统的基础上开发应用系统。通过这些接口应用程序可以直接对工作流系统进行操作,使用工作流系统中的功能。这里主要的接口是工作流应用编程接口,提供了用户任务管理,应用调用,流程跟踪和监控,设置活动和流程数据和属性,代理人设置等几方面功能。组织结构接口和通知提示接口是辅助接口,用以获得组织结构信息和系统发给用户的消息和提示。任务管理器:系统自带了具备基本功能的任务管理器,能够支持用户登陆、获取任务、执行任务、转发任务、发送消息等主要功能。监控器:监控工是钱塘工作流管理系统重要组成部分,主要提供对系统连接状态的管理、流程定义的管理以及流程实例的监控三大模块功能。其中,系统连接状态的管理主要包括浏览当前系统的连接信息以及对连接的操作;流程定义的管理目前主要提供的是对流程定义信息的浏览;流程实例的监控主要包括流程实例详情的流程、流程状态的修改、流程相关数据的修改、流程实例的相关任务的管理、流程实例相关活动的管理等。2.4 系统功能2.4.1 业务流程建模功能用户通过使用钱塘工作流建模工具,经过简易方便的拖拉,以“所见即所的方式建立和发布业务流程。流程建模工具支持如下功能:o 支持顺序、选择、并发和循环等典型流程结构;o 支持子流程功能;o 支持基于角色和约束的任务分配策略;o 支持对任务进行期限设置;o 支持运行时指定任务的执行者和设定任务期限;o 支持复杂的表达式功能;o 支持流程级别和任务级别的自定义属性的设置;o 支持复杂的人员、组织和角色的关系模型;o 支持web应用、ejb应用、web服务等多种应用类型; 2.4.2 流程执行和监控功能钱塘工作流执行引擎负责解析流程定义、生成用户任务和流程路由选择。用户通过与工作流任务管理器的交互获取任务列表、执行和提交任务。流程管理员通过工作流监控跟踪和管理系统部署的流程和当前运行的流程状态。流程执行和监控支持如下特殊功能:o 支持任务转发功能;o 支持用户代理功能;o 支持任务超期提醒功能;o 支持消息传递功能;o 支持用户动态选择路由功能;o 支持任务的批处理功能;o 支持任务的异常处理功能;o 支持流程历史数据的自动备份功能; 2.5 系统运行环境1. 产品各组件的运行环境l 工作流引擎可运行在windows、linux、unix等操作系统之上。l 工作流建模工具(包括流程定义工具、人员组织角色管理工具和应用管理工具)运行在windows平台之上。l 工作流任务管理器和工作流监控器可运行在windows的ie、linux的netscape和mozilla浏览器之上。2. 产品支持的数据库jtangflow支持sql server、oracle、mysql等主流数据库产品。3. 系统支持的应用服务器jtangflow支持weblogic、jboss、jtang等应用服务器产品。2.6 系统性能jtangflow在如下系统环境中的性能输入如下表所示:【硬件环境】 普通pc机cpu: p4 2.4g;内存:ddr512m;【软件环境】 操作系统:window xp;数据库:sql server;用服务器:jtang应用服务器;【性能测试软件】loadrunner;测试内容并发用户数总响应时间(s)平均响应时间(ms)在无历史数据的前提下,启动流程实例,创建流程的起始活动实例并完成任务分发502346010048480200101505500255510在1000个流程实例的历史数据的前提下,启动流程实例,创建流程的起始活动实例并完成任务分发5023460100494902001035155002595182.7 系统特色jtangflow工作流管理系统具有如下几个特点:2.7.1 规范化和标准化jtangflow符合国际工作流联盟提出的工作流和工作流管理系统模型,以及标准的5个应用程序编程接口wapis。2.7.2 完整的系统部件jtangflow提供了基本完整的工作流产品部件,各类图形化的工作流系统工具(包括流程建模工具,人员组织建模工具,应用管理工具等),以及标准的基于ejb开发的wapis应用接口,所有这些部件能方便用户快速有效的建立规范化的业务流程应用系统。2.7.3 灵活的流程定义jtangflow支持多种流程模式,如顺序、并发、选择、循环、多实例活动等等。定义不再单纯是定义阶段的事情,在流程运行阶段,同样可以动态的定义流程的信息,这样的定义使得用户在定义流程的时候更加动态化,完成更加丰富和复杂的业务流程。2.7.4 丰富的应用编程接口jtangflow的主要设计目标就是提供一个让用户进行二次开发的平台,以供系统开发者很好的将jtangflow集成或者嵌入到现有系统中。 由于实际情况的不同,开发者所要开发的应用系统不论是框架结构还是具体的功能方面都可能有各种不同的要求。工作流系统提供了丰富的编程接口,使得开发者可以用这些接口开发出符合实际要求的,不同的结构和用户界面的实用系统。2.7.5 方便的第三方组织数据的重用方案为了重用已有系统的人员组织数据,钱塘工作流管理平台提供了第三方人员的注册和管理,既保证了工作流应用系统方便的重用第三方组织数据,又避免了不必要的重复开发和管理。2.7.6 跨语言的工作流二次开发为了支持多种程序语言对工作流系统的访问和集成,方便工作流应用系统的二次开发,钱塘工作流管理平台在提供了java编程接口和dll编程接口,方便不同的编程用户开发适合自身特点和需求的工作流客户端工具,包括任务管理器、监视器。3. 基于jtangflow的接口开发工作流任务管理器3.1 工作流任务管理器功能框架工作流任务管理器的功能包括用户登陆、任务管理、流程控制、系统消息、个人设置等几个模块,下图是一个典型的工作流任务管理器的功能框架图。本章将介绍如何通过工作流接口实现基于web的工作流任务管理器。3.2 登录模块设计【名称】:登录处理【输入】:用户登录名logname和用户密码pwd【相关页面】:静态登录页面index.htm, 动态登录页面log.jsp, 其中log.jsp包括顶部的top.jsp,左侧的navi.jsp,右侧的allworkitem.jsp,【实现方法】:1) 通过org.jtang.flow.engine包中的globalapi.java类中的userlogin方法来验证登录的合法性2) 如果合法,用用户登录名logname来设置session的userid属性;3) 如果不合法,弹出对话框提示用户名或密码错误;【功能】:验证用户登录的合法性。【说明】:系统主界面要包括所有的功能选项。【例子】:/globalapi是一个globalapi ejb的远程接口string logname = new string(request.getparameter(logname).getbytes(iso8859-1);string pwd = (string)request.getparameter(pwd);boolean result = globalapi.userlogin(logname,pwd); if (result) session.setattribute(userid,logname);else/else:用户名或密码错误时,弹出对话框提示“错误用户名或密码”/如果合法:显示出任务管理器页面3.3 任务列表模块的开发(主要介绍allworkitem.jsp)【名称】:任务列表【输入】:点击navi.jsp页面中的任务浏览,或登录任务管理器及其他情况【相关页面】:在log.jsp页面中的右侧部分显示allworkitem.jsp页面;【实现方法】:1) 用session中的方法getattribute获得用户的userid;2) 用org.jtang.flow.engine.globalapi ejb的远程接口中的方法getallnewworkitems4user获得用户userid的所有新任务;3) 用org.jtang.flow.engine.globalapi ejb的远程接口中的方法getallexecutingworkitems4user获得用户userid的所有在办任务;4) 用org.jtang.flow.engine.globalapi ejb的远程接口中的方法getallprefinishedworkitems4user获得用户userid的动态设置任务;5) 用org.jtang.flow.engine.globalapi ejb的远程接口中的方法getallfinishedworkitems4user获得用户userid的所有结束任务;6) 用workitem的方法getworkitemid,getname,getprocinsid分别获得任务id,任务name,流程实例id;【功能】:显示各类任务,包括新任务,在办任务,动态设置任务,结束任务;【说明】:点击不同的任务进入显示不同的任务信息【例子】:/获得useridglobalapihome apihome = (globalapihome) portableremoteobject.narrow (obj, globalapihome.class);globalapi globalapi = apihome.create();string userid = (string)session.getattribute(userid);/获得新任务列表arraylist usertasks = globalapi.getallnewworkitems4user(userid,true,null);/获得在办任务列表usertasks = globalapi.getallexecutingworkitems4user(userid,true,null);/获得动态设置任务列表usertasks = globalapi.getallprefinishedworkitems4user(userid,true,null);/获得结束任务列表usertasks = globalapi.getallfinishedworkitems4user(userid,true,null);/获得任务列表中每个任务的id,name,procinsid workitem task=(workitem)usertasks.get(j); long workitemid = task.getworkitemid(); string workitemname = task.getname(); long procinsid = task.getprocinsid();3.4 任务执行模块的开发3.4.1 任务执行模块功能框架任务执行模块是任务管理器的核心模块,该模块的功能图如下,在该图中需要说明如下两点:i. 在读取到新任务后,流程可以有两个通路,一条是对新到任务进行转发,另一条是对新到任务进行处理。ii. 在新建任务过程中,需要判断新建的流程是否需要对任务数量、路由、期限或执行者进行设置,如果不需要设置,就可以跳过动态设置这一页;然后直接转入任务处理这一步,进行具体的应用。3.4.2 启动新流程的功能开发【名称】:新流程启动【输入】:先点击navi.jsp页面中的“新建任务”,右侧显示tasklb.jsp页面,点击页面列表中流程定义,获得流程定义processid,然后从tasklb.jsp输出processid到tasklist.jsp页面【位置】:可启动流程页面tasklb.jsp,流程启动页面tasklist.jsp【功能】:启动一个新流程【实现方法】: tasklib.jsp中) 用session的方法getattribute获得userid;) 用org.jtang.flow.engine.globalapi ejb的远程接口中的方法getallmanualstartprocs4user获得用户userid的所有人工启动的启动流程列表;) 用org.jtang.flow.engine.definition.process ejb的远程接口中的方法getid,getname来获得各个流程定义的processid和name;将参数传到页面tasklist.jsp; tasklist.jsp中) 用request的方法getparameter获得申请启动的流程的流程定义的processid;) 用session的方法getattribute获得申请启动流程的用户的userid; ) 用org.jtang.flow.engine.factory.jtangflowfactory ejb的远程接口中的方法createstartprocins,创建流程processid的实例;) 用org.jtang.flow.engine.factory.jtangflowfactory ejb的远程接口中的方法getprocins获得新创建的流程实例,然后用org.jtang.flow.engine.instance.processinstance ejb远程接口中的方法start来启动流程实例proinsid;) 用response的方法sendredirect将页面转到直接allworkitem.jsp;【例子】:tasklb.jsp中:string userid = (string)session.getattribute(userid);arraylist proclist = globalapi.getallmanualstartprocs4user(userid,true,null);org.jtang.flow.engine.definition.process process = null;string processid = ;string processname = ;for (int i=0;iproclist.size();i+) process = (org.jtang.flow.engine.definition.process)proclist.get(i);if(process != null) processid = process.getid();processname = process.getname();tasklist.jsp中:string processid = (string)request.getparameter(processid);string userid = (string)session.getattribute(userid);org.jtang.flow.engine.definition.process process= factory.getprocess(processid);long procinsid = factory.createstartprocins(processid,userid);factory.getprocins(procinsid).start();response.sendredirect(./allworkitem.jsp);3.4.3 执行任务的功能开发(主要介绍doworkitem.jsp)【名称】:任务执行(对新任务,在办任务,结束任务的操作)【输入】:点击allworkitem.jsp中新任务或在办任务或结束任务列表中的某一项,向doworkitem.jsp传入workitemid,procinsid和任务类型new或executing;【相关页面】:allworkitem.jsp,doworkitem.jsp;【功能】:对新建任务、在办任务、结束任务进行操作,关联到具体的应用;【方法】:allworkitem.jsp中) 请先参考3.4任务列表模块设计;) 当点击新任务或在办任务或结束任务列表中的任务名时,跳转到doworkitem.jsp页面; doworkitem.jsp中) 用request中的方法getparameter获得workitemid,procinsid,type(此处为new);) 用org.jtang.flow.engine.instance.workitem ejb的远程接口中的方法setexecutor来设置任务执行者,须更新数据库;) 用org.jtang.flow.engine.instance.workitem ejb的远程接口中的方法isdynamicvotesettask来判断是否是动态会签主持人设置任务;方法isdynamicvotecommittask()判断是否是动态会签主持人提交任务,若是,则先进行与会签有关的操作(此处先不涉及对会签具体如何操作);) 若不是会签,进行相关的应用;用org.jtang.flow.engine.instance.workitem ejb的远程接口中的方法getparentactins获得活动实例;用org.jtang.flow.engine.instance.activityinstance中的方法getactdef获得该活动的定义;org.jtang.flow.engine.definition.activity ejb的远程接口中的方法getapplication得到活动所绑定的应用(存放在数据库中);然后用org.jtang.flow.engine.definition.application.webapp中的方法getpath获得应用的路径;跳转到具体的应用的url; 【例子】:allworkitem.jsp中string href=;href = doworkitem.jsp?workitem_id= + workitemid + &proc_inst_id=+procinsid + &type=new;doworkitem.jsp中jtangflowfactory factory = factoryhome.create(); string workitemid = (string)request.getparameter(workitem_id);session.setattribute(workitem_id,workitemid);string procinsid = (string)request.getparameter(proc_inst_id);string type = (string)request.getparameter(type);string userid = (string)session.getattribute(userid);workitem workitem = factory.getworkitem(long.parselong(workitemid);if(type.equals(new) workitem.setexecutor(userid,true,null);/ 动态会签主持人设置任务if(workitem.isdynamicvotesettask() out.print(window.open(dynamic/voteset.jsp);/ 动态会签主持人提交任务else if(workitem.isdynamicvotecommittask() response.sendredirect(dynamic/votecommit.jsp); else actinstance actins = workitem.getparentactins();activity actdef = actins.getactdef();webapp app = (webapp)actdef.getapplication(); string tool = ; tool = app.getpath();if (!tool.equals() string appurl = tool;out.println(window.location = +appurl+);3.4.4 动态设置任务的功能开发【名称】:判断是否需要动态设置【输入】:点击allworkitem.jsp中的动态任务列表中任务名,跳转到completeworkitem1.jsp,向其传入workitemid【相关页面】: allworkitem.jsp,completeworkitem1.jsp,completeworkitem2.jsp;【功能】:判断任务是否需要动态设置;【实现方法】:completeworkitem1.jsp中) 用org.jtang.flow.engine.factory. jtangflowfactory ejb的远程接口中的方法getworkitem来得到org.jtang.flow.engine.instance中的workitem ejb的远程接口;) 用org.jtang.flow.engine.instance.workitem ejb的远程接口中的方法finish判断任务是否有结束,若未结束,跳转到completeworkitem2.jsp,进行动态设置;若已结束,不作处理,直接跳转回allworkitem.jsp;【例子】:completeworkitem1.jsp中:jtangflowfactory factory = factoryhome.create(); workitem workitem = factory.getworkitem(long.parselong(workitemid);int flag = workitem.finish(0);if(flag != 0 ) response.sendredirect(completeworkitem2.jsp?result= + flag); else response.sendredirect(allworkitem.jsp);【功能1】:动态设置路由;【输入】:completeworkitem1.jsp传入的参数” result”、session 中保存的”workitem_id”【相关页面】: allworkitem.jsp,completeworkitem1.jsp,completeworkitem2.jsp,savedynamicsetting.jsp;【说明】:动态设置下一步执行的活动【实现方法】:completeworkitem2.jsp中) 用org.jtang.flow.engine.factory.jtangflowfactory ejb的远程接口中的方法getworkitem来得到org.jtang.flow.engine.instance中的workitem ejb的远程接口;) 根据参数”result”的值判断是否需要动态设置路由;) 用org.jtang.flow.engine.instance.workitem ejb的远程接口中的方法getnextstartactlist得到能启动的后续活动列表;) 将用户选择传递到savedynamicsetting.jsp页面;) 在savedynamicsetting.jsp页面中,用org.jtang.flow.engine.instance.workitem ejb的远程接口中的方法dynamicsetnextstartact设置后续启动活动;【例子】:completeworkitem2.jsp中:/ 需要动态设置路由if(flag / 100 = 1 )arraylist nextactlist = workitem.getnextstartactlist();int i = 0;while (i (nextactlist.size() string nextactid = (activity)nextactlist.get(i).getactid();string nextactname = (activity)nextactlist.get(i).getactname();input type=radio name=nextact value= savedynamicsetting.jsp中:/ 处理动态设置路由信息if(flag / 100 = 1) string nextstartactid = (string)request.getparameter(nextact);if(nextstartactid != null & !nextstartactid.equals() workitem.dynamicsetnextstartact(nextstartactid);flag = flag%100;【功能2】:动态设置执行者;【输入】:completeworkitem1.jsp传入的参数” result”、session 中保存的”workitem_id”【相关页面】: allworkitem.jsp,completeworkitem1.jsp,completeworkitem2.jsp,savedynamicsetting.jsp;【说明】:动态设置后续活动的执行者【实现方法】:completeworkitem2.jsp中) 用org.jtang.flow.engine.factory.jtangflowfactory ejb的远程接口中的方法getworkitem来得到org.jtang.flow.engine.instance中的workitem ejb的远程接口;) 根据参数”result”的值判断是否需要动态设置执行者;) 用org.jtang.flow.engine.instance.workitem ejb的远程接口中的方法getdynamicsetexecutorinfolist得到动态执行者信息;) 用户选择执行者,并将用户选择传递到savedynamicsetting.jsp页面;) 在savedynamicsetting.jsp页面中,用org.jtang.flow.engine.instance.workitem ejb的远程接口中的方法dynamicsetexecutor设置后续启动活动;【例子】:completeworkitem2.jsp中:arraylist dynamicsetexecutorinfolist = workitem.getdynamicsetexecutorinfolist();savedynamicsetting.jsp中:/ 处理动态设置执行者信息if(flag = 1) string temp = (string)request.getparameter(totalindex);if(!temp.equals(0) string actids = request.getparametervalues(actid);string executors = request.getparametervalues(executor);string executortypes = request.getparametervalues(executortype);int totalindex = integer.valueof(temp).intvalue();temp = (string)request.getparameter(groupid);int groupid = integer.valueof(temp).intvalue();string batchindexset = (string)request.getparameter(batchindexset);for(int i = 0 ; i totalindex ; i+ ) int executortype = 0;if (executortypesi.equals(mem)executortype = 1;else if (executortypesi.equals(role)executortype = 2;else if (executortypesi.equals(organization)executortype = 3;if(executorsi != null & !executorsi.equals() workitem.dynamicsetexecutor(actidsi,groupid,batchindexset,executortype,executorsi,true,null);【功能3】:动态设置期限(未做);【功能4】:动态设置任务数量(未做);3.4.5 任务转发的功能开发名称:任务转发输入:点击allworkitem.jsp新任务或在办任务列表中的“转发”按钮,跳转到transmittask.jsp页面,再点击transmittask.jsp中的“设置”按钮,跳转到dynamic/setexecutor.jsp页面,点击transmittask.jsp中的“确定”按钮,调用finishtransition.jsp,然后跳转回allworkitem.jsp页面。相关页面:allworkitem.jsp,transmittask.jsp,finishtransition.jsp。功能: 完成任务的转发工作。实现方法:transmittask.jsp中:) 用transmittask.jsp中定义的方法setexecutor()来打开dynamic/setexecutor.jsp页面,进行转发对象的选取;) 用request的方法getparameter得到workitemid;) 用session的方法setattribute设置属性workitem_id的值为workitemid;) 点击“设置”按钮后跳转到转发对象选择的页面,选择其中一个执行者后(点击“set”按钮),回到transmittask.jsp页面。finishtransition.jsp中:) 用session的方法getattribute得到workitemid,userid;) 用request的方法getparameter得到targerentityid,entitytype,通过对entitytype的判断,得到targetentitytype;) 用org.jtang.flow.engine.factory. jtangflowfactory ejb的远程接口中的方法getworkitem来得到org.jtang.flow.engine.instance中的workitem ejb的远程接口;) 用org.jtang.flow.engine.instance.workitem ejb的远程接中的方法tasktransmit将任务从userid转发给用户targerentityid;) 用response的方法sendredirect跳转加allworkitem.jsp页面。例子:transmittask.jsp中:function setexecutor(rowindex)window.open(dynamic/setexecutor.jsp?index= + rowindex);string workitemid = (string)request.getparameter(workitemid);session.setattribute(workitem_id,workitemid);finishtransition.jsp中:string workitemid = (string)session.getattribute(wor

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论