如果文章对您有帮助,请为我点击一个朴实无华的赞^_^
以查询人员这个基础资料为例,查询单据,查询单据体。
如图,准备对bos_user这个页面进行查询,查询时使用的是页面的标识和页面的字段标识
注意:查询时不需要使用到数据库中的表名或者表的字段
以下是查询的代码
1.代码中使用了ORM对象去执行查询,返回的是DynamicObjectCollection一个list集合。
2.orm.query的参数:bos_user是页面的标识,id, name, number是字段标识。entryentity是单据体标识,entryentity.*是查单据体的全部, entryentity.dpt as dpt是查单据体的dpt字段并且设置别名为dpt。
这些字段可以在表单设计器中,选中大纲,查看左边的节点
3.QFilter对象是过滤条件,第1个参数"name"是字段标识;第2个参数QCP.like是操作符,类似于mysql中where的运算操作符,关于QFilter的操作符有多少种,可以去查看源码:kd.bos.orm.query.QCP接口;第3个参数是对照值,用法类似于mysql的where语句后面的对照值。
4.使用lambda语法遍历,由于lambda语法省略了参数类型的定义,所以lambda语法的参数名称建议:小驼峰+参数对象类型名称,这样可以增加代码可读性,例如遍历DynamicObjectCollection,参数命名建议使用dynamicObject,如果参数名称只是d、o之类的简单一个字母,其他开发者阅读代码时,会不知道o是什么对象类型
package kd.ecos.demo; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.form.plugin.AbstractFormPlugin; import kd.bos.orm.ORM; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import java.util.*; public class DemoTestPlugin extends AbstractFormPlugin { @Override public void beforeBindData(EventObject e) { super.beforeBindData(e); ORM orm = ORM.create(); // 普通查询 DynamicObjectCollection users1 = orm.query("bos_user", "id, name, number, entryentity.*, entryentity.dpt as dpt", null); // 增加QFilter过滤,把name字段含有"吴锐雄"的过滤出来 QFilter qFilter = new QFilter("name", QCP.like, "%吴锐雄%"); DynamicObjectCollection users2 = orm.query("bos_user", "id, name, number, entryentity.*, entryentity.dpt as dpt", qFilter.toArray()); // 遍历,打印日志 // 很多ISV伙伴用lambda去遍历数组或者列表,但是写法不规范。 // 如果使用lambda语法,由于lambda语法省略了参数类型的定义, // 所以参数名称建议:小驼峰+参数对象类型名称,这样可以增加代码可读性 // 例如遍历DynamicObjectCollection,参数命名建议使用dynamicObject,而不是d、o之类的简单一个字母 // 正确的遍历写法 users1.forEach(dynamicObject -> { System.out.println(dynamicObject.get("dpt")); }); // 错误的遍历写法,如果这么写,阅读代码的其他开发者可能会不知道o是什么对象类型 users2.forEach(o -> { System.out.println(o.get("name")); }); System.out.println(); } }
关于如何从零开始使用java插件,如何注册java插件,插件的各个回调事件,请关注生态圈,下载开发指南
https://dev.kingdee.com/index/docsNew/34f4b44b-0ced-4bbd-8421-251243949f02
推荐阅读