如何将动态表单的附件面板的附件保存给已有单据的附件面板原创
金蝶云社区-陈来珍
陈来珍
7人赞赏了该文章 2387次浏览 未经作者许可,禁止转载编辑于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、点击插入附件,在动态表单的附件面板上传附件

image.png

2、点击预览单据附件面板上的附件

image.png

五、开发环境版本

BOS_V3.0.005.0

六、参考资料

【开发平台】指导手册

学习成长中心

 


赞 7