时序图

前端

pages.json

pages.json 主要用于定义PC端和APP端涉及到页面跳转的微应用。

下面是pages.json的结构:

{
  "pages": [
    {
      "path": "",
      "paiName": "",
      "paiType": "",
      "paiDesc": "",
      "paiUserGroup": ""
    }
  ]
}
字段名称 字段类型 字段说明
path String 对应微应用的入口
paiName String 微应用名称
paiType String 微应用类型(WEB、APP、H5)
paiDesc String 微应用简介
paiUserGroup String 微应用使用身份(P: 园区方、B: 企业方、C: 公众方)

发布pages.json

方式一:自动发布pages.json

部署前端和小程序工程时,会自动发布微应用。

方式二:手动发布pages.json

操作步骤
登录pai
C:\Users\Acer>pai login
进入工程的根目录
C:\Users\Acer> e:

E:\>cd pai-rytest-ui
查看部署帮助
C:\Users\Acer>pai deploy -h

可以看到发布应用的说明

发布微应用
E:\pai-rytest-ui>pai deploy microapp

页面管理

发布后的pages.json文件会加载到开发者后台的页面管理中

入口:开发者后台 > 应用套件 > 页面管理

对于小程序工程而言,页面管理要有数据显示,前提是小程序工程已经上传发布了。

通过页面管理添加微应用

操作步骤

点击页面信息右侧加号

完善信息

微应用管理

点击保存后,选择微应用管理,可以看到通过页面管理建好的微应用。

记录唯一标识

将微应用的唯一标识给予后端负责发送消息或配置全文检索的开发人员。

注意:唯一标识更改之前,需要先与后端人员协商,再共同决定是否修改。

根据策略获取信息

注意:这里的策略,需要与后端沟通后确定。

webPolicy

字段值为空则采用默认的方式传递

策略 策略名称 作用
callback 回调模式 消息id或者全文检索id通过微应用入口地址传递,微应用开发者需要根据id回调接口
param 参数模式(默认) 微应用入口地址后面会拼上消息或全文检索的信息
session 会话模式 将消息和全文检索的业务信息/参数存储到sessionStorage,key值: messageParam-消息ID(消息ID会在微应用入口地址上)

appPolicy

字段值为空则采用默认的方式传递

策略 策略名称 作用
callback 回调模式 消息id或者全文检索id通过url地址传递,微应用开发者需要根据id回调接口
param 参数模式(默认) 默认传全部参数

不同的页面对应的策略

类型 全文检索 消息
H5 callback,param callback,param
APP callback,param callback,param
WEB(同域名) callback,param,session callback,param,session
WEB(非同域名) callback,param callback,param

根据业务标识区分消息内容类型

注意:这里的业务标识,需要与后端沟通后确定。

业务不同,消息内容对应的类型可能也会有所不同。比如说流程,它可能会有待办、已办、关注、我的等类型,如果需要区分这些消息,我们可以通过与后端沟通好的业务标识来区分。

假设与后端沟通好的业务标识叫actionCode(全文检索中一定是这个名称),那么就可以根据actionCode的值来区分不同的类型。

示例

  • 待办消息对应actionCode的值为 XXX_todo
  • 已办消息对应actionCode的值为 XXX_done
  • 关注消息对应actionCode的值为 XXX_focus
  • 我的消息对应actionCode的值为 XXX_my

后端

发送消息/配置全文检索

参数说明

参数名称 参数描述 数据类型 是否必填 默认值
webPolicy/appPolicy 策略 string param
content 自定义内容 (支持json格式) string -
tableld 详情id,建议放在这(可放在content或者actionCode中) string -
actionCode 自定义业务标识 (支持json格式) string -
pageAppId / pageWebId 页面id string -
title 标题 string -

app

        InnerUserBody innerUser = InnerUserBody.builder()
                .pageAppId("test")
                .param("tableId","业务详情id")
                .param("content","{\"id\":\"业务id\",\"name\":\"业务名称\"}")
                .param("actionCode","todo")
                .param("title","测试")
                .build();

pc

        InnerUserBody innerUser = InnerUserBody.builder()
                .pageWebId("test")
                .param("tableId","业务详情id")
                .param("content","{\"id\":\"业务id\",\"name\":\"业务名称\"}")
                .param("actionCode","todo")
                .param("title","测试")
                .build();

选择策略

预算业务所需参数的多少,然后与前端沟通后再选择合适的消息/全文检索策略。
具体参数策略传递的信息,请看上面前端中的根据策略获取信息

