基礎資料/單據實體的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());