- 时序图
- 前端
- pages.json
- 发布pages.json
- 方式一:自动发布pages.json
- 方式二:手动发布pages.json
- 操作步骤
- 登录pai
- 进入工程的根目录
- 查看部署帮助
- 发布微应用
- 页面管理
- 通过页面管理添加微应用
- 操作步骤
- 点击页面信息右侧加号
- 完善信息
- 微应用管理
- 记录唯一标识
- 根据策略获取信息
- webPolicy
- appPolicy
- 不同的页面对应的策略
- 根据业务标识区分消息内容类型
- 示例
- 后端
- 发送消息/配置全文检索
- 参数说明
- app
- pc
- 选择策略
- 示例
- 内部用户消息体配置
- 全文检索的配置
- 配置页面id(微应用唯一标识)
- APP端
- PC端
- 示例
- 内部用户消息体配置
- 全文检索的配置
- 配置业务标识/参数
- 示例
- 在详情页面中,详情可能还会区分不同的类型
- 完整的全文检索配置示例
- 小程序
- 获取参数实例
时序图
前端
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}`
});
}
}
}