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