在Action的执行前后事件中获得Action参数及Action返回值

1、在Action的执行前后事件中获得调用Action的所有参数 调用ContextHelper.getActionContext().getParameter("参数名");方法,获得Action的某个参数的值 例如 Table table = (Table)ContextHelper.getActionContext().getParameter("table"); String ip  = (String)ContextHelper.getActionContext().getParameter("ip"); 2、在Action的执行后事件中获得Action的返回值 调用ContextHelper.getActionContext().getActionResult();方法,获得Action的返回值。  ContextHelper.getActionContext().getActionResult(); 本文由WeX5君整理,WeX5一款开源免费的html5开发工具,H5 App开发就用WeX5! 阅读其他app 开发相关文章:http://doc.wex5.com/?p=3443

在queryAction中设置计算合计值AggregateValue

在分页显示数据的时候,只能看到当前页的记录,在界面上只能计算出当前页数据的合计。如果希望显示全部数据的合计,可以在queryAction中设置aggregate参数,在界面上就可以调用data组件的getAggregateValue方法获得全部数据的合计。 1、在queryAction中设置aggregate参数 说明:sum(ER_CGSQMXB.fSL) as totalQuantity表示计算fSL列的合计,并起名为totalQuantity,用于访问这个合计值 可以计算多个合计值,中间用逗号分隔,例如sum(ER_CGSQMXB.fSL) as total1,sum(ER_CGSQMXB.fMoney) as total2计算合计使用sum,计算平均值使用avg,计算记录数使用count 2、调用data组件的getAggregateValue方法 mainActivity.dataDetailAfterRefresh = function(event){</li>   $("#sumValue").html(justep.xbl("dataDetail").getAggregateValue("totalQuantity")); }; 说明:在data组件的onAfterRefresh事件中,通过调用data组件的getAggregateValue方法,并传入合计值的别名,即可获得合计值 这个值是从数据库中计算出来的值,如果在界面上修改了相关的字段里面的值,需要写代码维护界面上的这个合计值。可以在data组件的onValueChanged事件中通过event.originalValue获得原值,event.value获得新值来维护合计值。 本文由WeX5君整理,WeX5一款开源免费的html5开发工具,H5 App开发就用WeX5! 阅读其他app 开发相关文章:http://doc.wex5.com/?p=3443

代码如何获取模型资源中的文件

无论是BIZ模型还是UI模型中,在java代码中获取模型中的文件时,建议通过平台提供的FileSystem来实现,不建议直接使用自己拼装路径的方式实现。 具体方法如下: FileSystem fileSystem = FileSystemWrapper.instance(); String real = fileSystem.getRealPath("/SA/task/customFile.xml"); File file = new File(real); 其中getRealPath方法接收的参数就是资源文件的路径,以"/"开头, "/"表示BIZ目录。 本文由WeX5君整理,WeX5一款开源免费的html5开发工具,H5 App开发就用WeX5! 阅读其他app 开发相关文章:http://doc.wex5.com/?p=3443

流转给界面上指定的人