对应的字段:

  • webPolicy(PC端)
  • appPolicy(APP端)

预算业务所需参数的多少,选择自己合适的消息/全文检索策略。

示例

策略的配置

param为默认模式,可不配置

内部用户消息体配置

方式1:

InnerUserBody innerUser = new InnerUserBody();
//设置消息跳转的页面id
map.put("appPolicy", "callback");
map.put("webPolicy", "callback");
innerUser.setParam(map);

方式2:

//设置消息跳转的页面id
InnerUserBody.builder()
             .param("appPolicy", "callback")
             .param("webPolicy", "callback")
             .build();
全文检索的配置
SELECT
    'callback' AS appPolicy,
    'callback' AS webPolicy,
   省略....
FROM
    xxxx

配置页面id(微应用唯一标识)

APP端

注意:在一条消息内,pageAppId和pageH5Id,两者不能同时都有值。

对应的字段(二选一):

  • pageAppId
  • pageH5Id

PC端

对应的字段

  • pageWebId

示例

内部用户消息体配置

方式1:

InnerUserBody innerUser = new InnerUserBody();
//设置消息跳转的页面id
map.put("pageAppId", properties.getPageAppId());
map.put("pageWebId", properties.getPageWebId());
innerUser.setParam(map);

方式2:

//设置消息跳转的页面id
InnerUserBody.builder()
             .pageAppId("pageAppId", properties.getPageAppId())
             .pageWebId("pageWebId", properties.getPageWebId())
             .build();
全文检索的配置
SELECT
    '1422102965371277313' AS pageAppId,
    '1422392615214256129' AS pageWebId,
   省略....
FROM
    xxxx

配置业务标识/参数

配置业务参数的之前,务必要先与前端沟通好,共同确定后再配置。

  • 如果需要在全文检索中自定义业务参数/标识,请使用字段actionCode (字段名称固定)

  • 消息中没有actionCode这个字段,如需要请自行在消息正文中定义业务参数/标识 (名称自定义)

示例

在详情页面中,详情可能还会区分不同的类型

比如说流程,它可能会有待办、已办、关注、我的等

我们可以通过定义actionCode字段来作为业务的标识,用于区分待办、已办、关注、我的等。

字段名称 字段类型 作用
actionCode String 业务标识

消息

消息一:
//FLOW_WAIT("xxx_todo","待办事项"),
map.put("actionCode", ActionCodeEnum.FLOW_WAIT.getCode());

消息二:
//FLOW_DONE("xxx_done","已办事项"),
map.put("actionCode", ActionCodeEnum.FLOW_DONE.getCode());

全文检索的配置

SELECT
   'xxx_done' AS actionCode,
   省略....
FROM
    xxxx

完整的全文检索配置示例

SELECT
    todo.ID_ AS tableId,
    todo.TITLE_ AS title,
    todo.CREATE_TIME_ AS publicTime,
    'callback' AS appPolicy,
    'callback' AS webPolicy,
    'xxx_done' AS actionCode,
    todo.UPDATE_TIME_ AS updateTime,
    todo.TENANT_ID_ AS comIds,
    todo.ASSIGNEE_ AS staffIds,
    CONCAT( '发起人: ', todo.SPONSOR_NAME_ ) AS content,
    CONCAT( '' ) AS url,
    '1422102965371277313' AS pageAppId,
    '1422392615214256129' AS pageWebId,
    '已办事项' AS buzType,
    '0' AS `status`,
    'AP_TODO' AS tableName 
FROM
    AP_TODO todo
    LEFT JOIN ACT_HI_PROCINST RES ON RES.PROC_INST_ID_ = todo.PROC_INST_ID_ 
WHERE
    ( todo.TASK_TYPE_ = 3 AND ( todo.HANDLE_STATE_ = 0 OR todo.HANDLE_STATE_ = 3 ) AND todo.UPDATE_TIME_ > : sql_last_value ) 
ORDER BY
    updateTime ASC

小程序

消息中的parma参数,会放到biz中进行传递,小程序需要解析biz拿到参数跳转详情

获取参数实例

onLoad(e) {
   this.isRedirect = this.$p.tool.redirect(this, e)
   if(e.biz){
    var obj = JSON.parse(e.biz);
    var actionCode = obj.actionCode;
    if(actionCode.indexOf('flow_details') != -1){
     uni.navigateTo({
      url: `/pages/approval/create/handle?processId=${obj.tableId}&formName=${obj.title}`
     });
    }
   }
  }
文档更新时间: 2023-07-17 11:40   作者:伍润源