操作插件,提交过滤原创
14人赞赏了该文章
3,582次浏览
编辑于2021年10月08日 17:50:46
创作不易,如果文章对您有帮助,请为我点击一个朴实无华的赞^_^
使用操作插件,在单据列表界面,批量提交数据之前,对即将提交的数据做一个过滤。
把不符合条件的数据过滤掉,不对其进行提交操作。
实现步骤:
1.继承AbstractOperationServicePlugIn,创建并编写操作插件
2.在提交的操作代码上,注册操作插件
实现步骤详情:
1.创建并编写操作插件
准备对“数量”字段进行一个过滤,数量大于等于50的单据数据不允许提交
创建插件,继承AbstractOperationServicePlugIn
如下代码,在beforeExecuteOperationTransaction事件中,获取kdec_integerfield1字段的值,
判断是否符合数量小于50,过滤,然后给BeforeOperationArgs设置一个新的数组
package kd.ecos.demo; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.entity.ExtendedDataEntity; import kd.bos.entity.plugin.AbstractOperationServicePlugIn; import kd.bos.entity.plugin.AddValidatorsEventArgs; import kd.bos.entity.plugin.PreparePropertysEventArgs; import kd.bos.entity.plugin.args.BeforeOperationArgs; import kd.bos.entity.plugin.args.BeginOperationTransactionArgs; import kd.bos.entity.validate.AbstractValidator; import java.util.ArrayList; public class DemoTextLineOperationPlugin extends AbstractOperationServicePlugIn { /** * 在onAddValidators添加校验器事件里面,要用到哪些字段,就要先在onPreparePropertys里加进去 * 在onAddValidators里面,调用getDataEntities(),能获取到主数据实体的数组 * 不然调用getDataEntities()时可能会没有这些字段(只是可能),一般情况下getDataEntities()是能获取到数据和全部字段的 */ @Override public void onPreparePropertys(PreparePropertysEventArgs e) { e.getFieldKeys().add("kdec_textile_name"); e.getFieldKeys().add("kdec_integerfield1"); e.getFieldKeys().add("billno"); } @Override public void beforeExecuteOperationTransaction(BeforeOperationArgs e) { ArrayList<DynamicObject> arrayList = new ArrayList(); DynamicObject[] dynamicObjects = e.getDataEntities(); for (DynamicObject dynamicObject : dynamicObjects) { if (dynamicObject.getInt("kdec_integerfield1") < 50) { arrayList.add(dynamicObject); } } DynamicObject[] results = arrayList.toArray(new DynamicObject[arrayList.size()]); e.setDataEntities(results); } }
2.注册插件
选择单据列表,选择提交按钮,右侧业务栏中选择操作代码
选择“提交”操作栏,点击“修改”
选择“其他控制”,点击服务插件那一栏的右侧按钮,打开注册窗口
点击注册
填写完成的类路径
最后一直点击确定
效果:
赞 14
14人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!