如何在一个动态表单展示两个单据的编辑界面并能一次性保存两个单据原创
金蝶云社区-丨Nick丨
丨Nick丨
11人赞赏了该文章 3432次浏览 未经作者许可,禁止转载编辑于2022年08月05日 15:49:59
封面

关键词:动态表单

一、需求

手里设计好了多张单据,但是想在同一个页面展示或者维护数据,类似关联表保存数据

二、思路与方案

通过showform展示多个 单据数据在一个页面,在一个页面点按钮获取到多单据的数据模型保存即可

三、实现过程

  1. 准备两张单据(:kdec_flexshowbill1,kdec_flexshowbill2,)、一张动态表单:kdec_flexapdemoshow

  2. 动态表单中添加两个 flex面板。调整页面样式

  3. 添加一个按钮用来点击保存

  4. 插件实现展示bill,和调用view中的保存 操作

  5. @Override
    	public void afterCreateNewData(EventObject e) {
    		super.afterCreateNewData(e);
    		//在指定flex中打开单据1
    		BillShowParameter showParameter = new BillShowParameter();
    		showParameter.setFormId("kdec_flexshowbill1");
    		showParameter.getOpenStyle().setShowType(ShowType.InContainer);
    		showParameter.getOpenStyle().setTargetKey("kdec_flexpanelap");
    		//自行组建pageId以便获取模型
    		String pageId1 = UUID.randomUUID().toString().replace("-", "") + 1;
    		this.getView().getPageCache().put("ap", pageId1);//将pageId缓存起来以便保存时候获取
    		showParameter.setPageId(pageId1);
    		this.getView().showForm(showParameter);//打开单据1,show在flex中
    		//在指定flex中打开单据2
    		BillShowParameter showParameter1 = new BillShowParameter();
    		showParameter1.setFormId("kdec_flexshowbill2");
    		showParameter1.getOpenStyle().setShowType(ShowType.InContainer);
    		showParameter1.getOpenStyle().setTargetKey("kdec_flexpanelap1");
    		String pageId2 = UUID.randomUUID().toString().replace("-", "") + 2;
    		showParameter1.setPageId(pageId2);
    		this.getView().getPageCache().put("ap1", pageId2);
    		this.getView().showForm(showParameter1);
    	}
    
    	@Override
    	public void click(EventObject evt) {
    		super.click(evt);
    		// 单据1 保存
    		String ap = this.getPageCache().get("ap");// 从缓存中 获取pageId
    		BillView view = (BillView) this.getView().getView(ap);// 通过pageId获取页面view
    		view.invokeOperation("save");// 直接调用单据保存操作
    		view.getModel().getValue("billno");// 也可以这样获取到单据数据做其他操作
    		// 单据2 保存
    		String ap1 = this.getPageCache().get("ap1");
    		BillView view1 = (BillView) this.getView().getView(ap1);
    		view1.invokeOperation("save");
    		view1.getModel().getValue("billno");
    	}

四、效果图

在表单操作保存

image.png


查看单据1的数据

image.png


查看单据2的数据

image.png

五、开发环境版本

3.0.004.25 | 3.0.004.25


六、注意事项

注意要在代码中创建不同的pageId,并存到不同缓存键中,否者可能 会保存到同一个单据里去哦!!

源码 与元数据在附件中,如果您觉得有帮助,请点赞呦【emoji】


七、参考资料

开发平台

学习成长中心


赞 11