如何开发移动端传阅消息列表原创
金蝶云社区-吴锐雄
吴锐雄
0人赞赏了该文章 702次浏览 未经作者许可,禁止转载编辑于2023年03月15日 19:25:24

关键词:移动端,传阅,消息


一、需求

在工作流审批时,将任务传阅给其他人。需要有一个列表来展示当前用户接受到的全部的传阅消息。

点击单据列表,要跳转到具体的单据的移动审批查看


二、思路与方案

  • 消息的数据实体是“消息模型”基础资料,标识是wf_msg_message,如果二开的移动端单据列表,可以采用移动端单据布局,或者扩展wf_msg_message。

  • 在展示消息时,我们需要对消息进行过滤,只展示当前用户的消息。可以使用消息接收者,标识是wf_msg_receiver。取到当前用户的消息id,作为过滤。

  • 移动端有一个展示传阅内容或者消息的界面:移动审批查看页面,标识是wf_approvalmobileview_bac。移动审批查看页面要展示单据传阅内容还需要传递一些参数,这些参数可以从消息模型中获取。

  • 可以做一个单据列表的点击监听事件,取消原有的点击逻辑,然后跳转到移动审批查看页面。


三、实现过程

1.创建移动端 单据布局

image.png

image.png


选择空白布局

image.png


实体选择“消息类型

image.png

2.设计移动布局的单据列表

以下截图是我简单地配置了消息的一些字段展示在移动列表上,各位开发者可以根据你们自己的产品需求,设计想要的列表展示方式。

往拖入字段

image.png

配置过滤项

image.png


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.注册插件

image.png


四、效果图

image.png

点击进入详情:

image.png


五、开发环境版本

不限


六、参考资料

苍穹打开页面






赞 0