基础资料/单据实体的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());