當寫 custom Query Range 的時候, 可以使用任何一個 Table 的 Field 來取得 querybuildrange, 然後 querybuildrange 的 value 可以跟用來取得 querybuildrange 的 Field 豪不相關, 你可以使用通用的 field 來去得, 譬如說 RecId 或是 DataAreaId. 下面的例子使用, RecId 取得 querybuildrange 然後用 query 的 field 卻是 AccountNum 以及 Name
qbr = qbd.addRange(FieldNum(CustTable, RecId));
qbr.value(strFmt('((%1 == "4000") || (%2 == "Bob"))',
fieldStr(CustTable, AccountNum),
fieldStr(CustTable, Name)));
==================================================================
QueryBuild Range 裡面使用 OR 的例子:
例子1: 使用 ,
Query q;
QueryBuildDataSource qbd;
QueryBuildRange qbr;
q = new Query();
qbd = q.addDataSource(TableNum(CustTable));
qbr = qbd.addRange(FieldNum(CustTable, AccountNum));
qbr.value('100, 200');
結果:
SELECT * FROM CustTable WHERE ((((AccountNum == "100") || (AccountNum == "200"))))
例子2:
qbr = qbd.addRange(FieldNum(CustTable, DataAreaId));
qbr.value(strFmt('((%1.%2 == "1000") || (%1.%3 == "ABC"))',
qbd.name(),
fieldStr(CustTable, AccountNum),
fieldStr(CustTable, Name)));
結果:
SELECT * FROM CustTable WHERE ((((CustTable_1.AccountNum == "1000") || (CustTable_1.Name == "ABC"))))
==================================================================
基本型:
Qbr = qbds.addRange(fieldnum(InventTable,ItemId));
Qbr.value(‘I-999’);
Qbr = qbds.addRange(fieldnum(InventTable,RecId));
Qbr.value(5646876135);
可用queryvalue把 value 先包起來讓 AX 處理譬如說 NULL 或是 datetime 等特別型態以求安全
qbr.value(queryvalue(‘I-999’)
==================================================================
Query Expression:
Qbr = qbds.addRange(fieldnum(InventTable,ItemId));
Qbr.value(strfmt(‘(%1 == “%2”)’,fieldstr(InventTable,ItemId),queryvalue(‘I-999’));
strfmt 注意:
a) value should be inside ''
b) every expression should have ( )
‘((%1 == %2) || (%1 == %3))’
c) %n expression order is expressed by this format
d)if it is a string, it should use ""
Strfmt(‘(%1 == “%2”)’,fieldstr(InventTable,ItemId),queryvalue(‘I-999’));
==================================================================
SOURCE #init
#public void init()
#{
# QueryBuildDataSource queryBuildDataSource;
# QueryBuildRange rangeHours;
#
# super();
#
# queryBuildDataSource = this.query().dataSourceName(tablestr(TSTimesheetLineWeek) );
# rangeHours = queryBuildDataSource.addRange(fieldid2ext(fieldnum(TSTimesheetLineWeek, Hours),1));
# rangeHours.value(strFmt('((%1.%2) != %9) || ((%1.%3) != %9) || ((%1.%4) != %9) || ((%1.%5) != %9) || ((%1.%6) != %9) || ((%1.%7) != %9) || ((%1.%8) != %9)',
# queryBuildDataSource.name(),
# fieldid2name(tablenum(TSTimesheetLineWeek),fieldid2ext( fieldnum(TSTimesheetLineWeek, Hours), 1 )),
# fieldid2name(tablenum(TSTimesheetLineWeek),fieldid2ext( fieldnum(TSTimesheetLineWeek, Hours), 2 )),
# fieldid2name(tablenum(TSTimesheetLineWeek),fieldid2ext( fieldnum(TSTimesheetLineWeek, Hours), 3 )),
# fieldid2name(tablenum(TSTimesheetLineWeek),fieldid2ext( fieldnum(TSTimesheetLineWeek, Hours), 4 )),
# fieldid2name(tablenum(TSTimesheetLineWeek),fieldid2ext( fieldnum(TSTimesheetLineWeek, Hours), 5 )),
# fieldid2name(tablenum(TSTimesheetLineWeek),fieldid2ext( fieldnum(TSTimesheetLineWeek, Hours), 6 )),
# fieldid2name(tablenum(TSTimesheetLineWeek),fieldid2ext( fieldnum(TSTimesheetLineWeek, Hours), 7 )),
# 0
# ));
#}
ENDSOURCE
沒有留言:
張貼留言