本文介绍了在开发平台中新增表单自定义操作的过程,包括进入模型扩展、定义操作、填写配置信息、设置元模型类型及编写表单层实现类代码。文章详细说明了操作定义中三个操作类的用途及编写注意事项,并展示了表单层实现类的代码示例,该代码遍历整数字段控件,根据字段值是否大于50返回相应提示。最后,文章提及了效果展示和源码学习建议。
最近尝试了利用 模型扩展可视化,新增了一个自定义操作。
对单据实体的自定义操作插件还有一些疑惑。
先写一篇文章做个总结。
注意:当前文章介绍如何新增一个表单操作,不涉及实体操作。
后续会补充自定义实体操作文章。
一、模型扩展
1.进入开发平台
2.进入新版开发平台
3.操作列表
左侧菜单栏,【模型扩展】【操作定义】
4.进入操作列表
二、定义操作
1.新增操作
2.操作类
这三个操作类是自定义操作的重点。
按我个人理解,
(1)表单层实现类:
MService Form 层执行类名,这个是必填的。
继承抽象类 FormOperate。
(2)操作层实现类:
MService OperationType 层执行类。
如果操作是一个实体操作,此项必填。
因为实体操作需要对 单据或者基础资料 进行增删改,所以需要给当前操作设置一个Operation层的实现类。
操作层实现类,需要继承抽象类 EntityOperateService。
注意:如果操作是一个实体操作,上面讲到的“表单层实现类”也需要换一个父类,不继承FormOperate,而是继承DefaultEntityOperate。
(3)WebAPI层实现类:
Web API 层运行时类名,如果业务设计到 WebApi,这一项必填。
继承抽象类 OperationApi。
4.填写其他配置信息
填写编码、名称、描述、生效范围
5.设置元模型类型
这个配置项的意思是,配置当前操作在哪些页面类型上可以被选中。
例如我配置了 动态表单模型、单据模型、基础资料模型。
那么在对应页面的设计器的操作列表中,点击新增,就可以新增到该操作,否则在新增列表中就没有该操作可以新增。
6.表单层实现类的代码
代码业务逻辑是,遍历当前全部整数字段控件,取字段值进行判断。
如果全部字段大于50,返回成功,并给出提示;否则返回失败,并提示。
当前不涉及实体操作,因此实现类派生自FormOperate。
package kd.ecos.custom; import kd.bos.dataentity.metadata.IDataEntityProperty; import kd.bos.entity.datamodel.IDataModel; import kd.bos.entity.operate.result.OperationResult; import kd.bos.entity.property.IntegerProp; import kd.bos.form.operate.FormOperate; import kd.bos.servicehelper.BusinessDataServiceHelper; import org.apache.http.util.TextUtils; import java.util.Map; public class CheckCountOperate extends FormOperate { @Override protected OperationResult invokeOperation() { IDataModel model = this.getView().getModel(); Map<String, IDataEntityProperty> dataEntityPropertyMap = model.getDataEntityType().getAllFields(); StringBuilder stringBuilder = new StringBuilder(); for (String key : dataEntityPropertyMap.keySet()) { if (dataEntityPropertyMap.get(key) instanceof IntegerProp) { IntegerProp integerProp = (IntegerProp)dataEntityPropertyMap.get(key); Integer i = (Integer) model.getValue(integerProp.getName()); if (i < 50) { if (stringBuilder.length() > 0) { stringBuilder.append(","); } stringBuilder.append("“" + integerProp.getDisplayName().getLocaleValue() + "”"); } System.out.println(); } } OperationResult result = new OperationResult(); String notification = stringBuilder.toString(); if (TextUtils.isEmpty(notification)) { getView().showSuccessNotification("计数成功,全部整数字段的值都大于50"); result.setMessage("计数成功"); result.setSuccess(true); } else { getView().showErrorNotification("计数失败,字段:" + notification + "的量小于50,不合格"); result.setMessage("计数失败"); result.setSuccess(false); } return result; } }
关于“操作”源码的学习和解析,大家感兴趣,可以去看一下copy操作,kd.bos.form.operate.Copy,有助于我们学习 表单层实现类 在苍穹的代码中是如何运行的。
三、效果展示
工具栏绑定自定义操作:“检查计数操作”
在2个整数字段中填值,点击按钮。
推荐阅读