一、需求背景
两动态表单中分别包含一个附件面板控件。在某动态表单页面(后文简称:父页面)上点击按钮后弹出子动态表单页面(后文简称:子页面),子页面上有一【附件面板】控件,用户上传附件文件之后点击【确定】按钮,系统自动将所有附件回传至父页面上的【附件面板】中
二、思路与方案
在父页面上添加按钮,点击按钮后弹出子页面,因动态表单中上传的附件是一个放在缓存中的数据,关闭动态表单缓存中的数据会丢失,所以需要将子页面中【附件面板】的数据获取后传输到父页面【附件面板】。
三、实现过程
3.1首先创建一个动态表单(子页面)子页面名为(附件面板子页面)包含一个【附件面板】控件如下图3.1所示
图3.1
3.2然后创建另一个动态表单(父页面)父页面名为(附件面板父页面)中包含一个【上传附件】按钮、【附件面板】控件如下图3.2所示
图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通过点击父页面名为(附件面板父页面)中【上传附件】按钮弹出子页面,在弹出的子页面上传附件后,点击确定回传信息
图4.1
4.2点击【确定】后子页面关闭,父页面上会直接显示上传的附件如下图4.2所示
图4.2
五、开发环境版本
不限,本样例采用的轻量级环境,版本是: 苍穹版本号 COSMICV4.0.019.0 星瀚版本号 CONSTELLATIONV4.0.019.0
六、注意事项
注意按钮标识、回传标识
七、参考资料
参考附件中的代码补丁
元数据直接在开发平台导入
源代码直接在开发工具idea/eclipse中导入
附件面板回传附件面板.zip(9.09KB)
推荐阅读