如何计算流程的耗时

平台默认的在SA_Task中有创建时间sCreateTime和结束时间sActualFinishTime,计算耗时时可以获取这个两个字段的值计算时间差 流程的耗时分环节的耗时和整个流程实例的耗时 计算环节已完成任务的耗时可以通过sKindID为tkTask过滤数据 计算整个流程实例的耗时可以通过sKindID为tkProcessInstance过滤数据 如下通过sData1的值获取已完成的流程实例的创建时间sCreateTime和结束时间sActualFinishTime: select t.sCreateTime,t.sActualFinishTime from SA_Task t where t.sData1='64911E08597F402DB40F2D627AF977BC' and t.sStatusID='tesFinished';

流程环节设置顺序执行时如何按顺序给相关的人发通知

流程顺序的执行规则中可以设置多个人按照顺序的默认是执行即从环节1流转到环节2,选择了A、B、C三个人 默认3个人默认的待办任务生成顺序是先生成A的,A流转后生成B的,B流转后再生成C的 但是在环节1设置通知规则,在流转时给A、B、C三个人发通知时,默认3个人是同时收到任务的,如果需要收到通知的顺序跟收到任务的顺序一样,就不能通过设置通知规则实现 需要在环节1的onAfterAdvance事件中给A手动发通知,在环节2的onAfterAdvance事件中通过判断给B或C发通知,具体实现如下: public static void businessActivity1AfterAdvance() { ProcessControl flowControl = (ProcessControl) ContextHelper.getActionContext().getParameter("control"); for (ProcessControlItem to : flowControl.getFlowTos()) { OrgUnit ect = to.getExecutors().get(0);//获取顺序执行选择的执行者中的第一个人 String executorFid = ect.getFID(); String executorFname = ect.getFName(); String sData1 [...]

多个环节and合并时如何判断是and的最后一个环节

多个环节and合并时有些操作是需要最后一个环节流转时才执行,可以在onAfterAdvaneQuery或者onAfterAdvance中判断是否是and的最后一个环节 本案例中是在首页的.w中process组件事件和process文件中的全局的事件中判断的,当然也可以在and合并的几个环节的.w中process组件的事件或process文件中and合并的几个环节上的事件中判断,只是需要写多次比较麻烦 流程图下:活动环节5和活动环节6通过and合并(多个环节直接输出都一个环节默认就是and,也可以在活动环节7上面加一个and) .w中process组件的事件中处理如下: Model.prototype.processAfterAdvanceQuery = function(event){ var context = this.getContext(); var activity = context.getActivity();//如果按照activitylabel判断可以用context.getActivityLabel(); if(activity == "businessActivity6" || activity == "businessActivity5"){ var processControl = event.processControl;//获取ProcessControl var flowTos = processControl.getToItems(); if(flowTos.length>0){////判断是否有flowTos alert("onAfterAdvanceQuery事件中and前的最后一个环节"); } } [...]

多人顺序或者同时处理时如何判断是最后一个人处理

同一个环节在多人顺序或者同时处理时有些操作是需要最后一个人处理时才执行的,那么就需要判断一下是否最后一个人处理 可以在onAfterAdvaneQuery或者onAfterAdvance中做判断 前端可以在process组件的事件中处理如下: Model.prototype.processAfterAdvance = function(event){ var processControl = event.processControl; var flowTos = processControl.getToItems(); if(flowTos.length>0){//判断是最后一个人处理 alert("onAfterAdvance最后一个人处理"); } }; Model.prototype.processAfterAdvanceQuery = function(event){ var processControl = event.processControl; var flowTos = processControl.getToItems(); if(flowTos.length>0){//判断是最后一个人处理 alert("AfterAdvanceQuery最后一个人处理"); } }; [...]

如何用代码控制流转跳转到指定环节

在某些情况下可能需要判断不同的数据跳转到不同的环节可以用条件环节或者条件分支 如果条件环节或者条件分支都不满足需求可以在onAfterAdvanceQuery事件中通过修改ProcessControl控制flowTo实现 如下是在活动环节2的onAfterAdvanceQuery事件中通过修改ProcessControl直接跳转到环节环节4 public static void businessActivity2AfterAdvanceQuery() { ProcessControl control = (ProcessControl) ContextHelper.getActionContext().getActionResult(); // 删除原来的后续环节 if (control.hasFlowTo()) { control.clearFlowTo(); } // 把businessActivity4创建为ProcessControl的可运行环节 String activityId = CommonUtils.createGUID(); RunnableActivity rn = new RunnableActivity("businessActivity4", "true", "true", "活动环节4", [...]

app中流转对话框选择执行者第一次不显示数据

手机app中做流程流转时选择执行者对话框第一次打开可能没有数据要点一下加载才会有数据,第二次加载就正常了 这个现象的可能是组织机构中的数据太多导致的,可以先提前把数据加载好,选择执行者的时候直接用加载好的数据就可以避免这种现象 提前加载数据如下操作: 在/UI2/portal/mobile/main/main.w的model的onload事件中添加下面的调用 OrgUtil.getOrgData(this,"", "", "", ""); 注意调用前要先在/UI2/portal/mobile/main/main.js中添加添加js文件的引用,如下: var Org = require("$UI/system/components/justep/org/js/org"); var OrgUtil = Org.Util;

如何判断是从待办或者提交任务中打开的功能

平台默认的从待办或提交任务中打开的功能url中会有一个_pagePattern参数 从待办任务中打开的功能_pagePattern=write 从提交任务中打开的功能_pagePattern=readonly 因此判断是从待办或提交任务中打开的功能可以通过获取url中这个参数的值去判断 在上下文context中提供的有API获取url中的参数 如下: this.getContext().getRequestParameter("_pagePattern");

如何隐藏流转对话框的标题

windowDialog组件提供了showTitle属性控制是否显示标题 流转对话框就是用windowDialog打开的,所以可以用showTitle属性控制 设置某个功能的流转对话框隐藏标题,可以在功能对应的.w的process组件的onBeforeOpenDialog事件中控制 如下: setTimeout(function(){event.source._processDialog.set({showTitle: false})},1); 如果是所有的流程功能都控制可以在/UI2/system/service/process/dialog/processDialog.w的model的onParamsReceive事件中控制 如下: this.owner.set({showTitle:false}); 如果按照这个方案推荐用扩展空间修改,而且这个方式标题会先显示然后隐藏

流程启动时怎么把业务数据存到sData2中

流程启动时把业务数据存到sData2中可以在前端process组件的onBeforeStart事件中设置或者在后端process文件的onBeforeStart事件中设置 前端设置如下: 在process组件onBeforeStart事件中event参数的结果如下 因此可以在onBeforeStart事件中如下设置sData2的值 event.relations["sData2"] = "aaa"; 后端设置如下: public static void flowTestProcessBeforeStart() { Map<String, Object> relations = (Map<String, Object>) ContextHelper.getActionContext().getParameter("attributes");//获取启动action中的map参数attributes relations.put("sData2", "bbbb");//通过map参数给sData2赋值 }

流转前获取当前环节的上一个活动环节

在process文件的onBeforeAdvanceQuery(流转查询前)和onBeforeAdvance(流转前)事件中都可以获取到当前环节的上一个活动环节,具体实现如下: List<ActivityInstance> activityInstances = ProcessUtils.getAI().getPrevAIs2();//获取流程上下文中的当前环节的直接前续环节实例,不包括环节不存在的环节实例 for (ActivityInstance activityInstance : activityInstances) { Activity activity = activityInstance.getActivity();//获取环节对象 if ((activity !=null) && activity.isManual()){ //判断当前环节是否是手动环节 String activityID = activity.getName();//获取activity标识 String activityName = activity.getLabel(ContextHelper.getOperator().getLanguage());//获取activity的label } }