那么这时候我会确定这个功能的流程是用户选中数据——点击按钮——修改选中数据的字段值——字段列刷新。这样一来就可以确定事件触发页面的页面类型单据列表类型触发时机用户点击按钮之后事件的逻辑获取到用户选择的数据之后批量修改数据的字段值最后刷新页面。二、新建插件类在IDEA中新建一个项目在项目的对应plugin路径下新建一个插件类新建时选择继承的插件类名与继承的插件类型例如1.我的插件类为页面插件所以选择plugin目录下的form文件夹新建插件类右键点击form文件夹点击新建选择金蝶插件的继承插件2.命名插件类并选择继承的插件类类型这里我是列表页面插件于是我选择标准单据列表插件类型新建后的插件类内容package ***.plugin.other; import kd.bos.list.plugin.AbstractListPlugin; import kd.sdk.plugin.Plugin; /** * 标准单据列表插件 */ public class teacherListPlugin extends AbstractListPlugin implements PLugin { }3.编写代码实现事件的逻辑3.1事件按钮添加因为我的插件事件需要用户点击按钮来触发所以我在页面上添加了两个新的按钮状态正常按钮与数量0按钮并将按钮的操作代码选择为dothing空操作操作后刷新字段一个选择为数量qty一个选择为status3.2编写代码因为我的事件在用户点击对应按钮后触发所以首先注册两个按钮的点击监听事件添加工具栏按钮点击监听的事件为addItemClickListeners在生命周期registerListener中添加private static final String FID_TOOLBAR toolbar;//默认的工具栏标识 Override public void registerListener(EventObject e) { super.registerListener(e); this.addItemClickListeners(FID_TOOLBAR);// 添加工具栏按钮点击的监听事件监听的工具栏为字段标识对应的工具栏 }插件类全代码package ***.plugin.other; import kd.bos.list.plugin.AbstractListPlugin; import kd.sdk.plugin.Plugin; import java.util.EventObject; /** * 标准单据列表插件 */ public class teacherListPlugin extends AbstractListPlugin implements Plugin { private static final String toolbar toolbar;//默认的工具栏标识 Override public void registerListener(EventObject e) { super.registerListener(e); this.addItemClickListeners(toolbar);// 添加工具栏按钮点击的监听事件监听的工具栏为字段标识对应的工具栏 } }然后注册两个按钮的监听事件private static final String statusbtn statusbtn;//状态正常按钮的对应字段标识 private static final String qtybtn qtybtn;//数量0按钮的对应字段标识 Override public void itemClick(ItemClickEvent evt) { if (statusbtn.equals(evt.getItemKey())) {//监听状态正常按钮的点击事件 status();//状态正常事件逻辑处理方法 } else if (qtybtn.equals(evt.getItemKey())) {//监听数量0按钮的点击事件 qty();//数量重置为0事件逻辑处理方法 } } private void status(){//状态正常事件逻辑 } private void qty(){//数量0事件逻辑 }插件类全部代码package ***.plugin.other; import kd.bos.form.control.events.ItemClickEvent; import kd.bos.list.plugin.AbstractListPlugin; import kd.sdk.plugin.Plugin; import java.util.EventObject; /** * 标准单据列表插件 */ public class teacherListPlugin extends AbstractListPlugin implements Plugin { private static final String toolbar toolbar;//默认的工具栏标识 private static final String statusbtn statusbtn;//状态正常按钮的对应字段标识 private static final String qtybtn qtybtn;//数量0按钮的对应字段标识 Override public void registerListener(EventObject e) { super.registerListener(e); this.addItemClickListeners(toolbar);// 添加工具栏按钮点击的监听事件监听的工具栏为字段标识对应的工具栏 } Override public void itemClick(ItemClickEvent evt) { if (statusbtn.equals(evt.getItemKey())) {//监听状态正常按钮的点击事件 status();//状态正常事件逻辑处理方法 } else if (qtybtn.equals(evt.getItemKey())) {//监听数量0按钮的点击事件 qty();//数量重置为0事件逻辑处理方法 } } private void status(){//状态正常事件逻辑 } private void qty(){//数量0事件逻辑 } }然后开始编写事件逻辑方法补充状态字段的字段标识为status控件类型为下拉列表状态正常的对应值为0数量字段的字段标识为qty控件类型为整数状态正常事件private void status(){//状态正常事件逻辑 ListSelectedRowCollection selectedRows this.getSelectedRows();//获取当前列表选中行的索引 if (selectedRows null || selectedRows.isEmpty()) {//校验选中行数量是否为空为空则停止事件并提示 this.getView().showTipNotification(请先选择要操作的数据); return; } //根据选中行的索引获取对应数据的主键值 ListLong ids new ArrayList(); for(ListSelectedRow row : selectedRows){ ids.add((Long)row.getPrimaryKeyValue()); } //根据获取到的对应事件主键值批量查询获取数据 DynamicObject[] datas BusinessDataServiceHelper.load(teacher,//第一个参数要查询数据的表单的标识 id,number,name,status,//第二个参数要查询的数据的属性名 new QFilter[]{new QFilter(id, QCP.in,ids)}//第三个参数要查询的数据的过滤条件 ); //遍历数据数组对数据的对应字段的值进行修改 for (DynamicObject data : datas){ data.set(status,0);//正常状态的对应值为0 } SaveServiceHelper.save(datas);//保存修改后的结果 this.getView().invokeOperation(refresh);//刷新页面 }数量0事件ListSelectedRowCollection selectedRows this.getSelectedRows();//获取当前列表选中行的索引 if (selectedRows null || selectedRows.isEmpty()) {//校验选中行数量是否为空为空则停止事件并提示 this.getView().showTipNotification(请先选择要操作的数据); return; } //根据选中行的索引获取对应数据的主键值 ListLong ids new ArrayList(); for(ListSelectedRow row : selectedRows){ ids.add((Long)row.getPrimaryKeyValue()); } //根据获取到的对应事件主键值批量查询获取数据 DynamicObject[] datas BusinessDataServiceHelper.load(teacher,//第一个参数要查询数据的表单的标识 id,number,name,qty,//第二个参数要查询的数据的属性名 new QFilter[]{new QFilter(id, QCP.in,ids)}//第三个参数要查询的数据的过滤条件 );