複数の抽出条件を使用するときに使用できる Microsoft Axapta の x++ クエリ例


Microsoft ビジネス ソリューションの Axapta 3.0 は、Microsoft Dynamics AX の 3.0 の一部をされます。Microsoft ビジネス ソリューションの Axapta と Microsoft Axapta へのすべての参照は、Microsoft Dynamics AX に関係します。

はじめに


この資料には、[Microsoft ビジネス ソリューション Axapta X ではクエリの例を Microsoft ビジネス ソリューションの日付と ID、または複数の Id など、複数の抽出条件を使用する場合、Axapta で使用することができますにはが含まれています。

詳細


次のコードは、コメントに指定されている] を選択しているときにステートメントと同じ出力を提供します。
static void Query_Example(Args _args)
{
Query q;
Queryrun qr;
QueryBuildRange qbr;
QueryBuildDataSource qbds;
InventTrans iv;
Real Total;
str range;

/* The following query produces the same results as:
while select sum(qty) from inventTrans
where (inventtrans.ItemId == "OL-1500") || inventtrans.ItemId == "OL-1000"
join inventDim
group by inventBatchId
where inventDim.InventDimId == inventTrans.InventDimId */

// Instantiate the query class.
q = new query("Inventory_Transactions");

// Create a data source by using the InventTrans table.
qbds = q.addDataSource(tablenum(InventTrans));

// Select only the Qty field, and then sum the Qty field.
qbds.addSelectionField(fieldnum(InventTrans,Qty),selectionfield::Sum);

// Set the range to the ItemId field.
qbr = qbds.addRange(fieldnum(InventTrans,ItemId));

// The range for the where statement specifies an 'or' statement.
qbr.value(strfmt('((%1 == "%2") || (%1 == "%3"))',fieldstr(inventtrans,ItemId),'OL-1500','OL-1000'));

// The following is the alternative way to enter the range.
// This also limits the selection on the ItemId values.
range = strfmt('((ItemId == "%1")||(ItemID =="%2"))',queryvalue('OL-1500'),queryvalue('OL-1000'));
qbr.value(range);

// Create the join to the InventDim table.
qbds = qbds.addDataSource(tablenum(InventDim));

// Specify the table relationship.
qbds.relations(true);

// Indicate the order mode as the grouping.
qbds.orderMode(ordermode::GroupBy);

// Specify the grouping on the InventBatchId field.
qbds.addSortField(fieldnum(InventDim,InventBatchId));

// Instantiate the QueryRun class for the form.
qr = new QueryRun(q);

// If the user clicks OK, continue.
if (qr.prompt())
{

// While there are records in the query, continue.
while (qr.next())
{

// Set the value of the query to the iv table.
bufferiv = qr.get(tablenum(InventTrans));

// Create the value of the total field.
total = iv.Qty;
}
}
// Specify the quantity for the item.
info(strfmt("Quantity: %1",total));
// Indicate the SQL string that is used for the query.
info (qr.query().dataSourceNo(1).toString());
}