如何实现一键批量删除所有附件
# 1业务场景
目前附件面板|附件字段上传多个附件后,只能逐个删除,用户希望实现一键批量删除所有附件的功能。
# 2实现方案
(1)在单据上增加批量删除按钮。
(2)编写表单插件,在插件中监听按钮点击事件,删除指定附件面板/字段上的所有附件。
## 2.1一键删除附件面板所有附件
### 2.1.1插件代码
```
/**
* 类描述:一键删除附件面板上的所有附件功能插件
*/
public class DeleteAllAttPanelFormPlugin extends AbstractFormPlugin {
//删除按钮标识
private static final String DEL_ALL_ATT_BT_NAME = "deleteallatt";
//附件面板标识
private static final String ATTACHMENT_PANEL_NAME = "attachmentpanel";
@Override
public void registerListener(EventObject e) {
addItemClickListeners("tbmain");
}
@Override
public void itemClick(ItemClickEvent evt) {
String itemKey = evt.getItemKey();
if(!StringUtils.equals(itemKey,DEL_ALL_ATT_BT_NAME)){
return;
}
deleteAllAttachmentPanelData();
}
/**
* 删除附件面板上的所有附件方法
*/
private void deleteAllAttachmentPanelData() {
AttachmentPanel panel = getControl(ATTACHMENT_PANEL_NAME);
List<Map<String, Object>> attachmentData = panel.getAttachmentData();
if(CollectionUtils.isEmpty(attachmentData)){
return;
}
//删除附件面板上的所有附件,并通知前端移除页面上的附件
//remove()方法底层会调用相关方法删除数据库附件信息与附件
attachmentData.forEach(attachmentMap->panel.remove(attachmentMap));
}
}
```
### 2.1.2 展示效果
![一键删除附件面板所有附件.webp](/download/010024bba2ca03304a4da2c001ee9db9b492.webp)
## 2.2 一键删除附件字段所有附件
### 2.2.1示例代码
/**
*类描述:一键删除附件字段上的所有附件功能插件
*/
public class DeleteAllAttFieldFormPlugin extends AbstractFormPlugin {
//删除按钮标识
private static final String DEL_ALL_ATT_BT_NAME = "deleteallatt";
//附件字段标识
private static final String ATTACHMENT_FIELD_NAME = "attachmentfield";
@Override
public void registerListener(EventObject e) {
addItemClickListeners("tbmain");
}
@Override
public void itemClick(ItemClickEvent evt) {
String itemKey = evt.getItemKey();
if(!StringUtils.equals(itemKey,DEL_ALL_ATT_BT_NAME)){
return;
}
deleteAllAttachmentFieldData();
}
/**
* 删除附件字段的所有数据
*/
private void deleteAllAttachmentFieldData() {
AttachmentEdit attachmentEdit = getControl(ATTACHMENT_FIELD_NAME);
Object attFieldObj = getModel().getValue(ATTACHMENT_FIELD_NAME);
//附件字段是一个多选基础资料
if(!(attFieldObj instanceof MulBasedataDynamicObjectCollection)){
return;
}
IDataEntityProperty property = getModel().getDataEntityType().getProperties().get(ATTACHMENT_FIELD_NAME);
//附件字段=多选基础资料
if (!(property instanceof MulBasedataProp)) {
return;
}
MulBasedataProp mulBasedataProp = (MulBasedataProp) property;
//获取当前附件字段上的附件信息集合
DynamicObjectCollection mulBasedataPropValue = (DynamicObjectCollection)
mulBasedataProp.getValueFast(getModel().getDataEntity());
List<Map<String, Object>> attMapList = new ArrayList<>(16);
for (DynamicObject dynamicObject : mulBasedataPropValue) {
//获取单个附件信息
DynamicObject attFieldDynamicObj = dynamicObject.getDynamicObject("fbasedataid");
Map<String, Object> attMap = new HashMap<>(1);
//获取附件唯一标识
String uid = attFieldDynamicObj.getString("uid");
attMap.put("uid",uid);
attMapList.add(attMap);
}
List<Map<String, Object>> emptyList = new ArrayList<>(16);
//删除model中的附件信息,并通知前端移除所有附件
attachmentEdit.postBack(emptyList,-1,-1);
String formId = getModel().getDataEntityType().getName();
String tableName = attachmentEdit.getTableName();
//删除所有数据库附件信息与附件
attMapList.forEach(attMap->AttachmentFieldServiceHelper.removeAttachments(formId,tableName,attMap));
}
}
### 2.2.2 展示效果
![一键删除附件字段所有附件.webp](/download/01007819f2844be449a88fec447893889379.webp)
如何实现一键批量删除所有附件
# 1业务场景目前附件面板|附件字段上传多个附件后,只能逐个删除,用户希望实现一键批量删除所有附件的功能。# 2实现方案(1)在单据上增...
点击下载文档
上一篇:移动端附件配置介绍下一篇:如何跨环境导入导出打印模板
本文2024-09-23 00:38:10发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-140740.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章