> *最低版本：10.0.2406.01*

## 一、动作插件配置

### 1.1 基础配置

> 需要将配置放在ecode下，并在e-builder后台中打印window.weappEbdform\_customActions，可以打印到即可。

```javascript
window.weappEbdform_customActions = [
  {
    pluginId: 'customCardSave', //必需，自定义的插件id，多个插件不要重复
    pluginName: '表单保存', //必需，自定义的插件名称
    config: {
      enable: 1, //可选，1默认开启。0默认关闭，默认是1
      ecode:`这里插入对应的ecode代码`,//ecode字符串，需要替换为需要执行的实际js字符串
    },
  },
]
```

[图片附件未整合: ../../../../_assets/214942706919538688/001-4aaec59767.png]

### 1.2 完整示例

```javascript
//例如,上面的保存动作，完整配置如下：
window.weappEbdform_customActions = [
  {
    pluginId: 'customCardSave', //必需，自定义的插件id，多个插件不要重复
    pluginName: '表单保存', //必需，自定义的插件名称
    config: {
      enable: 1, //可选，1默认开启。0默认关闭，默认是1
      ecode:`
//例如配合保存按钮一起使用
const waitSave = ()=>{
  var ebdFormSdk = window.ebdfpageSDK.getCardSDK();
  if(ebdFormSdk){
    asyncFn((resolve,reject)=>{
    var successFn= () => {
      //保存成功的回调
      console.log('保存成功');
      //下一个动作执行
      resolve();
    }
    var failFn = ()=>{
      reject();
    }
    var refreshCard = true;
    ebdFormSdk.doCardSave(successFn, failFn, refreshCard);  //调用EB卡片数据保存
  })
  }
}
waitSave();
`,//ecode字符串
    },
  },
]
```

动作中将会出现自定义配置的动作。

[图片附件未整合: ../../../../_assets/214942706919538688/002-3d60b1a854.png]

## 二、插件包中的ecode属性示例

### 2.1 自定义 保存动作

ecode中增加下列配置JSON：

```javascript
//自定义触发EB表单保存
const waitSave = ()=>{
  var ebdFormSdk = window.ebdfpageSDK.getCardSDK();
  if(ebdFormSdk){
    asyncFn((resolve,reject)=>{
    var successFn= () => {
      //保存成功的回调
      console.log('保存成功');
      //下一个动作执行
      resolve();
    }
    var failFn = ()=>{
      reject();
    }
    var refreshCard = true;
    ebdFormSdk.doCardSave(successFn, failFn, refreshCard);  //调用EB卡片数据保存
  })
  }
}
waitSave();
```

### 2.2 自定义 关闭窗口动作

```javascript
function closeDlalogByDOM(){
// 方式，通过获取弹出框右上角的关闭按钮，模拟触发关闭按钮的点击事件，可关闭系统中所有标准的【弹出框】、【侧滑框】
  var dlgHeaders = document.querySelectorAll('.ui-dialog-closeIcon');
  if (dlgHeaders.length > 0) {
    // 触发倒数第一个元素的点击事件
    dlgHeaders[dlgHeaders.length - 1]?.click?.();
  }else{
    if(window.ebdFormSdk){ // EB表单
      ebdFormSdk.closePageBySlide()
    }else { //关闭所有页面打开的弹出框
      window.weappUtils?.eventEmitter?.emit('@weapp/ebdpage', 'dialog.close');
    }
  }
}
closeDlalogByDOM();//执行
```

### 2.3 自定义 关闭特定窗口动作

```javascript
// 关闭EB表单卡片的弹出框，侧滑框
ebdFormSdk.closePageBySlide();
// 关闭特定类型EB弹出框
window.weappUtils?.eventEmitter?.emit('@weapp/ebdpage', 'dialog.close', {
   pageType: 'LAYOUT', // 关闭EB表单【弹出框】
   closeAll: false,
});
// 关闭特定类型EB弹出框
window.weappUtils?.eventEmitter?.emit('@weapp/ebdpage', 'dialog.close', {
   pageType: 'SEARCH', // 关闭EB列表【弹出框】
   closeAll: false,
});

// 一次性关闭所有类型EB【弹出框】
window.weappUtils?.eventEmitter?.emit('@weapp/ebdpage', 'dialog.close');
```

