Например, вот анализируется поле EnumItemValue из датасорса MSKOLAP_FactTypeView представления MSKOLAP_FactSalesView и выбирается соответвующее ему значение из Map amountMap
X++:
public static server str getAmountFactType1()
{
#macrolib.MSKOLAP
Map amountMap = new Map(Types::String, Types::String);
amountMap.insert(#cLiteral(MSKOlapFactType::Qty), #cField(MSKOLAP_FactSalesAllDiscView, CustInvoiceTrans, Qty));
amountMap.insert(#cLiteral(MSKOlapFactType::Retail), MSKOLAP_FactSalesAllDiscView::amount());
amountMap.insert(#cLiteral(MSKOlapFactType::Sale), MSKOLAP_FactSalesAllDiscView::amountSales());
amountMap.insert(#cLiteral(MSKOlapFactType::Purch), MSKOLAP_FactSalesAllDiscView::amountPurch());
return #cSwitch(#cComparisonField(MSKOLAP_FactSalesView, MSKOLAP_FactTypeView, EnumItemValue),
amountMap,
#cLiteral(0));
}
я использую свою небольшую макробиблиотеку, чтобы выражения не были слишком громоздкими
X++:
#localmacro.cField
SysComputedColumn::returnField(tableStr(%1), identifierStr(%2), fieldStr(%2, %3))
#endmacro
#localmacro.cFieldL
SysComputedColumn::returnField(tableStr(%1), identifierStr(%2), fieldStr(%3, %4))
#endmacro
#localmacro.cAdd
SysComputedColumn::add(%1, %2)
#endmacro
#localmacro.cMultiply
SysComputedColumn::multiply(%1, %2)
#endmacro
#localmacro.cSubtract
SysComputedColumn::subtract(%1, %2)
#endmacro
#localmacro.cLiteral
SysComputedColumn::returnLiteral(%1)
#endmacro
#localmacro.cSwitch
SysComputedColumn::switch(%1, %2, %3)
#endmacro
#localmacro.cComparisonField
SysComputedColumn::comparisonField(tableStr(%1), identifierStr(%2), fieldStr(%2, %3))
#endmacro
#localmacro.cComparisonFieldL
SysComputedColumn::comparisonField(tableStr(%1), identifierStr(%2), fieldStr(%3, %4))
#endmacro
#localmacro.cIf
SysComputedColumn::if(%1, %2, %3)
#endmacro
#localmacro.cEqual
SysComputedColumn::equalExpression(%1, %2)
#endmacro
#localmacro.cCast
SysComputedColumn::cast(%1, %2)
#endmacro
#localmacro.isNullExpr
SysComputedColumn::isNullExpression(%1)
#endmacro