苍穹附件面板开发经验收集原创
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