如何通过弹出页面将基础资料类型、多类别基础资料的值赋值到单据页面上原创
金蝶云社区-闫方亮
闫方亮
3人赞赏了该文章 1613次浏览 未经作者许可,禁止转载编辑于2022年04月15日 14:06:50

关键词:多类别基础资料控件、基础资料类型控件


一、需求背景

        1.1在页面上通过弹出页面将基础资料类型、多类别基础资料的值赋值到单据页面上。

        1.2在列表界面选中某一行数据点击按钮填入需要的基础资料类型、多类别基础资料值。

二、实现方案

        2.1先新建一个动态表单,在动态表单上添加基础资料类型控件、多类别基础资料控件,添加插件类,将选择的数据回传给父单据页面

        2.2新建一个单据页面,在页面上添加基础资料类型控件、多类别基础资料控件,将这两个控件设置其锁定性(根据不同的状态),添加一个填入信息的按钮,通过插件代码打开上一步新建的动态表单,接收动态表单回传的数据。

        2.3在单据列表界面上添加按钮,通过插件类打开动态表单界面,通过动态表单页面回传数据赋值到列表上。

三、实现过程

        3.1创建一个动态表单页面,在页面上添加基础资料类型控件、多类别基础资料控件,在基础资料类型控件的基础资料类型上绑定供应商如下图1所示:

image.png

图1

        3.2创建一个单据页面,在单据页面上添加基础资料类型控件、多类别基础资料控件,然后添加一个按钮,用于打开动态表单页面,通过插件接收从动态表单传过来的数据,如下图2所示:

image.png

图2

        3.3编写动态表单插件类,将数据提交后传入到单据页面上,将下面代码绑定到动态表单的界面插件上。

public class ItemClassControlFormPlugin extends AbstractFormPlugin{
   @Override
   public void registerListener(EventObject e) {
      // TODO Auto-generated method stub
      super.registerListener(e);
      this.addClickListeners("btnok");
   }
   @Override
   public void click(EventObject evt) {
      // TODO Auto-generated method stub
      super.click(evt);
      Control con = (Control) evt.getSource();
      if(StringUtils.equals(con.getKey(),"btnok")) {
         String type = (String) this.getModel().getValue("kdec_itemclasstypefield");
         DynamicObject obj = (DynamicObject) this.getModel().getValue("kdec_itemclassfield");
         HashMap<String, String> returnDate = new HashMap<>();
         returnDate.put("basedata_type", type);
         if(obj!=null) {
            returnDate.put("basedata_pk", obj.getString("id"));
         }
         this.getView().returnDataToParent(returnDate);
         this.getView().close();
      }
   }

}

        3.4编写单据界面上的插件类,通过插件类弹出动态表单界面,接收动态表单回传的数据,将下面的插件代码添加到单据页面的页面插件上。

public class PurchaseFormPlugin extends AbstractFormPlugin{
   @Override
   public void registerListener(EventObject e) {
      // TODO Auto-generated method stub
      super.registerListener(e);
      this.addItemClickListeners("tbmain");
   }
   @Override
   public void itemClick(ItemClickEvent evt) {
      // TODO Auto-generated method stub
      super.itemClick(evt);
      String key = evt.getItemKey();
      if (StringUtil.equals("kdec_baritemap", key)) {
         this.showForm();
      }
   }
   @Override
   public void closedCallBack(ClosedCallBackEvent closedCallBackEvent) {
      // TODO Auto-generated method stub
      super.closedCallBack(closedCallBackEvent);
      if (StringUtils.equals(closedCallBackEvent.getActionId(), "itemdata_callback")
            && closedCallBackEvent.getReturnData() != null) {
         HashMap<String, String> returnDate =(HashMap<String, String>) closedCallBackEvent.getReturnData();
         String type = returnDate.get("basedata_type");
         String pk = returnDate.get("basedata_pk");
         //类型
         this.getModel().setValue("kdec_itemclasstypefield", type);
         this.getModel().setValue("kdec_itemclassfield", pk);
      }
   }
   public void showForm() {
      FormShowParameter param = new FormShowParameter();
      param.setFormId("kdec_testbase");
      param.getOpenStyle().setShowType(ShowType.Modal);
      param.setCloseCallBack(new CloseCallBack(this, "itemdata_callback"));
      this.getView().showForm(param);
   }
}

        3.5将单据切换到单据列表界面,在单据列表界面添加按钮,列表上添加基础资料类型、多类别基础资料名称字段,如下图3所示:

image.png

图3

        3.6编写列表界面插件,通过插件接收动态表单传入的数据,将下面的插件类注册到单据列表插件中。

public class PurchaseListPlugin extends AbstractListPlugin {
   @Override
   public void registerListener(EventObject e) {
      // TODO Auto-generated method stub
      super.registerListener(e);
      this.addItemClickListeners("toolbarap");
   }
   @Override
   public void itemClick(ItemClickEvent evt) {
      // TODO Auto-generated method stub
      super.itemClick(evt);
      String key = evt.getItemKey();
      if (StringUtil.equals("kdec_baritemap", key)) {
         BillList billList = this.getControl("billlistap");
         ListSelectedRowCollection selectedRows = billList.getSelectedRows();
         if(selectedRows!=null&&selectedRows.size()>0) {
            this.showForm();
         }else {
            this.getView().showTipNotification("请选择要填入供应商的数据!!");
         }
      }
   }
   @Override
   public void closedCallBack(ClosedCallBackEvent closedCallBackEvent) {
      // TODO Auto-generated method stub
      super.closedCallBack(closedCallBackEvent);
      if (StringUtils.equals(closedCallBackEvent.getActionId(), "itemdata_callback")
            && closedCallBackEvent.getReturnData() != null) {
         HashMap<String, String> returnDate =(HashMap<String, String>) closedCallBackEvent.getReturnData();
         String type = returnDate.get("basedata_type");
         String pk = returnDate.get("basedata_pk");
         BillList billList = this.getView().getControl("billlistap");
         ListSelectedRowCollection selectedRows = billList.getSelectedRows();
         Object id = selectedRows.get(0).getPrimaryKeyValue();
         DynamicObject obj = BusinessDataServiceHelper.loadSingle(id, "kdec_purcharebill");
         //多类别基础资料类型
         obj.set("kdec_itemclasstypefield", type);
         //多类别基础资料
         obj.set("kdec_itemclassfield", pk);
         Object[] o = SaveServiceHelper.save(new DynamicObject[] {obj});
         //如果用SaveServiceHelper.saveOperate,将pk换成BusinessDataServiceHelper.loadSingle(pk, type);
         if(o!=null&&o.length>0) {
            billList.refresh();
         }
      }
   }

   public void showForm() {
      FormShowParameter param = new FormShowParameter();
      param.setFormId("kdec_testbase");
      param.getOpenStyle().setShowType(ShowType.Modal);
      param.setCloseCallBack(new CloseCallBack(this, "itemdata_callback"));
      this.getView().showForm(param);
   }
}

四、效果图

        4.1动态表单展示的效果图如下图4.1所示:

image.png

图4.1

        4.2单据页面上添加按钮展示的效果图如下图4.2所示:

image.png

图4.2

        4.3在单据列表界面上添加按钮后,点击打开的效果图如图4.3所示:

image.png

图4.3

五、开发环境版本

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

六、注意事项

        编写插件类的时候一定要注意对应的标识,注意插件类注册的位置。

七、参考资料

开发平台

学习成长中心

参考附件中的代码补丁

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

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

赞 3