🍎 业务需求
案例一: https://pan.quark.cn/s/c44b2c2e517a
案例二: https://pan.quark.cn/s/ccff3b0fcd55
- 当流程流转到某一节点后,点击按钮给表单明细行添加批注信息。非指定节点,点击按钮允许添加注释。
- 当流程快要结束时,将注释信息添加到表单明细行对应的字段中。
点击按钮添加批注
最终成功展示(这个是我后续重新添加的数据所以跟上面图片不一致)。
🍊 业务分析
问题一: 获取表单当前节点,将当前节点信息传给通过接口的方式传给后台。后台进行配置换,那些节点可以打开该注释页面。将接口传入的当前节点进行分析对比从而打开不同的逻辑页面。
问题二:
- 后台管理 —— 切换集团管理员账号 ——
CIP
集成平台 - 应用接入信息表中添加自己所需要的数据
thirdparty_register
- 业务流程集成 —— 新建分类 —— 新建集成业务(新建集成:选择
cap4
选项 ) - 新建关联应用 —— 选择
thirdparty_register
表中添加的数据 - 节点事件绑定 —— 添加节点
关联应用选择新建用用的信息,处理名称是我们二次开发的监听名称。
- 关联节点事件
🍓 功能实现
问题一:
如下代码要在自定义控件中的 js
文件中添加,详见 添加按钮控件
var jumpFun = function(opt) {
var currentNodeId = window.parent.document.getElementById("currentNodeId").value;
// 事件执行
// 获取按钮所在的行
var row = this.closest('tr');
// 表单明细行的 id 数据
var recordId = row.getAttribute('data-record-id');
var url = '/xx/xx.do?callMethod=index&formId='+recordId +"¤tNodeId="+currentNodeId;
getCtpTop().addattachDialog = null;
getCtpTop().addattachDialog = getCtpTop().$.dialog({
title: $.i18n("xx"),
transParams: {
parentWin: window
},
url: url,
width: 1000,
height: 600
});
};
通过pluginProperties.xml
配置文件进行数据注入。
后台接口,进行数据校验:
private static final String nodeConf = AppContext.getSystemProperty("note_conf.node_conf");
public ModelAndView index(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView modeError = new ModelAndView("apps/ext/note/error");
if (!StringUtils.hasLength(nodeConf)) {
ModelMap errorModelMap = modeError.getModelMap();
errorModelMap.put("errorMsg", "配置节点信息不能为空!");
return modeError;
}
String[] nodeArr = nodeConf.split(",");
String currentNodeId = request.getParameter("currentNodeId");
boolean contains = Arrays.asList(nodeArr).contains(currentNodeId);
if (!contains) {
ModelMap errorModelMap = modeError.getModelMap();
errorModelMap.put("errorMsg", "当前节点不允许添加注释!");
return modeError;
}
// 后续代码省略....
return new ModelAndView ("apps/ext/note/index");
}
问题二:
新建流程监听类,并将该类注册到 spring
的配置文件中,文档内容:https://open.seeyoncloud.com/seeyonapi/728/734.html#%E5%AE%9E%E7%8E%B0%E6%96%B9%E5%BC%8F-3
getLabel()
方法中返回的信息就是如下的处理名称。
getTemplateCode()
中的模版编号(编号内容要一致):
应用定制平台 —— 应用管理中心 —— 应用管理 —— 选择 —— 修改 —— 流程模版设置 —— 修改 —— 流程信息设置 ——模版编号。
public class TestWorkflowEvent extends AbstractWorkflowEvent {
private static final String formId = AppContext.getSystemProperty("listener_conf.form_id");
private static final String noteCloum = AppContext.getSystemProperty("listener_conf.note_cloum");
private FormApi4Cap4 formApi4Cap4;
private CAP4FormDataDAO cap4FormDataDAO;
public BidDocumentWorkflowEvent(FormApi4Cap4 formApi4Cap4, CAP4FormDataDAO cap4FormDataDAO) {
this.formApi4Cap4 = formApi4Cap4;
this.cap4FormDataDAO = cap4FormDataDAO;
}
/**
* 唯一标示,一旦生成,不可变更
*
* @return
*/
@Override
public String getId() {
return "1902621949435379712";
}
@Override
public String getLabel() {
return "测试监听";
}
/**
* 返回指定的模版编号
*
* @return
*/
public String getTemplateCode() {
return "zbwjhs";
}
;
@Override
public ApplicationCategoryEnum getAppName() {
return ApplicationCategoryEnum.form;
}
//处理前事件
public WorkflowEventResult onBeforeFinishWorkitem(WorkflowEventData data) {
long affairId = data.getAffairId();
// 进行业务处理
return null;
}
//发起事件
public void onStart(WorkflowEventData data) {
}
将上面代码编译成 .class
放在部署后 oa
系统制定文件目录中,进行流程监听测试。