金蝶云苍穹-插件开发(三)关于基础资料/单据实体的id

基础资料/单据实体的id

每个基础资料和单据的实体,都有一个id字段,这个id是其一个唯一性标识,就类似于这个实体的身份证号一样。通常,这个id用来找到指定的实体。这个id在代码中都是long类型接收的。

如果基础资料/单据里面有字段的类型是基础资料类型,在我们给它赋值的时候,这个字段要接收的值就是指定的实体的id值,这个id值的获取有时候显得很重要。

获取实体的id的方式

load加载

在load时,在加载的字段里加上一个名为id的字段。例:

DynamicObject dy = BusinessDataServiceHelper.loadSingle("abq2_stu_course",
                        "number,id",
                        (new QFilter("number", QCP.equals, abq2_number)).toArray());
                primaryKeyValue = dy.getLong("id");

getPkValue

也可以不用load加一个id字段,可以直接获取对应的DynamicObject类型实体对象的id

DynamicObject optionCourse = BusinessDataServiceHelper.loadSingle("abq2_stu_course",
                    "id," + //内码
                            "abq2_combofield1," + //星期
                            "abq2_classroom," + //教室
                            "abq2_textfield1," + //教师
                            "abq2_combofield," + //年级
                            "abq2_integerfield," + //课程人数
                            "abq2_integerfield1," + //已选人数
                            "abq2_mulcombofield",  //课节
                    new QFilter[]{new QFilter("id",QCP.equals,primaryKeyValue)});
            long pkid = (long)optionCourse.getPkValue();

这个pkid其实就是optionCourse这个实体对象对应的id值

获取当前行对应的实体的id值

在列表,报表,单据列表中,一行对应着一个实体。通常我们又会对指定的行对应的实体做指定的操作。在点击操作列、选中某行时,便要获取其当前行的实体的数据。此时便要用到获取当前行的id的操作。

列表

IListView list = (IListView) this.getView();
ListSelectedRow currentSelectedRowInfo = list.getCurrentSelectedRowInfo();
Object primaryKeyValue = currentSelectedRowInfo.getPrimaryKeyValue();

单据列表

BillList billlist = this.getControl("abq2_billlistap");
ListSelectedRow currentSelectedRowInfo = billlist.getCurrentSelectedRowInfo();
Object primaryKeyValue = currentSelectedRowInfo.getPrimaryKeyValue();

abq2_billlistap是单据列表的标识

报表

报表的获取当前行会更复杂,我没有找到对应的直接获取pkid的方法,我的方法是在报表的字段中加上一个映射对应实体的编码的字段,即这个字段的数据源字段是对应实体的编码字段。

再根据这个编码,去load对应的实体,再获取其id,例:

ReportList reportList = this.getControl("reportlistap");
Object primaryKeyValue = null;
int[] selectedRows = reportList.getEntryState().getSelectedRows();
            for (int selectedRow : selectedRows) {
                DynamicObject rowData = reportList.getReportModel().getRowData(selectedRow);
                String abq2_number = rowData.getString("abq2_number");
                DynamicObject dy = BusinessDataServiceHelper.loadSingle("abq2_stu_course",
                        "number,id",
                        (new QFilter("number", QCP.equals, abq2_number)).toArray());
                primaryKeyValue = dy.getLong("id");
                break;
            }

abq2_number指的是报表上的字段的字段名,其映射了对应实体的编码。

如果是像人员这种基础资料,如果要赋值为当前用户,可以直接使用现有的API获取当前用户的id,如下:

dynamicObject.set("creator",RequestContext.get().getCurrUserId());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会敲代码的熊mao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值