苍穹附件面板开发经验收集原创
金蝶云社区-研发工程与运维部软件开发陈浩
研发工程与运维部软件开发陈浩
0人赞赏了该文章 581次浏览 未经作者许可,禁止转载编辑于2023年10月31日 14:30:02

关键词:附件面板、隐藏附件面板下载按钮

一、需求

在动态表单里面,附件面板上传附件后(不落库),保存到基础资料对应的附件面板中。(落库)

二、思路与方案

从动态表单中上传的附件是一个放在缓存中的数据,还没保存到文件服务器中,所以需要先通过FileService接口持久化保存到远程服务器中,再保存到基础资料对应的附件面板中

三、实现过程

1、新建动态表单,保存的时候获取附件面板记录

// 获取附件面板数据模型
AttachmentPanel attachmentPanel = this.getControl("aops_attachmentpanelap");
List<Map<String, Object>> attachmentData = attachmentPanel.getAttachmentData();

2、持久化附件到附件服务器并写入基础资料的附件面板中

for (Map<String, Object> map : attachmentData) {
            String url = (String) map.get("url");
            String name = (String) map.get("name");
            if (url.contains("configKey=redis.serversForCache&id=tempfile")) {
                //持久化附件到服务器
                url = uploadTempFile(url, name);
                map.put("url", url);
            }
            map.put("creator", UserServiceHelper.getCurrentUserId());
            map.put("modifytime", new Date());
        }

// 上传附件到单据的附件面板中
            AttachmentServiceHelper.upload(“单据标识”, dynamicObject.getPkValue(),
                    "aops_attachmentpanelap", attachmentData);

/**
        * 上传临时文件到服务器中
        *
        * @param url
        * @param name
        * @return
        */
       private String uploadTempfile(String url, String name) {
              TempFileCache cache = CacheFactory.getCommonCacheFactory().getTempFileCache();
              InputStream in = cache.getInputStream(url);
              FileService service = FileServiceFactory.getAttachmentFileService();
              FileService fs = FileServiceFactory.getAttachmentFileService();
              RequestContext requestContext = RequestContext.get();
              String uuid = UUID.randomUUID().toString().replace("-", "");
              // 生成文件路径-上传附件时远程服务器需要存储文件的位置
              String pathParam = FileNameUtils.getAttachmentFileName(requestContext.getTenantId(),
                            requestContext.getAccountId(), uuid, name);
              FileItem fileItem = new FileItem(name, pathParam, in);
              // cache.remove(url);
              // 上传附件到文件服务器
              String downUrl =service.upload(fileItem);
              return downUrl;
       }

四、效果图

1、点击新增打开动态表单,上传附件后点击保存。(安全隐私合规要求,无图片)

2、在对应的基础资料列表可以查看预览附件。

3、附件面板附件旁边的显示隐藏下载等按钮,有两种方法:第一种开发设计器里面锁定;第二种代码查询出附件后,传入显示隐藏状态

AttachmentPanel panel = getControl("attachmentpanel");
        List<Map<String, Object>> attachmentData = panel.getAttachmentData();        
          if(attachmentData == null || attachmentData.isEmpty()){           
              return;
        }      

        for (Map<String, Object> attachmentMap : attachmentData) {
            String visiablePreview = "0";//是否显示预览按钮
            String visiableDownload = "0";//是否显示下载按钮
            String visiableDelete = "0";//是否显示删除按钮
            String visiableRename = "0";//是否显示重命名按钮
            //visible参数规则为01组成,0代表不可见,1代表可见
            attachmentMap.put("visible",visiablePreview + visiableDownload + visiableDelete + visiableRename);                    }
        IClientViewProxy clientViewProxy = getView().getService(IClientViewProxy.class);
        clientViewProxy.setEntryProperty("attachmentpanel","data",attachmentData);


五、开发环境版本

5.0

六、参考资料

https://developer.kingdee.com/article/292000580619474944?productLineId=29#5

https://developer.kingdee.com/article/236196563457491968?productLineId=29&isKnowledge=2

赞 0