Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł zawiera przykład zapytania Microsoft Business Solutions Axapta — X++, którego można użyć w rozwiązaniach biznesowych firmy Microsoft — Axapta, jeśli chcesz użyć wielu kryteriów, takich jak Data i identyfikator lub wiele identyfikatorów.
Dotyczy: Microsoft Dynamics AX
Oryginalny numer KB: 906138
Uwaga
Microsoft Business Solutions-Axapta 3.0 jest teraz częścią usługi Microsoft Dynamics AX 3.0. Wszystkie odwołania do microsoft Business Solutions-Axapta i Microsoft Axapta odnoszą się do microsoft Dynamics AX.
Poniższy kod zawiera te same dane wyjściowe co instrukcja while select, która jest wskazana w komentarzach.
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());
}