如何将动态表单附件面板的附件上传到另一个动态表单附件面板上原创
金蝶云社区-闫方亮
闫方亮
3人赞赏了该文章 1188次浏览 未经作者许可,禁止转载编辑于2022年07月14日 14:29:21

一、需求背景

        两动态表单中分别包含一个附件面板控件。在某动态表单页面(后文简称:父页面)上点击按钮后弹出子动态表单页面(后文简称:子页面),子页面上有一【附件面板】控件,用户上传附件文件之后点击【确定】按钮,系统自动将所有附件回传至父页面上的【附件面板】中

二、思路与方案

        在父页面上添加按钮,点击按钮后弹出子页面,因动态表单中上传的附件是一个放在缓存中的数据,关闭动态表单缓存中的数据会丢失,所以需要将子页面中【附件面板】的数据获取后传输到父页面【附件面板】。

三、实现过程

        3.1首先创建一个动态表单(子页面)子页面名为(附件面板子页面)包含一个【附件面板】控件如下图3.1所示

image.png

图3.1

        3.2然后创建另一个动态表单(父页面)父页面名为(附件面板父页面)中包含一个【上传附件】按钮、【附件面板】控件如下图3.2所示

image.png

图3.2

        3.3编写子页面插件类代码,并注册在子页面的页面插件中

public class AttachmentUploadPlugin extends AbstractFormPlugin {

    @Override
    public void registerListener(EventObject e) {
        super.registerListener(e);
        this.addClickListeners("btnok");
    }

    @Override
    public void click(EventObject evt) {
        super.click(evt);
        Control source = (Control) evt.getSource();
        String sourceKey=source.getKey();
        //获取附件面板数据模型
        AttachmentPanel  attachmentPanel  =  this.getView().getControl("kdec_attachmentpanelap");
        //获取具体文件信息
        List<Map<String, Object>> attachmentData = attachmentPanel.getAttachmentData();
        HashMap<String, List<Map<String,Object>>> hashMap = new HashMap<>();
        hashMap.put("attach", attachmentData);
        //监听确定按钮
        if ("btnok".equals(sourceKey)) {
            this.getView().returnDataToParent(hashMap);
            this.getView().close();
        }
    }

}

        3.4 编写父页面插件,主要弹出子页面,接收子页面回传的数据插件类代码注册在父页面的页面插件中

public class AttachmentTransferPlugin extends AbstractFormPlugin {


    @Override
    public void registerListener(EventObject e) {
        super.registerListener(e);
        this.addItemClickListeners("kdec_toolbarap");
    }

    @Override
    public void itemClick(ItemClickEvent evt) {
        super.itemClick(evt);
        if("kdec_upload".equals(evt.getItemKey())){ //弹出子页面按钮标识
            FormShowParameter ShowParameter = new FormShowParameter();
            ShowParameter.setFormId("kdec_sub_enclosure");
            ShowParameter.setCloseCallBack(new CloseCallBack(this, "kded_attach"));
            ShowParameter.getOpenStyle().setShowType(ShowType.Modal);
            this.getView().showForm(ShowParameter);
        }
    }

    @Override
    public void closedCallBack(ClosedCallBackEvent closedCallBackEvent) {
        super.closedCallBack(closedCallBackEvent);
        if("kded_attach".equals(closedCallBackEvent.getActionId())) {
            if(closedCallBackEvent.getReturnData()!=null){
                HashMap<String, List<Map<String,Object>>> hashMap= (HashMap<String, List<Map<String, Object>>>) closedCallBackEvent.getReturnData();
                List<Map<String,Object>> retData=hashMap.get("attach");
                if(retData!=null && retData.size()>0){
                    AttachmentPanel panel = this.getControl("kdec_attachmentpanelap");
                    panel.upload(retData);
                    //刷新页面
                    this.getView().updateView("kdec_attachmentpanelap");
                }
            }
        }
    }

    
}

四、效果图

        4.1通过点击父页面名为(附件面板父页面)中【上传附件】按钮弹出子页面,在弹出的子页面上传附件后,点击确定回传信息

image.png

图4.1

        4.2点击【确定】后子页面关闭,父页面上会直接显示上传的附件如下图4.2所示

image.png

图4.2

五、开发环境版本 

        不限,本样例采用的轻量级环境,版本是: 苍穹版本号 COSMICV4.0.019.0  星瀚版本号 CONSTELLATIONV4.0.019.0

六、注意事项

        注意按钮标识、回传标识

七、参考资料

开发平台

学习成长中心

参考附件中的代码补丁

  1. 元数据直接在开发平台导入

  2. 源代码直接在开发工具idea/eclipse中导入


赞 3