## 三、包黑名单、白名单机制

### 3.1 属性说明

> 控制动作生效范围：通过自定义传入appRule、formRule属性，可以控制哪些应用、表单在按钮中显示对应自定义插件动作；

```typescript
export enum RuleType {
  whiteList = 'whitelist',
  blackList = 'blacklist'
}
appRule?: { //可选
  rule: RuleType; //生效规则，'whitelist':使用whitelist中自定义的规则；'blacklist':使用blacklist中自定义的规则
  whitelist: string[]; //白名单 - 应用appId数组
  blacklist: string[]; //黑名单 - 应用appId数组
};
formRule?: { //可选
  rule: RuleType; //生效规则
  whitelist: string[]; //白名单 - 表单objId数组
  blacklist: string[]; //黑名单 - 表单objId数组
};
```

### 3.2 使用示例

#### 3.2.1 限制只有某应用显示插件

```javascript
//如限制应用id=‘615058352157843457’的应用才显示
window.weappEbdform_customActions = [
  {
    pluginId: 'customAction111', // 必需，自定义的插件id，多个插件不要重复
    pluginName: '动作111', // 必需，自定义的插件名称
    appRule: {
      rule: 'whitelist',
      whitelist: ['615058352157843457'], // 应用白名单，appId不在whitelist的则不显示
    },
    config: {
      enable: 0,
      ecode: `console.log('customAction111')`,
    },
  },
];
```

#### 3.1.2 限制只有某表单不显示插件

```javascript
window.weappEbdform_customActions = [
  {
    pluginId: 'customAction222', // 必需，自定义的插件id，多个插件不要重复
    pluginName: '动作222', // 必需，自定义的插件名称
    formRule: {
      rule: 'blacklist',
      blacklist: ['744193007985672193'], // 应用白名单，appId不在whitelist的则不显示
    },
    config: {
      enable: 0,
      ecode: `console.log('customAction222')`,
    },
  },
];
```

#### 3.1.3 组合使用

> 例如：
> 
> 只有appId为'615058352157843457'或'990693279847899137'的应用中的按钮动作显示该插件动作，但屏蔽对应应用下的objId为'744193007985672193'的表单

```javascript
// 只有appId为'615058352157843457'或'990693279847899137'的应用中的按钮动作显示该插件动作，
// 但屏蔽对应应用下的objId为'744193007985672193'的表单
window.weappEbdform_customActions = [
  {
    pluginId: 'customAction333', // 必需，自定义的插件id，多个插件不要重复
    pluginName: '动作333', // 必需，自定义的插件名称
    formRule: {
      rule: 'blacklist',
      blacklist: ['744193007985672193'], // 表单黑名单
    },
    appRule: {
      rule: 'whitelist',
      whitelist: ['615058352157843457','990693279847899137'], // 应用白名单
    },
    config: {
      enable: 0,
      ecode: `console.log('customAction333')`,
    },
  },
];
```

### 3.3 应用、表单级混合权重说明

#### 3.3.1 权重规则说明

- **表单**使用rule名单，且名单中列出了当前表单 权重：1000
- **应用**使用rule名单，且名单中列出了当前应用 权重：100
- **应用**使用rule名单，但名单中不存在当前应用 权重：10
- **表单**使用rule名单，但名单中不存在当前表单 权重：1
- **应用**未定义rule，无名单规则 权重：0.1
- **表单**未定义rule，无名单规则 权重：0.1

#### 3.3.2 规则计算excel图解[图片附件未整合: ../../../../_assets/214942706919538688/003-f042e0b4e3.png]

## 四、自定义插件动作过滤

### 4.1 属性说明

> 过滤自定义插件动作，可以针对系统按钮做自定义插件过滤

