如何在附件中增加下载次数显示原创
金蝶云社区-陈来珍
陈来珍
4人赞赏了该文章 861次浏览 未经作者许可,禁止转载编辑于2022年04月14日 17:51:11

关键词:附件面板、下载次数、备注、提交状态

一、需求背景:

在单据中,附件上传保存到单据的附件面板,用户提交单据之后。需要把用户下载的次数显示到附件面板对应附件信息上。如下图:

image.png

二、思路与方案

     由于苍穹平台没有直接给文件服务器上文件被下载的次数接口,我们可以在提交时,初始化下载次数为0,信息保存在备注内容的前面。并监听附件面板的下载事件,下载时,更新对应附件的下载次数=原下载次数+1。

三、实现过程

1、提交单据时,提交的操作插件初始化下载次数为0

操作提交操作插件-
public class OrderOpPlugin extends AbstractOperationServicePlugIn {
       @Override
       public void beginOperationTransaction(BeginOperationTransactionArgs e) {
              //提交之后,初始化下载次数
              if (e.getOperationKey().equals("submit")) {
                     DynamicObject[] dataEntities2 = e.getDataEntities();
                     for (DynamicObject dynamicObject : dataEntities2) {
                            Object pkValue = dynamicObject.getPkValue();
                            String name = dynamicObject.getDataEntityType().getName();
                            List<Map<String, Object>> attachments = AttachmentServiceHelper.getAttachments(name, pkValue, "attachmentpanel");
                            for (Map<String, Object> map : attachments) {
                                   String description = (String) map.get("description");
                                   String uid = (String) map.get("uid");
                                   /**
                                    * 初始化:添加下载次数为备注的前缀信息
                                    * 注意如果有撤销操作,则需要在撤销时重置删掉下载次数的备注前缀
                                    */
                                   AttachmentServiceHelper.mark(uid, "|下载次数:0|\t"+ description);
                            }
                     }
              }
              super.beginOperationTransaction(e);
       }
}

2、更新下载次数

表单插件
   public class OrderAttamentPlugin extends AbstractBillPlugIn implements AttachmentDownloadListener{
(1)添加下载的监听事件
   @Override
   public void registerListener(EventObject e) {
      AttachmentPanel attachment = this.getView().getControl("attachmentpanel");
      // 下载监听
      attachment.addDownloadListener(this);
      super.registerListener(e);
   }
(2)下载后事件中更新下载的次数
   @Override
   public void attachmentAfterDownload(AttachmentDownLoadEvent evt) {
      String billstatus = (String) this.getModel().getValue("billstatus");
      //提交状态才更新下载次数
      if (billstatus.equals("B")) {
         List<Map<String, Object>> targetAttachments = (List<Map<String, Object>>) evt.getTargetAttachments();
         for (Map<String, Object> map : targetAttachments) {
            String uid = (String) map.get("uid");
            String description = (String) map.get("description");
                int indexOf = description.indexOf("下载次数:");
                int preDesIndex = description.indexOf("|", indexOf);
                //取下载次数
                String countStr=description.substring(indexOf+5, preDesIndex);
                int nowCount=Integer.valueOf(countStr)+1;
                //原备注信息内容部分
                String preDescription = description.substring(preDesIndex + 1);
                AttachmentServiceHelper.mark(uid, String.format("|下载次数:%d|", nowCount) + preDescription);
            }
this.getView().updateView("attachmentpanel");
      }
      
      AttachmentDownloadListener.super.attachmentAfterDownload(evt);
   }
   
}

四、实现效果

1、上传单据之后提交单据,会初始化下载次数为0

image.png

2、点击下载,可以看到下载次数已经被更新到备注内容的下载次数中

image.png

五、开发环境版本

COSMICV4.0.010.0

六、注意事项

如果业务需求中需要记录附件上传之后的下载次数(即不需要提交),则建议在附件面板上添加自定义按钮,在本单据上用一个单据体保存实际上每个附件对应下载的次数。并把下载次数显示为自定义按钮的名字。

七、参考资料

【开发平台】指导手册

学习成长中心

赞 4