# 页面设计器三方业务拓展
背景:此前的一堆前、后事件,容易出现多个客开竞争冲突(同时使用流程前事件,前面的接收,后面的拒绝),多个前端请求埋点无法保障事务回滚(拿不到表单最终计算触发后的最终态数据),简化和规范协同页面扩展机制,保障协同+工作流+表单同事务提交和回滚,简化按照不同业务区分出一堆业务模块的前、后事件的问题,解决此前单一上下文无法获取完整的协同-工作流-表单完整数据获取难题
用于扩展前置事件、后置事件、适用于 发送、处理、终止、存为模板、保持待发场景,全代码执行周期进行扩展
####版本要求 9.0以及以上版本,协同前端后端分离的PC新模板支持:精致新体验布局、经典新体验布局 ####事件机制说明 表单预提交
类型 | order | Listener阶段 |
---|---|---|
发送 | 100 | PreListener |
处理 | 100 | PreListener |
终止/回退/指定回退 | 200 | PreListener |
存为模版 | 1 | NormalListener |
保存待发 | 100 | PreListener |
若需要获取到预提交数据需要让order返回值大于上面的对应值,比如在发送阶段获取预提交值,则需要order>100才能查询到预提交数据
提供扩展抽象类
类型 | className | |
---|---|---|
发送 | CollaborationThirdPartySendListener | |
处理 | CollaborationThirdPartyDealListener | |
终止/回退/指定回退 | CollaborationThirdPartyOperateListener |
对象ThirdPartyListenerContext字段说明:
Field Name | Field Description | Field Type |
---|---|---|
thirdpartParamData | 三方业务数据,由自己维护 data[*].key 匹配自己的业务 | ThirdpartParamData |
affairId | 事项id | Long |
summaryId | 协同id | Long |
formAppId | 表单id | Long |
formRecordId | 表单数据id | Long |
templateId | 模版id | Long |
activityId | 节点id | Long |
processId | 流程id | String |
caseId | 流程实例id | Long |
affairState | 协同状态 | Integer |
affairSubState | 协同子状态 | Integer |
nodePolicy | 节点权限code | String |
workItemId | 工作流的workItemId | Long |
submitCode | 提交操作code | String |
对象ThirdPartyListenerContext字段说明:
Field Name | Field Description | Field Type |
---|---|---|
thirdPartyContext | 三方传递的上下文,在hook#thirdPartyHandle 自行写入 | Map<String, Object> |
示例:
后端:
public class ExampleDealListener extends CollaborationThirdPartyDealListener implements PreListener<CollaborationFinishWorkItemEvent> {
@Override
public int getOrder() {
//表单预提交之后
return 200;
}
@Override
public ServiceResult doHandle(ThirdPartyListenerContext thirdPartyListenerContext) throws BusinessException {
ThirdpartParamData thirdpartParamData = thirdPartyListenerContext.getThirdpartParamData();
Object confirm = thirdpartParamData.getThirdPartyContext().get("weekBlock12345");
if (confirm instanceof Map){
Map<String, Boolean> stringObjectMap = (Map<String, Boolean>) confirm;
if (stringObjectMap.getOrDefault("confirm",false)){
return ServiceResult.ok();
}
}
if (Objects.nonNull(thirdPartyListenerContext.getFormAppId())){
return ServiceResult.fail(Collections.singletonMap("errorMsg","发送拦截不通过"));
}
return ServiceResult.ok();
}
}
可以扩展的接口实现说明:
接口 | 说明 | 执行顺序 |
---|---|---|
PreListener | 前置接口,代表的是表单预提交;工作流预提交 | 0 |
NormalListener | 业务数据提交接口,待办工作正式提交、协同正式提交、表单正式提交、此阶段后生成提交的数据,如生成了新的待办 | 1 |
PostListener | 后置接口,代表是提交后,需要触发什么动作,比如全文检索、协同触发事件、互联互通等 | 2 |
FinalListener | 最后执行的接口,用于释放锁、缓存等操作,此阶段始终会执行 | 3 |
AfterPostAsyncListener | 最后执行的异步监听,用于触发事务提交成功后的动作,比如新闻、公告审批 | 4 |
前端:
//强阻塞
$.ctp.bind('thirdPartyHandle',(args)=>{
alert(args.data.errorMsg);
args.error();
});
//弱阻塞,带确认
$.ctp.bind('thirdPartyHandle',(args)=>{
console.log('12313',args)
var confirmation = confirm(args.data.errorMsg);
if(confirmation){
args.thirdPartyContext['weekBlock12345']={
confirm:true//后端发现此key匹配的true无需再校验
}
args.success();
}else{
args.error();
}
});
事件列表:
事件key | 事件类型 |
---|---|
AddNode | 同步事件 |
moreSign | 同步事件 |
RemoveNode | 同步事件 |
Terminate | 同步事件 |
Cancel | 同步事件 |
return | 同步事件 |
specifiesReturn | 同步事件 |
specifiesReturnCreate | 同步事件 |
Comment | 同步事件 |
ContinueSubmit | 异步事件 |
beforeDealSubmit | 异步事件 |
createMeeting | 异步事件 |
relationDoc | 异步事件 |
relationAttachment | 异步事件 |
transform | 异步事件 |
transfer | 异步事件 |
favorite | 异步事件 |
sign | 异步事件 |
doZCDB | 异步事件 |
beforSendColl | 同步事件 |
summary-leavePage | 异步事件 |
newColl-leavePage | 异步事件 |
thirdPartyHandle | 异步事件 |
设计器支持状态:
状态code | 作用 | 规则 |
---|---|---|
state.affairState | 是否显示处理意见(新建自由协同不显示) | 不显示:新建自由协同(新建、草稿都不显示,含协同模版) |
state.showRelationData | 是否显示相关数据() | 不显示:新建自由协同(不含协同模版) |
state.showSiderbar | 是否显示侧边栏 | 不显示:相关数据和处理意见都不显示时候 |
state.showFormRuleState | 是否显示智能校验 | 显示:表单模版 |
state.showPredication | 是否显示流程预测 | 显示:表单模版 |
state.showPostscript | 是否显示附言 | 不显示:模版配置不能添加附言 |
state.siderActiveTab | 右侧胶囊当前激活页签 | 有附言时候:key = 发起附言 无附言时候:key = 处理意见 有意见锚点:key = 处理意见 新建模版:key = 相关数据 |
state.mainActiveTab | 正文、流程激活页签 | 正文:修改正文 流程:修改流程(加签会签) |
编撰人:ranpf
快速跳转
← 协同待办列表前后端分离按钮扩展机制 工作流 →
