Field apa saja dapat digunakan sebagai field range. Yang terpenting adalah ekspresi dari query range tersebut. Untuk membentuk suatu ekspresi harus memenuhi persyaratan:
- Expresi harus dibuka dan ditutup dengan menggunakan single-quotes( ' ).
- Semua ekspresi dan sub ekspresi harus dibuka dan ditutup dengan buka dan tutup kurung.
- Kalau hanya menggunakan satu table, nama tabel tidak perlu di sebutkan, cukup dengan nama field.
- Untuk tabel harus menggunakan nama datasource, bukan nama table.
- Nilai String, bisa menggunakan string biasa dan diberi double-quotes ("), atau menggunakan queryValue().
- Untuk nilai Base Enum, berikan nilai integernya dengan fungsi any2int() atau enum2int().
- Untuk nilai tanggal harus menggunakan fungsi Date2StrXpp().
- Gunakan valueEmptyString pada class SysQuery (SysQuery::valueEmptyString())
static void myExperiment(Args _args)
{
CustInvoiceJour custInvoiceJour;
Query q;
QueryBuildDataSource qbds;
QueryBuildRange qRange;
QueryRun qr;
TransDate invDate, dueDate;
str rangeValue;
;
invDate = 011\2011;
dueDate = 033\2011;
q = new Query();
qbds = q.addDataSource(tablenum(CustInvoiceJour));
qRange = qbds.addRange(fieldnum(CustInvoiceJour, InvoiceId));
rangeValue = '((%1.%2==%3) || (%1.%4==%5))';
rangeValue = strfmt(rangeValue,
qbds.name(),
fieldstr(CustInvoiceJour, InvoiceDate) , Date2StrXpp(invDate),
fieldstr(CustInvoiceJour, DueDate), Date2StrXpp(dueDate)
);
qRange.value(rangeValue);
qr = new QueryRun(q);
while(qr.next())
{
custInvoiceJour = qr.get(tablenum(CustInvoiceJour));
info(strfmt("%1 - %2 - %3", custInvoiceJour.InvoiceId, custInvoiceJour.InvoiceDate, custInvoiceJour.DueDate));
}
}
Sumber: Axaptapedia, Developing for Dynamics AX: Using Expressions in Query Ranges