如何将动态表单的附件面板的附件保存给已有单据的附件面板原创
9人赞赏了该文章
3,204次浏览
编辑于2022年10月11日 14:15:28
关键字:附件面板、是否落库
一、需求
在业务单据(kded_billc_clz)列表的工具栏中,选择某些行,点击按钮,弹出一个动态表单(kded_uploadatt),动态表单选择完附件(附件面板)之后,点击确定,返回选择的附件给已选的单据列表单据的附件面板中。
二、思路与方案
从动态表单中上传的附件是一个放在缓存中的数据,还没保存到文件服务器中,所以需要先通过FileService接口持久化保存到远程服务器中,再保存到单据列表已选的单据附件面板中。
三、实现过程
1、弹出动态表单
@Override public void itemClick(ItemClickEvent evt) { if (evt.getItemKey().equals("kded_addatt")) { FormShowParameter fsp = new FormShowParameter(); fsp.getOpenStyle().setShowType(ShowType.Modal); fsp.setFormId("kded_uploadatt"); fsp.setCloseCallBack(new CloseCallBack(this, "kded_addatt")); this.getView().showForm(fsp); } super.itemClick(evt); }
2、动态表单回传数据
@Override public void registerListener(EventObject e) { Button btt = this.getView().getControl("btnok"); btt.addClickListener(this); super.registerListener(e); } @Override public void click(EventObject evt) { AttachmentPanel att = this.getView().getControl("kded_attachmentpanelap"); List<Map<String, Object>> attachmentData = att.getAttachmentData(); this.getView().returnDataToParent(attachmentData); this.getView().close(); super.click(evt); }
3、持久化附件到服务器并写入单据的附件面板中
//弹窗返回事件 @Override public void closedCallBack(ClosedCallBackEvent ccb) { if (ccb.getActionId().equals("kded_addatt")) { List<Map<String, Object>> returnData = (List<Map<String, Object>>) ccb.getReturnData(); for (Map<String, Object> map : returnData) { 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().getTime()); } BillList billList = this.getView().getControl("billlistap"); ListSelectedRowCollection selectedRows = billList.getSelectedRows(); for (ListSelectedRow listSelectedRow : selectedRows) { //上传附件到单据的附件面板中 AttachmentServiceHelper.upload(billList.getBillFormId(), listSelectedRow.getPrimaryKeyValue(), "attachmentpanel", returnData); } } } /** * 上传临时文件到服务器中 * * @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、点击预览单据附件面板上的附件
五、开发环境版本
BOS_V3.0.005.0
六、参考资料
如何将动态表单的附件面板的附件保存给已有单据的附件面板.zi …(21.14KB)
赞 9
9人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读