流转给一个人 用 relationValue 取到人员的id,再用 findPersonMembersByID 方法根据人的ID获取人员成员 流转给多个人 需要自己定义一个函数,将多个人的ID转成一个ID List,再调用 findPersonMembersByIDListfindPersonMembersByIDList(list(list('组织ID', '人ID'), list('组织ID', '人ID')))其中组织ID可以为空,人ID可以到SA_OPPerson中查找sID的值。具体步骤如下 1、自定义一个函数返回执行者的list &lt;fn name="dyExcutorFn" category="自定义" code-model="/demo/misc/logic/code" code="Zx.dyExecutor" type="List&lt;List&lt;String&gt;&gt;"&gt; &lt;label language="zh_CN"&gt;自定义执行者&lt;/label&gt; &lt;/fn&gt; public static List&lt;List&lt;String&gt;&gt; dyExecutor() { List&lt;List&lt;String&gt;&gt; list1=new ArrayList&lt;List&lt;String&gt;&gt;(); List&lt;String&gt; list2=new ArrayList&lt;String&gt;(); [...]

Data组件基础05:再谈Data组件新增,查询,保存

前面我们介绍了Data的数据新增,查询,保存;接下来我们来看看怎么进行新增,查询,保存逻辑的扩展; Data上有onCustomNew、onCustomRefresh、onCustomSave事件,这几个事件就是给开发者用于实现data的新增、查询、保存逻辑的;看到这大家可能会产生疑问:“为什么需要这几个事件,加载数据不是可以使用loadData吗?保存也可以自己发ajax请求啊?” 有这些疑问很正常,开发者确实可以不需要这些事件来实现data的新增、查询、保存逻辑,但是我们还是推荐使用onCustomNew、onCustomRefresh、onCustomSave事件重新实现; 原因是因为Data组件作为前端UI中的数据核心组件,很多组件都需要感知data的数据状态,同时Data组件内部也维护着自己的状态;当跳出data现有机制和接口很有可能其他关联的组件就失去了与之关联感知的能力,同时data自身提供的新增、查询、保存操作也无法使用开发者扩展的逻辑。例如:如果加载数据开发者自己使用loadData加载,最简单的mobile中scrollView组件上拉加载数据能力就无法感知扩展的逻辑。 下面通过一个具体的案例来讲解onCustomNew、onCustomRefresh、onCustomSave事件扩展新增、查询、保存逻辑 首先我们新建一个.w,在.w中放入data组件(注意:不是BizData组件),定义列FID、fString、fInteger、fFloat, 增加data的onCustomRefresh,由于接管了onCustomRefresh事件,autoLoad=true自动会使用新的逻辑加载数据 代码如下: //数据刷新接管实现 Model.prototype.masterDataCustomRefresh = function(event){ /* event包含 { "source" : 组件的js对象, "cancel" : 可修改,设置为true后中断当前刷新动作, "limit" : 页大小, "offset" : 偏移, "options" : 刷新给入的参数 } */ //这里简单演示从datas.json文件中取数据,还可以传递limit、offset实现分页的逻辑 var [...]

By |6月 2nd, 2015|未分类|Data组件基础05:再谈Data组件新增,查询,保存已关闭评论

在流程中发邮件

发的邮件是文本格式,只有标题  实现通知功能 本例子是在请假申请环节流转后向总经理发邮件 如图: 1. 用附件中的mail.jar替换runtime\BusinessServer\WEB-INF\lib里面的mail.jar 2. 将附件中的MailSenderInfo.java MyAuthenticator.java SimpleMailSender.java三个文件(发邮件用)复制到流程目录下的dsrc目录下 3. 在请假申请环节的onAfterAdvance事件中获取信息发邮件  代码如下: import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.justep.system.opm.api.Person; import com.justep.system.process.*; import com.justep.system.opm.api.PersonHelper; public class EmailProcess { public static void businessActivity1AfterAdvance() { [...]

用代码控制流程

可以在js和java中写代码控制流程的启动、流转、回退、终止、结束 启动流程Java 需要引入 import com.justep.system.process.ProcessControl; import com.justep.system.process.ProcessUtils; 方法一介绍 Document startProcess (String processFullName, String name, String sData1, String executor) 返回的Document内容如下 &lt;items&gt; &lt;item&gt; &lt;process&gt;/x5demo/rich/process/applyGoods/applyGoodsProcess&lt;/process&gt; &lt;activity&gt;applyActivity&lt;/activity&gt; &lt;task&gt;EC9BF028AAC64BDCA0809AC2689AA5B4&lt;/task&gt; &lt;/item&gt; &lt;/items&gt; 示例——传入任务标题、业务主键、执行者,启动流程后可以得到task String sData1 [...]

列表流程

由流程向导生成的功能是一打开功能,就显示一个流程的信息,有时候需要一打开功能,就显示多个流程的信息,例如下面的界面 在这个功能中,可以新建一个流程、启动流程、流转、回退,也可以多选后,进行批量操作,例如:批量启动流程,批量流转流程还通过定义了公共事件,在启动和流转之后,将该流程的处理环节和处理人回写到业务数据中,这个例子是在综合案例里面的订单流程基础上扩展的,在/UI/demo/misc/process/order目录下新建listActivity.w文件 启动流程 在listActivity.w文件中放一个process组件,调用这个组件的start方法,启动流程 不需要设置process组件的data属性,auto-start、auto-close、auto-filter、auto-save都设置为false代码如下,第3个参数传列表data的行ID justep.xbl("process1").start( null, null, justep.xbl("listData").getID(), null); 因为已经启动了的流程不能再次启动,所以,为避免重复启动,应添加适当的判断代码 新建流程 在listActivity.w文件中,放一个windowRunner组件,调用它的open方法,打开订单流程的启动界面,代码如下 justep.xbl("detailRunner").open(null,"/demo/misc/process/order/mainActivity.w","订单"); 这样就实现了在列表流程中新建一个流程,至于在保存时是否需要启动流程,就通过设置/UI/demo/misc/process/order/mainActivity.w里面的process组件(flwcOrder)的属性auto-start来控制,设置为true,则保存后启动流程,设置为false,则不启动流程 处理流程 处理流程就是对流程进行流转、回退等操作,方法是点击处理流程按钮时,调用windowRunner组件的open方法打开流程当前环节对应的w文件,在界面上进行流转、回退等操作。 例如:流程的当前环节如果是订单申请(orderReportActivity),就打开/UI/demo/misc/process/order/orderReportActivity.w文件 流程的当前环节如果是部门经理审核(deptActivity),就打开/UI/demo/misc/process/order/deptActivity.w那么,如何获得流程的当前环节等信息呢这就需要,访问sa_task表,在listActivity.w中放一个bizdata组件(dataTask),概念concept属性设置为sa_task,设置过滤条件为 (SA_Task.sKindID='tkTask' or SA_Task.sKindID='tkExecutor' or SA_Task.sKindID IS NULL) and (SA_Task.sStatusID='tesReady' or SA_Task.sStatusID='tesExecuting') and (SA_Task.sTypeID IS NULL [...]

获取下一个环节的执行者

流程流转后的事件中获取: public static void bizActivity1AfterAdvance() { ProcessControl flowControl = (ProcessControl)ContextHelper.getActionContext().getParameter("control"); for (ProcessControlItem to : flowControl.getFlowTos()) {  for (OrgUnit ect : to.getExecutors()) {       System.out.println("=========fid---&gt;"+ect.getFID());   System.out.println("=========fname---&gt;"+ect.getFName());      }     } } [...]

流程高级特性之: 批启动批流转

一. 流程的批启动 使用场景:针对某个data中的数据,为每一条记录启动一个流程实例。 接口协议:输入data中多个记录的id,启动多个流程实例;返回这些流程实例的第一个环节的待办任务(注意:要求每个流程实例有且只有一条待办任务,后续才能执行批流转); 实现方式:有两种方式 1. 使用process组件来启动多个流程实例 1.0 设置process组件的属性: auto-close=true; auto-start=false; auto-save=true; auto-filter=false; 1.1 声明一个全局变量,用来存储流程启动后的待办任务 var tasks = []; //用于存在流程启动后关系的待办,将会在process的start commit事件中赋值 1.2 遍历data中的数据,分别启动流程 function batchStartProcess(dataID, processID){ var data = justep.xbl(dataID); if (data.getCount()&lt;1){ alert("当前业务数据为空!"); return; [...]