关键词:移动端,传阅,消息
一、需求
在工作流审批时,将任务传阅给其他人。需要有一个列表来展示当前用户接受到的全部的传阅消息。
点击单据列表,要跳转到具体的单据的移动审批查看。
二、思路与方案
消息的数据实体是“消息模型”基础资料,标识是wf_msg_message,如果二开的移动端单据列表,可以采用移动端单据布局,或者扩展wf_msg_message。
在展示消息时,我们需要对消息进行过滤,只展示当前用户的消息。可以使用消息接收者,标识是wf_msg_receiver。取到当前用户的消息id,作为过滤。
移动端有一个展示传阅内容或者消息的界面:移动审批查看页面,标识是wf_approvalmobileview_bac。移动审批查看页面要展示单据传阅内容还需要传递一些参数,这些参数可以从消息模型中获取。
可以做一个单据列表的点击监听事件,取消原有的点击逻辑,然后跳转到移动审批查看页面。
三、实现过程
1.创建移动端 单据布局
选择空白布局
实体选择“消息类型”
2.设计移动布局的单据列表
以下截图是我简单地配置了消息的一些字段展示在移动列表上,各位开发者可以根据你们自己的产品需求,设计想要的列表展示方式。
往拖入字段
配置过滤项
3.开发插件代码,展示当前用户的消息
继承AbstractMobListPlugin,写一个移动列表插件,在setFilter事件中,设置列表的过滤条件。
传阅消息的config字段里面包含了processInstanceId和businessKey的必要的参数,并且某些字段不能是空,这里要做一个过滤。
如“思路与方案”中所述,wf_msg_receiver是消息接收者的标识,用UserServiceHelper获取当前用户id,在wf_msg_receiver中查询出当前用户接收到的消息id,将这些消息id放入QFilter作为查询条件。
代码如下:
@Override public void setFilter(SetFilterEvent e) { super.setFilter(e); e.addCustomQFilter(new QFilter("config", QCP.like,"%processDefinitionId%")); e.addCustomQFilter(new QFilter("entitynumber", QCP.not_like, "")); e.addCustomQFilter(new QFilter("content", QCP.not_like, "")); e.addCustomQFilter(new QFilter("contenturl", QCP.not_like, "")); e.addCustomQFilter(new QFilter("mobcontenturl", QCP.not_like, "")); e.addCustomQFilter(new QFilter("bizdataid", QCP.not_like, "")); // 获取当前用户的消息 DataSet dataSet = QueryServiceHelper.queryDataSet(getClass().getName(), "wf_msg_receiver", "messageid", new QFilter("receiverid", QCP.equals, UserServiceHelper.getCurrentUserId()).toArray(), "messageid"); Iterator<Row> iterator = dataSet.iterator(); List list = new ArrayList(); while (iterator.hasNext()) { Row row = iterator.next(); list.add(row.get("messageid")); } e.addCustomQFilter(new QFilter("id", QCP.in, list)); }
4.重写listRowClick列表点击事件
AbstractMobListPlugin本身已经注册了列表点击事件,我们直接重写listRowClick方法即可。
调用ListRowClickEvent的setCancel方法把原有的跳转逻辑取消。
BusinessDataServiceHelper查询当前数据实体,然后解析json。
给MobileFormShowParameter设置一些自定义参数,跳转。
以下代码,JSON解析我用了fastjson框架,苍穹的jar包里面自带了fastjson。开发者可选其他json框架。
@Override public void listRowClick(ListRowClickEvent evt) { super.listRowClick(evt); evt.setCancel(true); ListSelectedRow row = evt.getCurrentListSelectedRow(); DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(row.getPrimaryKeyValue(), "wf_msg_message"); String json = dynamicObject.getString("config"); JSONObject jObject = JSON.parseObject(json); jObject = JSON.parseObject(jObject.get("messageContext").toString()); MobileFormShowParameter mobileFormShowParameter = new MobileFormShowParameter(); mobileFormShowParameter.setCustomParam("type", "dynApply"); mobileFormShowParameter.setCustomParam("processInstanceId", jObject.get("processInstanceId")); mobileFormShowParameter.setCustomParam("businessKey", jObject.get("businessKey")); mobileFormShowParameter.getOpenStyle().setShowType(ShowType.Floating); mobileFormShowParameter.setFormId("wf_approvalmobileview_bac"); getView().showForm(mobileFormShowParameter); }
5.注册插件
四、效果图
点击进入详情:
五、开发环境版本
不限
六、参考资料
msg_circulate.zip(9.46KB)
推荐阅读