动态表单插件-数据模型

1 插件介绍
动态表单界面插件可以通过系统封装的表单数据模型,访问界面数据。动态表单插件数据模型包括:
数据模型接口/实现类
主实体模型
数据包
2 插件接口和实现类
动态表单界面数据模型接口为IDataModel,提供了各种控制表单数据的方法:
package kd.bos.entity.datamodel;
public interface IDataModel extends ISupportInitialize, IEntryOperate, IDataProvider {
动态表单的数据模型实现类为FormDataModel,实现了接口IDataModel的方法:
package kd.bos.mvc.form;
public class FormDataModel extends AbstractFormDataModel{package kd.bos.entity.datamodel;
public abstract class AbstractFormDataModel implements IDataModel, IRefrencedataProvider {
插件可以通过如下代码,获取到动态表单界面的数据模型实例:
IDataModel model = this.getModel();
3 功能方法及使用
动态表单数据模型接口IDataModel,定义了很多方法,下表列出插件部分方法:
方法 | 说明 |
getDataEntityType | 获取运行时表单实体元数据对象,又称为主实体模型; 通过表单主实体模型,可以或者界面上包含了那些单据体、字段 |
getProperty | 获取运行时字段元数据对象,又称为实体的属性对象 |
createNewData | 根据表单主实体模型,创建表单新的数据包,字段填写好默认值 |
getDataEntity | 获取表单数据包 |
getDataEntity(boolean includeEntry) | 获取页面的完整数据包(包含所有分录) |
updateCache | 提交当前表单数据包到缓存 |
getValue | 获取字段值 |
setValue | 设置字段值 |
setItemValueByNumber | 根据基础资料的编码,设置基础资料字段值 |
setItemValueByID | 根据基础资料的内码,设置基础资料字段值 |
getContextVariable | 获取上下文变量 |
putContextVariable | 添加上下文变量 |
removeContextVariable | 删除上下文变量 |
addDataModelListener | 订阅模型相关事件 |
addDataModelChangeListener | 订阅模型改变事件 |
4 主实体模型
动态表单设计完毕,系统会根据表单字段结构,为表单创建一个运行时元数据对象,又称为表单主实体模型MainEntityType。
说明:
主实体模型会被缓存,请勿在插件中直接修改主实体模型内容,以免串账;
业务需求必须动态修改主实体模型时,只能修改复制品。
4.1 属性对象
表单上的单据体、字段,都会转为属性对象DynamicProperty,分为如下三类:
简单值属性:SimpleProperty,对应普通字段;
复杂值属性:ComplexProperty,对应基础资料字段,关联基础资料主实体RefEntityType,嵌套包含基础资料属性;
集合值属性:CollectionProperty,对应单据体等分录,关联到分录子实体EntryType,嵌套包含分录属性。
4.2 从属关系
各属性对象之间,会按照表单设计,具有层级从属关系;
复杂值、集合值属性对象,会关联子实体,继续包含下层属性对象(字段、子单据体等)。
4.3 常用方法
主实体模型MainEntityType部分常用方法如下:
方法 | 说明 |
getAllEntities | 全部子实体 |
getAllFields | 全部字段,不包括系统自动注册的属性对象,如主键 |
getMainOrg | 主业务组织标识,可能为null |
getAppId | 业务应用Id |
getPermissionControlType | 功能权限控制配置 |
MainEntityType的超类EntityType提供的常用方法如下:
方法 | 说明 |
findProperty | 查找属性,会遍历本实体以及子实体 |
EntityType的超类DynamicType提供的常用方法如下:
方法 | 说明 |
getName | 实体的标识 |
getDisplayName | 实体的标题 |
getDBRouteKey | 分库标识 |
getPrimaryKey | 主键 动态表单,与物理表格无关,没有主键 |
getProperties | 本实体的属性对象集合,不包括子实体的属性 |
getAlias | 物理表格名称 动态表单不与物理表格关联,此属性为空; 单据、基础资料的主实体,此属性存储单据表格名 |
isDbIgnore | 是否关联物理表格 |
registerSimpleProperty | 注册新的简单值属性,如文本、数值、日期等 |
registerComplexProperty | 注册新的复杂值属性,如基础资料 |
registerCollectionProperty | 注册新的集合值属性,如单据体 |
createInstance | 基于本实体模型,创建空白的数据包(DynamicObject) |
4.4 主实体模型示例
下例简单的演示了如何使用MainEntityType的方法(演示代码没有实际的业务意义,仅供参考):
package kd.bos.plugin.sample.dynamicform.pcform.form.bizcase;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.LocaleString;
import kd.bos.dataentity.metadata.IDataEntityProperty;
import kd.bos.entity.MainEntityType;
import kd.bos.form.plugin.AbstractFormPlugin;
public class MainEntityTypeSample extends AbstractFormPlugin {
private void useMainEntityType(){
// 获取当前表单的主实体模型
MainEntityType mainEntityType = this.getModel().getDataEntityType();
// 基于表单主实体模型,创建空的数据包(多种方法)
DynamicObject dataEntity1 = new DynamicObject(mainEntityType);
DynamicObject dataEntity2 = (DynamicObject)mainEntityType.createInstance();
// 获取主实体部分属性值
String entityNumber = mainEntityType.getName(); // 实体标识
LocaleString entityCaption = mainEntityType.getDisplayName(); // 标题,支持多语言
String tableName = mainEntityType.getAlias(); // 物理表格
boolean isDbIgnore = mainEntityType.isDbIgnore(); // 有没有关联物理表格
String dbRouteKey = mainEntityType.getDBRouteKey(); // 分库标识
String bizAppId = mainEntityType.getAppId(); // 业务应用标识
// 获取单据头上的字段属性(多种方法)
IDataEntityProperty billNoProp1 = mainEntityType.getProperties().get("billno");
IDataEntityProperty billNoProp2 = mainEntityType.getProperty("billno");
IDataEntityProperty billNOProp3 = mainEntityType.findProperty("billno");
// 获取单据体上的字段属性(多种方法)
IDataEntityProperty bdProp1 = mainEntityType.getAllEntities().get("entryentity").getProperty("basedatafield1");
IDataE动态表单插件-数据模型
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



