主流程+子流程+自动环节批转案例

案例中实现主流程+子流程+自动环节批转等特性: 简单说明案例中包含:4个流程,主流程没有关联业务数据,其中每个环节都是一个子流程,进入环节自动启动子流程,主流程任务挂起,当子流程结束后唤醒主流程继续流程分别是: 主流程(master),这是一个流程框架,没有相关业务数据 子流程(c1) 子流程(c2) 子流程(c3) 1、主流程UI使用windowFrame控制子流程界面 2、子流程启动时创建主流程,小技巧使用sData2记录关联的子流程的sData1,具体看启动主流程代码(/BIZ/demo/components/logic/code/src/com/justep/demo/DemoUtils.java) public static void startMasterProcess(String masterProcess, String masterActivity) { ActionContext context = ActionUtils.getRequestContext().getActionContext(); Map<String, Object> relas = (Map<String, Object>) context.getParameter(ProcessConstants.PI_RELATION_VALUE_PARAMETER); //启动主流程 String sData1 = CommonUtils.createGUID(); String sData2 [...]

流程高级特性之:process组件上auto-save属性详解

在W文件中,process组件上有一个属性:auto-save,它的含义是: 1. auto-save=true,这时,必须设置process组件上的data属性,表示执行任何流程操作(流转查询,流转,回退查询,回退。。。)之前,先保存process组件关联的data; 2. auto-save=false,表示执行任何流程操作(流转查询,流转,回退查询,回退。。。)之前,不保存data; 需求一(大部分自动保存,个别不自动保存):如果期望在某一个流程操作(例如回退查询和回退)中不自动保存data,其它流程操作中自动保存data,可以这么实现:  1. 设置processs组件上的auto-save的值为true;  2. 在process组件(w页面中)的在onBeforeBackQuery事件之前,设置process组件的_autoSave为false,例如:data.source._autoSave = false; //或者    justep.xbl('process组件的id')._autoSave=false;  3. 在process组件(w页面中)的onBackCommit和onBackError事件中设置_autoSave为true, 例如: data.source._autoSave = true; //或者justep.xbl('process组件的id')._autoSave=true; 需求二(大部分不自动保存,个别自动保存):如果期望在某一个流程操作(例如流转查询和流转)中自动保存data,其它流程操作中不自动保存data,可以这么实现:  1. 设置processs组件上的auto-save的值为false;  2. 在process组件(w页面中)的在onBeforeAdvanceQuery事件之前,设置process组件的_autoSave为false,例如:data.source._autoSave = true; //或者justep.xbl('process组件的id')._autoSave=true;  3. 在process组件(w页面中)的onAdvanceCommit和onAdvanceError事件中设置_autoSave为false, 例如: data.source._autoSave = [...]

提交、待办显示内容修改

修改提交或待办显示记录数 提交和待办任务中平台默认显示的是8条记录,可以根据需求修改为所需的记录条数,需要修改/BIZ/SA/task/logic/code/dsrc/TaskViewProcedure.java中相关方法的KSQL语句中的limit的值,如下红色字体 提交 public static Document querySubmitTask(){                 String condition = TaskUtils.getCreatorCondition("t", ContextHelper.getPerson().getPersonMembers(), true);                 String query = "select t, t.sName, t.sCURL, t.sProcess, t.sActivity, [...]

代码控制ProcessControl做流转

<div id="code_unv"> <ol> <li>//1、首先获取某个任务后续的流转数据结构</li> <li>ProcessControl control = ProcessUtils.advanceProcessQuery(task);</li> <li>//2、获得后续可能流转的环节</li> <li>List&lt;ProcessControlItem&gt; flowTos = control.getFlowTos();</li> <li>for (int i = flowTos.size() - 1; i &gt;= 0 ; i--) {</li> <li>    ProcessControlItem flowTo = flowTos.get(i);</li> <li>    [...]

流程嵌套

当前流程流转时启动另一个流程并暂停当前流程,另一个流程结束后再唤醒当前流程 例子如下: 俩个流程:1.外出申请   2.借书申请     1.在外出申请环节的onAfterAdvance事件中添加如下代码: <div class="blockcode"> <div id="code_ZNW"> <ol> <li>                String fID=CommonUtils.createGUID();//生成fID</li> <li>                String task=(String)ContextHelper.getActionContext().getParameter("task");//获取当前流程(外出申请)的task</li> <li>                [...]

动态工作流的另一种实现方式

在动态工作流案例里,实现了表单和流程的分开设计、动态关联。在案例讲解的最后,我们提到多个表单共用多个工作流,必须解决动作引用的问题。即每个工作流都需要包含所有表单的动作,否则表单运行在工作流环境中时,会出现当前activity没有表单需要的动作的错误。 但是对于M个表单、N个工作流,这里的引用关系是很复杂的(M * N),我们在视频里给出了一个解决方案: 1、所有表单用到的动作都设置为全局动作 2、用一个公共的模块,包含所有表单的动作模块 3、每个工作流模块引用上面的公共模块,完成对所有表单动作的引用 上面的这个方案确实解决了动作引用的问题,但是这个方案在实施中还是有一定的复杂度。而且,所有的动作都是全局动作,每个工作流包含表单的所有动作,从模型设计的角度也有不合理性。 下面我们换用另一种解决方案(在原案例基础上): 1、动作不设置为全局动作,表单的process要包含自身的动作 /BIZ/demo/process/process/dynamicFlow_LeaveApply/dynamicFlow_LeaveApplyProcess.process.m 在动作设置中引用表单自身需要的三个标准动作 2、从两个工作流模块的配置文件中去除对action模块的引用 /BIZ/demo/process/process/dynamicFlow1/model.config.xml /BIZ/demo/process/process/dynamicFlow2/model.config.xml 去掉引用/demo/process/logic/action 3、上面两步已经去掉了工作流,这时如果运行案例,在第二个环节会出现动作不存在的错误,现在我们修改.w,来解决这个问题: var mainActivity = {}; // 设置bizData的动作上下文 mainActivity.setDataContext = function(data) { data.process = "/demo/process/process/dynamicFlow_LeaveApply/dynamicFlow_LeaveApplyProcess"; data.activity = "mainActivity"; }; mainActivity.model1ModelConstructDone [...]

实现表单和流程分开设计、动态关联

需求场景     1、表单和工作流可以任意关联           一个表单可以用不同的工作流进行审批           多个表单可以用相同的工作流进行审批           多个表单可以用不同的工作流进行审批    2、流程中每个环节的表单是相同的,但是不同的业务场景有不同的业务规则(只读、显示、必填) 技术点    1、流程和表单分离,动态关联    2、一个表单用于流程的所有环节(包括启动),可以按照不同的场景定义规则 视频下载:动态工作流 附:动态工作流的另一种实现方式 http://bbs.justep.com/forum.php?mod=viewthread&tid=44091&extra=page%3D1   本文由WeX5君整理,WeX5一款开源免费的html5开发工具,H5 App开发就用WeX5! [...]

流转相关事件的执行顺序

(1). process组件(onBeforeAdvanceQuery) (2). 流程定义(onBeforeAdvanceQuery) (3). 执行流转查询逻辑 (4). 流程定义(onAfterAdvanceQuery) (5). process组件(onAfterAdvanceQuery) (6). 弹出流转框,点确定后,执行 (7). process组件(onBeforeAdvance) (8). 流程定义(onBeforeAdvance) (9). 执行流转逻辑 (10). 流程定义(onAfterAdvance) (11). process组件(onAfterAdvance) 本文由WeX5君整理,WeX5一款开源免费的html5开发工具,H5 App开发就用WeX5! 阅读其他app 开发相关文章:http://doc.wex5.com/?p=3443

Data组件基础04:Tree、主从数据、更新模式

一、树型数据 下面介绍一下Data组件的树型数据特性 Data的数据是按行(Row)存储进行存储的,当然树型数据也是按行(Row)存储,只是针对树特点在Row上增加了rows存放子行 rows : [ { rows: [...], ... },... ] 1、Data组件树相关属性 isTree : boolean 树型数据标识 treeOption :Object 树型数据相关参数 包括属性: parentRelation: 父关系,形成父子树的父关系 rootFilter: 根过滤条件,当设置时树形数据将按节点加载数据 delayLoad: 延迟数据加载,默认值为true nodeKindRelation: 节点类型关系,data操作时使用指定relation自动记录是否叶子节点信息 2、Data组件树相关api Data.getTreeOption();--------获取树的定义信息,返回TreeOption TreeOption包括属性: isDelayLoad [...]