上传附件后,删除旧附件原创
金蝶云社区-吴锐雄
吴锐雄
16人赞赏了该文章 5304次浏览 未经作者许可,禁止转载编辑于2021年04月21日 16:28:07

创作不易,如果文章对您有帮助,请为我点击一个朴实无华的赞^_^,我会更有动力地更新文章。


删除旧附件,达到一个替换附件的效果


思路:

  1. 新建java插件,注册附件上传的监听事件。

  2. 在附件上传时,把上传附件的uid记录起来。

  3. 在附件上传之后,当前控制器和数据库中,通过第2步骤的记录区分原附件和此次上次附件,把上一次的附件删除掉。


image.png


当前有三个附件

image.png


上次两个新附件,原来的附件被删除

image.png


插件代码如下

package kd.ecos.demo;

import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.form.control.AttachmentPanel;
import kd.bos.form.control.events.UploadEvent;
import kd.bos.form.control.events.UploadListener;
import kd.bos.form.plugin.AbstractFormPlugin;
import kd.bos.servicehelper.AttachmentServiceHelper;

import java.util.*;

public class DemoTestPlugin extends AbstractFormPlugin implements UploadListener {

    List pkIdList = new ArrayList<>();

    @Override
    public void registerListener(EventObject e) {
        super.registerListener(e);
        // 注册监听事件
        AttachmentPanel attachmentPanel = getControl("attachmentpanel");
        attachmentPanel.addUploadListener(this);
    }

    @Override
    public void propertyChanged(PropertyChangedArgs e) {
        System.out.println("");
    }

    @Override
    public void upload(UploadEvent evt) {
        // 记录此次上传的附件
        Object[] maps = evt.getUrls();
        for(Object o : maps) {
            if (o instanceof Map) {
                pkIdList.add(((Map)o).get("uid"));
            }
        };
        System.out.println("");
    }

    @Override
    public void afterUpload(UploadEvent evt) {
        System.out.println("");

        // 获取附件控制器
        AttachmentPanel attachmentPanel = getControl("attachmentpanel");
        if (attachmentPanel.getAttachmentData().size() > 0) {
            // 获取全部附件
            List<Map<String, Object>> mapList = attachmentPanel.getAttachmentData();
            Iterator<Map<String, Object>> iterator = mapList.iterator();
            // 遍历所有附件
            while (iterator.hasNext()) {
                Map map = iterator.next();
                boolean canRemove = true;
                for (Object id : pkIdList) {
                    // 判断附件是否此次上传,如果不是,把变量canRemove置为false
                    if (map.get("uid").toString().equals(id.toString())) {
                        canRemove = false;
                        break;
                    }
                }

                // 删除附件
                if (canRemove) {
                    String formId = map.get("entityNum").toString();
                    Object pkId = map.get("billPkId");
                    Object fileUid = map.get("uid");
                    //从数据库中删除上一次保存的附件
                    AttachmentServiceHelper.remove(formId, pkId, fileUid);
                    //控制器中删除附件
                    attachmentPanel.remove(map);
                }
            }

            // 删除完成之后刷新界面
            getView().invokeOperation("refresh");
        }

        // 列表清空
        pkIdList.clear();
    }

}




赞 16