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 事件,响应动态按钮的点击事件
推荐阅读