# CAP4无流程表单应用绑定自定义按钮开发文档 #
----------
## 概要说明 ##
自V7.1版本开始,CAP4无流程表单应用绑定设置可以支持自定义按钮(*以下简称按钮*),客开伙伴可以用此通路在CAP4无流程数据列表页面开发一些想要的功能。
总体来说,应用绑定自定义按钮开发模式和表单编辑器中的自定义控件类似,是以插件或者组件的形式融入产品,插件或者组件开发规范请见[http://open.seeyon.com/book/ctp/sdk/ctpbackendspec.html#插件化](http://open.seeyon.com/book/ctp/sdk/ctpbackendspec.html#插件化)
## 应用绑定自定义按钮代码目录结构说明 ##
开发按钮第一步自然是创建项目,创建项目之后目录结构可以参照以下示例创建各目录(以下目录结构是一个自定义按钮的示例):
─seeyon
..├─apps_res
..│..└─cap
..│......└─customCtrlResources
..│..........└─newFormDataBtnResources
..│..............├─css
..│..............│......setTargetFormInfo.css
..│..............│
..│..............├─html
..│..............│......setTargetFormInfo.html
..│..............│
..│..............├─images
..│..............│......dash-arrow.png
..│..............│
..│..............└─js
..│......................customBtn8714694276131171133.common.js
..│......................customBtn8714694276131171133.umd.js
..│......................customBtn8714694276131171133.umd.min.js
..│......................setTargetFormInfo.js
..│
..└─WEB-INF
......├─cfgHome
......│..└─component
......│......└─newFormDataBtn
......│..........│..pluginCfg.xml
......│..........│
......│..........├─i18n
......│..........│......newFormDataBtn_en.properties
......│..........│......newFormDataBtn_zh_CN.properties
......│..........│......newFormDataBtn_zh_TW.properties
......│..........│
......│..........└─spring
......│..................spring-newformdatabtn-manager.xml
......│
......├─classes
......│..└─com
......│......└─seeyon
......│..........└─cap4
......│..............└─form
......│..................└─bean
......│......................└─button
......│..............................NewFormDataBtn.class
......│
......└─jsp
## 后端开发说明 ##
要实现一个自定义按钮,需要写一个java类继承com.seeyon.cap4.form.bean.button.CommonBtn,并且实现/重写其中的接口,例如:
package com.seeyon.cap4.form.bean.button;
import com.seeyon.cap4.form.bean.FormBean;
import com.seeyon.cap4.form.bean.FormSaveAsBean;
import com.seeyon.cap4.form.modules.importandexport.BusinessDataBean;
import com.seeyon.cap4.form.util.Enums;
import com.seeyon.ctp.common.i18n.ResourceUtil;
import com.seeyon.ctp.util.Strings;
import com.seeyon.ctp.util.json.JSONUtil;
import java.util.HashMap;
import java.util.Map;
/**
* Created by weijh on 2018-12-26.
* 应用绑定新建按钮实现类
*/
public class NewFormDataBtn extends CommonBtn {
@Override
public void init() {
this.setPluginId("newFormDataBtn");//设置插件或者组件id,和pluginCfg.xml中的id一致
this.setIcon("cap-icon-custom-button");
BtnParamDefinition targetFormInfoParam = new BtnParamDefinition();
targetFormInfoParam.setDialogUrl("apps_res/cap/customCtrlResources/newFormDataBtnResources/html/setTargetFormInfo.html");
targetFormInfoParam.setDisplay("com.cap.btn.newFormDataBtn.param1.display");
targetFormInfoParam.setName("targetFormInfo");
targetFormInfoParam.setParamType(Enums.BtnParamType.button);
targetFormInfoParam.setDialogWidth("640");
targetFormInfoParam.setDialogHeight("415");
addDefinition(targetFormInfoParam);
}
@Override
public String getKey() {
return "8714694276131171133";//给按钮设置一个key,可以随便取,只是不要和已有按钮冲突
}
@Override
public String getNameSpace() {
return "customBtn" + this.getKey();
}
@Override
public String getText() {
return ResourceUtil.getString("com.cap.btn.newFormDataBtn.text");//设置按钮名称
}
/*
/**
* 获取PC端自定义控件运行态资源注入信息
* jsUri:定义PC端表单运行态加载第三方JavaScript的路径
* cssUri:定义PC端表单运行态加载第三方CSS的路径
* initMethod:定义PC端表单运行态第三方js入口方法名称
*
* @return
*/
@Override
public String getPCInjectionInfo() {
return "{\"path\":\"apps_res/cap/customCtrlResources/newFormDataBtnResources/\",\"jsUri\":\"js/" + this.getNameSpace() + ".umd.min.js\",\"initMethod\":\"init\",\"nameSpace\":\"" + this.getNameSpace() + "\"}";
}
@Override
public String getMBInjectionInfo() {
return null;
}
/**
* 导出的扩展接口,应用绑定自定义按钮用,有需要的重写该方法
*
* @param formBean 当前表单
* @param businessDataBean 导出中间对象,如果有附件,可以放到对象中的unifiedExportAttachment中
* @param resultMap 按鈕json
*/
@SuppressWarnings("unchecked")
@Override
public void getJson4Export(FormBean formBean, String customParam, BusinessDataBean businessDataBean, Map<String, Object> resultMap) {
if (Strings.isNotEmpty(customParam)) {
Map<String, Object> customParamMap = (Map<String, Object>) JSONUtil.parseJSONString(customParam);
if(customParamMap.size() > 0){
resultMap.putAll(customParamMap);
Map<String, Object> targetFormInfo = (Map<String, Object>) customParamMap.get("targetFormInfo");
Map<String, Object> targetFormMap = (Map<String, Object>) targetFormInfo.get("targetForm");
String formId = (String) targetFormMap.get("formId");
targetFormMap.put("formId", businessDataBean.getRealId4Export(Long.valueOf(formId)).toString());
String bindId = (String) targetFormMap.get("bindId");
targetFormMap.put("bindId", businessDataBean.getRealId4Export(Long.valueOf(bindId)).toString());
}
}
}
/**
* 在业务导入完之后,应用绑定自定义按钮的处理接口
* @param formBean
* @param customParam
* @param businessDataBean
* @param btnInfoMap
*/
@Override
public void importInfoAfterBizImport(FormBean formBean, String customParam, BusinessDataBean businessDataBean, Map<String, Object> btnInfoMap) {
if (Strings.isNotEmpty(customParam)) {
Map<String, Object> customParamMap = (Map<String, Object>) JSONUtil.parseJSONString(customParam);
btnInfoMap.putAll(customParamMap);
Map<String, Object> targetFormInfo = (Map<String, Object>) customParamMap.get("targetFormInfo");
Map<String, Object> targetFormMap = (Map<String, Object>) targetFormInfo.get("targetForm");
int targetType = Integer.parseInt(String.valueOf(targetFormMap.get("targetType")));
if (targetType == 0) {
//业务内表单新建
String formId = (String) targetFormMap.get("formId");
targetFormMap.put("formId", businessDataBean.getNewIdByOldId(Long.valueOf(formId)).toString());
String bindId = (String) targetFormMap.get("bindId");
targetFormMap.put("bindId", businessDataBean.getNewIdByOldId(Long.valueOf(bindId)).toString());
} else {
btnInfoMap.putAll(new HashMap<String, Object>());
}
} else {
btnInfoMap.putAll(new HashMap<String, Object>());
}
}
/**
* 表单另存为应用绑定自定义按钮另存为接口,各个应用绑定自定义按钮需要处理自己的逻辑
* @param formSaveAsBean
* @param formBean
* @param btnInfoMap
*/
public void otherSave(FormSaveAsBean formSaveAsBean, FormBean formBean, Map<String, Object> btnInfoMap){
Long saveToBizId = formSaveAsBean.getSaveToBizId();
Long oldBizId = formSaveAsBean.getOldBizId();
//另存为选择为空说明是存为单表
if(null == saveToBizId){
//原来是应用中的表,清空
if(null != oldBizId){
btnInfoMap.put("customParam","");
}
}else{//存为应用中的表单
if(null == oldBizId){//原来是单表
btnInfoMap.put("customParam","");
}else{//原来是应用中的表单
if(!saveToBizId.equals(oldBizId)){//跨应用另存,清空
btnInfoMap.put("customParam","");
}
}
}
}
}
- 概要
- 技术介绍
- 框架与环境
- vue开发
- 开发规范
- 前端开发规范
- 总体原则
- HTML规范
- HTML&css规范
- vue编码规范
- Javascript规范
- 后端开发规范
- cap4
- 自定义控件
- 前端2.0(PC+移动)
- PC前端
- 后端
- 移动端
- 移动端接口
- 低版本协同升级到V5 8.0适配说明
- 自定义按钮
- 自定义按钮(无流程)
- 自定义控件(列表插槽)
- 自定义按钮(筛选条件)
- 低版本协同升级到V5 8.0适配说明
- 门户空间
- 门户与栏目挂载
- 栏目开发及流程说明
- 页面模板
- 客开通路及插件体系
- 表单设计器扩展配置
- 使用步骤
- 配置说明
- 事件API
- Demo示例
- 运行态客开通路
- 插件使用步骤
- 插件接口
- 事件接口
- 钩子相关接口
- 表单操作接口
- Demo示例
- 插件机制
- 表单运行态接口(旧)
- 白名单插件
- 版本记录
- vue组件库
- 开发指南
- 开发文档规范
- 业务组件介绍
- 业务组件
- table组件
- 分页组件
- title组件
- 统计排队组件
- code组件
- 条件筛选
- 批量导入
- 上传Excel
- 批量更新
- 批量刷新
- UI组件
- 按钮组件
- 复选组件
- 取色器组件
- 示例组件
- 水平选择组件
- 选图标组件
- 提示组件
- 单选组件
- 搜索组件
- 选择组件
- 穿梭框组件
- 标签组件
- 文本组件
- 树组件
- 验证组件
- 菜单组件
- iframe组件
- toolbar
- 统计组件
- 饼图
- 柱状图
- 图标
- 业务关系开发指南
- 自定义触发
- 自定义关联
- 后端API
- 更新表单数据缓存
- 发起表单流程
- 取得指定表单PDF或截图
- 无流程批量添加
- 无流程批量删除
- 无流程批量更新
- 无流程批量导出
- 客开培训文档
- Vue基础培训
- Vue实战培训
- Vue进阶培训
- VueCLI3培训
- cap3
- 自定义控件
- 后端
- 移动端
- 前端编译
- 表单运行态接口
- 协同云