ORM使用,查询人员基础资料,查询单据体,遍历原创
金蝶云社区-吴锐雄
吴锐雄
16人赞赏了该文章 4,150次浏览 未经作者许可,禁止转载编辑于2021年03月11日 15:44:32

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


以查询人员这个基础资料为例,查询单据,查询单据体。

image.png


如图,准备对bos_user这个页面进行查询,查询时使用的是页面的标识和页面的字段标识

注意:查询时不需要使用到数据库中的表名或者表的字段

image.png


以下是查询的代码

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();

    }

}

image.png

image.png

image.png


关于如何从零开始使用java插件,如何注册java插件,插件的各个回调事件,请关注生态圈,下载开发指南

https://dev.kingdee.com/index/docsNew/34f4b44b-0ced-4bbd-8421-251243949f02


赞 16