奔走相告,模型扩展可视化工具上线!
【导语】
很多小伙伴会问,苍穹低代码开发平台中预置了大量了控件,但面对特殊或者个性化需求时,业务开发人员只能通过修改配置文件、增加插件的方式,实现新增或扩展控件。这样会带来很多问题:
代码运行在本地出现问题时,不利于排查
手工修改xml缺乏校验控制,出现过业务控件覆盖标准控件的问题
需要重复注册插件,开发效率低
缺少统一平台查看平台控件扩展情况,不能高度复用
那么如何可以更高效、更便捷的新增控件呢?
开发平台这次带来了,模型扩展可视化工具,接下来,小编为你详细介绍功能特性!
【适用版本】
该功能适用版本为苍穹V5.0
【特性展示】
模型扩展主要分为三大类,分别是元素、操作、规则,其中,
元素:包含元素属性,预置10+元素属性,包含文本、复选框、复杂对象等。
操作:包含操作,以及对校验操作数据合法性的校验器,与操作同步进行的操作服务。
规则:包含界面规则、业务规则。
以元素为例,下面我们通过实际案例,来看如何新建一个身份证控件吧!
【功能详情】
需求描述
添加一个身份证号字段,以便录入15位及18位身份证号时使用,自动校验身份证号长度合规性。
实现方案:
1. 在【模型扩展】-【元素】增加一个身份证号控件
2. 实现身份证号的校验逻辑
3. 在任意页面使用身份证控件
优点:一次实现,多次复用
操作步骤:
1、新增元数属性
通过可视化模型扩展工具,对字段元素属性进行扩展;新增复选框类型属性,作为开启校验身份证字段的复选框。
2、新增元素
通过可视化模型扩展工具,对元素进行扩展;
“
定义元素分为两种模式,新建元素、扩展元素,其中新建元素支持新建空白元素及复制系统预设元素:
1)新建空白元素:自定义元素属性
2)复制系统预设元素(推荐):复制预设元素全部属性,可对属性进行增删改操作。
3)扩展系统预设元素:扩展预设元素,可新增属性;不支持修改、删除预设属性及基本信息。
”
使用【复制系统预设元素】模式进行扩展,选择文本元素,修改相应信息,添加校验身份证的属性(步骤1),填入实现逻辑代码所属包名。
3、完成效果
可以看到,身份证控件,及“身份证”属性都已配置完成。
4、运行效果
实际的运行效果,拖入的身份证控件界面,在界面上的“身份证号”字段,当录入值不合法时,会给出“身份证号不合法”的提示。
5、控制插件
其中涉及到数据的控制脚本,字段设计时类继承自Field<T>,运行时类继承FieldEdit。
5.1 字段设计时实现类
#auth 王洪雷 package kd.bos.newdevportal.domaindefine.sample.Field; import kd.bos.dataentity.entity.SimplePropertyAttribute; import kd.bos.entity.property.TextProp; import kd.bos.form.field.FieldEdit; import kd.bos.metadata.entity.commonfield.TextField; /** * 字段设计时实现类 * 【元素】 配置的 所属包名+编码 * 命名规范 开发商标识_类名[Field] */ public class kdtest_IdCard extends TextField { private boolean idcardval; @SimplePropertyAttribute public boolean getIdcardval() { return idcardval; } public void setIdcardval(boolean idcardval) { this.idcardval = idcardval; } @Override protected FieldEdit createServerEditor() { kdtest_IdCardEdit edit = new kdtest_IdCardEdit(); return edit; } public kdtest_IdCardProp createDynamicProperty() { kdtest_IdCardProp idCardProp = new kdtest_IdCardProp(); idCardProp.setIdcardval(this.getIdcardval()); return idCardProp; } @Override protected void setDynamicProperty(TextProp prop) { super.setDynamicProperty(prop); ((kdtest_IdCardProp) prop).setIdcardval(this.getIdcardval()); } }
5.2 字段属性类
package kd.bos.newdevportal.domaindefine.sample.Field; import java.util.List; import kd.bos.dataentity.entity.DataEntityTypeAttribute; import kd.bos.dataentity.utils.StringUtils; import kd.bos.entity.datamodel.IDataModel; import kd.bos.entity.property.TextProp; import kd.bos.entity.validate.AbstractValidator; import kd.bos.exception.KDBizException; /** * 字段属性类 * 命名规范 开发商标识_类名[Prop] */ @DataEntityTypeAttribute(name = "kd.bos.newdevportal.domaindefine.sample.Field.kdtest_IdCardProp") public class kdtest_IdCardProp extends TextProp { public boolean isIdcardval() { return idcardval; } public void setIdcardval(boolean idcardval) { this.idcardval = idcardval; } boolean idcardval; @Override public List<AbstractValidator> getValidators() { return super.getValidators(); } @Override public String getClientType() { return super.getClientType(); } @Override public void setFieldValue(IDataModel model, Object dataEntity, Object value) { super.setFieldValue(model, dataEntity, value); if (StringUtils.isNotBlank(value) && this.isIdcardval()) { //假设身份证号是15位或者18位是合法的 boolean isIdcardValue = false; int length = value.toString().length(); if (length == 15 || length == 18) { isIdcardValue = true; } if (!isIdcardValue) { throw new KDBizException("身份证号不合法!"); } } } }
5.3 字段运行时实现类
package kd.bos.newdevportal.domaindefine.sample.Field; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import kd.bos.dataentity.entity.DataEntityTypeAttribute; import kd.bos.dataentity.metadata.IDataEntityProperty; import kd.bos.dataentity.utils.StringUtils; import kd.bos.form.BindingContext; import kd.bos.form.IClientViewProxy; import kd.bos.form.field.TextEdit; /** * 字段运行时实现类 * 命名规范 开发商标识_类名[Edit ] */ @DataEntityTypeAttribute(name = "kd.bos.newdevportal.domaindefine.sample.Field.kdtest_IdCardEdit") public class kdtest_IdCardEdit extends TextEdit { @Override protected boolean postDataCheck(Object value) { if (StringUtils.isNotBlank(value)) { //假设身份证号是15位或者18位是合法的 boolean isIdcardValue = false; int length = value.toString().length(); if (length == 15 || length == 18) { isIdcardValue = true; } showFieldTips(isIdcardValue); } return super.postDataCheck(value); } // 字段需要 开启“即时触发值更新” // 根据身份证号字段输入值是否通过校验,设置字段提示的显示或者隐藏 private void showFieldTips(boolean isHidden) { IClientViewProxy proxy = this.view.getService(IClientViewProxy.class); List<Object> paras = new ArrayList(); Map<String, Object> ctl = new HashMap(); ctl.put("success", isHidden); ctl.put("fieldKey", this.key); ctl.put("tip", "身份证号不合法"); paras.add(ctl); proxy.addAction("showFieldTips", paras); } }
【亮点价值】
多:提供丰富控件属性,增强个性化能力
快:自动编写配置文件,支持跨平台导入、导出,提高开发效率
好:提供统一注册平台,可视化建模,清晰查看元模型结构,提升开发体验感
省:一次注册,生成全平台通用控件,无需考虑升级被覆盖,大大节省开发时长
【相关链接】
其他详细使用指南:
视频介绍:https://developer.kingdee.com/school/detail/330751073365658624?productLineId=29&lang=zh-CN
【划重点】
模型扩展工具支持通过可视化形式,新建、扩展元模型组件,包含元素、操作、规则。大大提供开发效率,及使用体验。
奔走相告,模型扩展可视化工具上线!
本文2024-09-23 00:17:37发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-138542.html