操作插件,提交过滤原创
金蝶云社区-吴锐雄
吴锐雄
13人赞赏了该文章 2959次浏览 未经作者许可,禁止转载编辑于2021年10月08日 17:50:46

创作不易,如果文章对您有帮助,请为我点击一个朴实无华的赞^_^


使用操作插件,在单据列表界面,批量提交数据之前,对即将提交的数据做一个过滤。

把不符合条件的数据过滤掉,不对其进行提交操作。


实现步骤:

1.继承AbstractOperationServicePlugIn,创建并编写操作插件

2.在提交的操作代码上,注册操作插件


实现步骤详情:


1.创建并编写操作插件

准备对“数量”字段进行一个过滤,数量大于等于50的单据数据不允许提交

Image_20211008174947.png


创建插件,继承AbstractOperationServicePlugIn

image.png


如下代码,在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.注册插件

选择单据列表,选择提交按钮,右侧业务栏中选择操作代码

Image_20211008175003.png


选择“提交”操作栏,点击“修改”

image.png


选择“其他控制”,点击服务插件那一栏的右侧按钮,打开注册窗口

image.png


点击注册

image.png


填写完成的类路径

image.png


最后一直点击确定

image.png


效果:

image.png

image.png



赞 13