# 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
- 自定義控件
- 后端
- 移動端
- 前端編譯
- 表單運行態接口
- 協同云