奔走相告,模型扩展可视化工具上线!

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

奔走相告,模型扩展可视化工具上线!

【导语】

    很多小伙伴会问,苍穹低代码开发平台中预置了大量了控件,但面对特殊或者个性化需求时,业务开发人员只能通过修改配置文件、增加插件的方式,实现新增或扩展控件。这样会带来很多问题:

    • 代码运行在本地出现问题时,不利于排查

    • 手工修改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);
    }
  }


【亮点价值】

    多:提供丰富控件属性,增强个性化能力

    快:自动编写配置文件,支持跨平台导入、导出,提高开发效率

    好:提供统一注册平台,可视化建模,清晰查看元模型结构,提升开发体验感

    省:一次注册,生成全平台通用控件,无需考虑升级被覆盖,大大节省开发时长

 


【相关链接

其他详细使用指南:模型扩展可视化工具开发指南v1.1.pdf

视频介绍:https://developer.kingdee.com/school/detail/330751073365658624?productLineId=29&lang=zh-CN

【划重点】

    模型扩展工具支持通过可视化形式,新建、扩展元模型组件,包含元素、操作、规则。大大提供开发效率,及使用体验。


奔走相告,模型扩展可视化工具上线!

【导语】 很多小伙伴会问,苍穹低代码开发平台中预置了大量了控件,但面对特殊或者个性化需求时,业务开发人员只能通过修改配置文件、增...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息