Показать сообщение отдельно
Старый 14.10.2013, 22:18   #15  
online
twilight
MCTS
MCBMSS
 
886 / 237 (9) ++++++
Регистрация: 17.10.2004
Адрес: Королёв
Например, вот анализируется поле 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
__________________
I could tell you, but then I would have to bill you.