动态添加字段:loadCustomControlMetas 事件原创
金蝶云社区-zqin
zqin
0人赞赏了该文章 361次浏览 未经作者许可,禁止转载编辑于2021年02月08日 10:15:34

see: https://dev.kingdee.com/index/docsNew/27ce9c6e-d44d-44fc-9e93-abda4b76de37


loadCustomControlMetas 事件

事件触发时机

显示界面前,构建界面显示参数时,触发此事件;

插件可以在此事件修改显示参数,向前端动态增加控件。

特别说明:

  • 动态添加控件时,还需要同步处理onGetControl事件,向表单添加控件编程模型实例,并侦听控件的插件事件;

  • 动态增加字段,则还需要同步处理getEntityType, createNewData, beforeBindData事件,调整后台数据模型及数据包。

  • 需要同步处理的事件:

    • public void loadCustomControlMetas(LoadCustomControlMetasArgs e) :向前端浏览器界面输出动态控件的元数据;

    • public void onGetControl(OnGetControlArgs e):向后台视图模型,输出动态控件的编程模型实例,并侦听控件的事件

    • public void getEntityType(GetEntityTypeEventArgs e):向界面主实体模型,动态注册新的属性对象,存储动态添加的字段值;

    • public void createNewData(BizDataEventArgs e):基于修改后的实体模型,创建界面数据包,包含动态添加的字段值;

    • public void beforeBindData(EventObject e):向后台视图模型,添加动态字段的控件编辑模型;随后,系统将基于这些新添加的字段编辑模型(FieldEdit),进行数据绑定。如果不处理这个事件,动态添加的字段值,显示不出来。

代码示例

package kd.bos.plugin.sample.dynamicform.pcform.form.template;import java.util.EventObject;import kd.bos.entity.datamodel.events.BizDataEventArgs;import kd.bos.entity.datamodel.events.GetEntityTypeEventArgs;import kd.bos.form.events.LoadCustomControlMetasArgs;import kd.bos.form.plugin.AbstractFormPlugin;public class LoadCustomControlMetas extends AbstractFormPlugin {	@Override
	public void loadCustomControlMetas(LoadCustomControlMetasArgs e) {		super.loadCustomControlMetas(e);		// TODO 在此修改显示参数,向前端动态添加控件配置
	}	@Override
	public void getEntityType(GetEntityTypeEventArgs e) {		// TODO 在此修改实体模型,增加属性
	}	@Override
	public void createNewData(BizDataEventArgs e) {		// TODO 在此基于调整后的实体模型,创建界面数据包
	}	
	@Override
	public void beforeBindData(EventObject e) {		// TODO 在此向界面编程模型,动态添加字段编程模型(FieldEdit)
	}	@Override
	public void onGetControl(OnGetControlArgs e) {		// TODO 在此创建动态控件的实例,并捕获控件事件
	}
}

参数说明

  • LoadCustomControlMetasArgs e

    • Object getSource():FormShowParameter,显示参数对象,包含了待显示界面的标识

    • List<Map<String, Object>> getItems(): 动态添加到前端的控件配置集合;

应用示例

案例说明:

  • 在界面加载时,向界面添加字段与控件:

    • 向单据头添加一个新的文本字段autotext1,字段值由插件填写;

    • 向单据体添加一个新的文本字段autotext2,字段值由插件填写;

    • 添加一个新的按钮 autobutton1;

  • 用户点击动态添加的按钮时,显示提示信息

实现方案:

  • 在界面上,增加一个容器面板:myfieldcontainer,作为容器,包含自动添加的字段、控件

  • 捕获 loadCustomControlMetas 事件,向容器控件添加新的字段、控件

  • 捕获 getEntityType 事件,向主实体,注册添加的文本属性

  • 捕获 createNewData 事件,自行构建界面数据包

  • 捕获 beforeBindData 事件,输出自定义字段值到前端界面

  • 捕获 onGetControl 事件,输出动态添加的字段、按钮的控件编程模型

  • 捕获 click 事件,响应动态按钮的点击事件


赞 0