```typescript
// 可拿到插件id和按钮key，系统按钮selectedButtonKey存在，为附录所列类型，自定义按钮selectedButtonKey为空
buttonFilter?: (pluginId: string, selectedButtonKey?: string) => boolean;
```

### 4.2 使用示例

```javascript
window.weappEbdform_customActions = [
  {
    pluginId: 'customAction333', // 必需，自定义的插件id，多个插件不要重复
    pluginName: '动作333', // 必需，自定义的插件名称
    buttonFilter: (pluginId, selectedButtonKey) => {
      console.log(pluginId, selectedButtonKey);
      return selectedButtonKey === ButtonKey.Save; // 只有系统保存按钮下的动作有该插件动作
    },
    // formRule: {
    //   rule: 'blacklist',
    //   blacklist: ['744193007985672193'], // 表单黑名单
    // },
    // appRule: {
    //   rule: 'whitelist',
    //   whitelist: ['615058352157843457', '990693279847899137'], // 应用白名单
    // },
    config: {
      enable: 0,
      ecode: 'console.log(\'customAction333\')',
    },
  },
];
```

### 4.3 附录

#### 4.3.1 系统按钮ButtonKey列表

```typescript
export enum ButtonKey {
  Save = 'save', // 保存
  SaveAndCreate = 'saveAndCreate', // 保存并新建
  SaveAndCopy = 'saveAndCopy', // 保存并复制
  TempSave = 'tempSave', // 暂存
  EditSave = 'editSave', // 保存(编辑保存)
  Cancel = 'cancel', // 取消
  Edit = 'edit', // 编辑
  Copy = 'copy', // 复制
  Delete = 'delete', // 表单删除
  Like = 'likeBtn', // 表单删除
  DisLike = 'disLikeBtn', // 表单删除
  MarkReadState = 'markReadState', // 标记为已读
  BatchMarkReadState = 'batchMarkReadState', // 批量已读
  Print = 'print', // 打印
  TableAdd = 'tableAdd', // 新建
  TableImp = 'tableImp', // 导入
  TableDelete = 'tableDelete', // 表格删除
  TableExp = 'tableExp', // 导出
  BatchEditValue = 'batchEditValue', // 批量编辑,该按钮同时控制批量修改和批量更改字段值
  BatchPrint = 'batchPrint', // 批量打印
  BatchAdd = 'batchAdd', // 批量新增
  Follow = 'follow', // 关注
  Unfollow = 'unfollow', // 取消关注
  BatchFollow = 'batchFollow', // 批量关注

  BatchUnfollow = 'batchUnfollow', // 批量取消关注
  MyFollows = 'myFollows', // 我的关注
  TodoListBtn = 'todoListBtn', // 设为待办事项
  TodoBtn = 'todoBtn', // 已设为待办
  BatchPubTags = 'batchPubTags', // 批量设置公共标签
  BatchMyTags = 'batchMyTags', // 批量设置我的标签
  SetTop = 'setTop', // 置顶
  CancelSetTop = 'cancelSetTop', // 取消置顶
  MessageReceiveSet = 'messageReceiveSet', // 消息接收设置
  BatchAggregationPrint = 'batchAggregationPrint', // 消息接收设置
  BatchAddSave = 'batchAddSave', // 消息接收设置
  BatchEditSave = 'batchEditSave', // 消息接收设置

  Link = 'link', // 链接字段的类型，不作为单独按钮
  Share = 'share', // 共享
  BatchShare = 'batchShare', // 批量共享
  MattersForward = 'mattersForward', // 事项转发
  Personalization = 'personalization', // 个性化设置
  QuickOrder = 'quickOrder', // 快速排序
  InitializeColumnWidth = 'initializeColumnWidth', // 初始化列宽
  PrevData = 'prevData', // 上一条
  NextData = 'nextData', // 下一条
  ExportPDF = 'exportPDF', // 导出PDF
  ShareToMe = 'shareToMe', // 共享给我的数据
  ExternalShare = 'externalShare', // 外部分享
  ViewWorkflow = 'viewWorkflow' // 查阅流程
}
```
