如何实现一键批量删除所有附件

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

如何实现一键批量删除所有附件

# 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)在单据上增...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息