Dynamics AX Blog - finanzdimensionen - Beiträge von 2014

AX 2012: Anzeige-Wert einer LedgerDimension-RecId per Code ausgebenIm Beispiel wird ein beliebiger Datensatz aus der LedgerJournalTrans selektiert und dessen Finanzdimensionen bzw. das Gegenkonto so ausgegeben, wie der Benutzer es im sog. Segmented Entry Control sieht. static void GetLedgerDimensionDisplayValue(Args _args) { DimensionStorage dimensionStorage; DimensionDisplayValue DimensionDisplayValue; ledgerJournalTrans ledgerJournalTrans = LedgerJournalTrans::findRecId(5637169330, false); // LedgerDimension dimensionStorage = DimensionStorage::findById(ledgerJournalTrans.LedgerDimension); DimensionDisplayValue = dimensionStorage.getComboDisplayValue(); info(DimensionDisplayValue); // OffsetLedgerDimension dimensionStorage = DimensionStorage::findById(ledgerJournalTrans.OffsetLedgerDimension); DimensionDisplayValue = dimensionStorage.getComboDisplayValue(); info(DimensionDisplayValue); } Ergebnis beispielsweise: |
AX 2012: LedgerDimension generieren III
11.05.2014Microsoft Dynamics AX (Axapta)
Im folgenden ein kurzes Code-Snippet, welches zeigt wie man beispielsweise die Standard-Finanzdimensionen eines Debitoren mit einem Haupt-/Sachkonto zu einer RecId verbindet, welche beispielsweise als LedgerDimension in einer Sachkontenjournal-Zeile (Allgemeine Erfassung; LedgerJournalTrans.LedgerDimension) verwendet werden kann. static void mergeDimensions_I(Args _args) { LedgerDimensionAccount ledgerDimensionAccount; CustTable custTable; custTable = CustTable::find('2000'); // Merge main account and source dimension values and return RecId which can be used as ledgerDimension ledgerDimensionAccount = DimensionDefaultingService::serviceCreateLedgerDimension(DimensionStorage::getDefaultAccountForMainAccountNum("4100"), custTable.DefaultDimension); info(strFmt("DefaultDimension (Source RecId): %1 LedgerDimension (Merged RecId): %2", custTable.DefaultDimension, ledgerDimensionAccount)); } |
AX 2012: Finanzdimension als Display-Methode anzeigenFolgende Display-Methode in der Datasource einer Form zeigt beispielsweise die Finanzdimension Costcenter eines Debitoren an. public display DimensionValue showCostCenter(CustTable _custTable) { DimensionAttributeValueSet dimensionAttributeValueSet; DimensionAttributeValueSetItem dimensionAttributeValueSetItem; DimensionAttributeValue dimensionAttributeValue; DimensionAttribute dimensionAttribute; #define.CostCenterDimensionName("CostCenter"); if( !_custTable || !_custTable.DefaultDimension) { return ''; } dimensionAttributeValueSet = DimensionAttributeValueSet::find(_custTable.DefaultDimension); select firstOnly RecId from dimensionAttributeValueSetItem where dimensionAttributeValueSetItem.DimensionAttributeValueSet == dimensionAttributeValueSet.RecId join DimensionAttributeValue where DimensionAttributeValue.RecId == dimensionAttributeValueSetItem.DimensionAttributeValue join RecId from dimensionAttribute where dimensionAttribute.RecId == DimensionAttributeValue.DimensionAttribute && dimensionAttribute.Name == #CostCenterDimensionName if(dimensionAttributeValue && dimensionAttribute) { return dimensionAttributeValue.getValue(); } return ''; } Einfachere Variante (siehe Kommentare) public display DimensionValue showCostCenter(CustTable _custTable) { #define.CostCenterDimensionName("CostCenter"); return ((select firstOnly DisplayValue from DefaultDimensionView where DefaultDimensionView.Name == #CostCenterDimensionName && DefaultDimensionView.DefaultDimension == _custTable.DefaultDimension).DisplayValue); } |
AX 2012: Finanzdimension auf Basis einer Formulareingabe eintragenOftmals hat man die Anforderung, daß auf Basis einer Eingabe in einem Formular auch eine bestimmte Finanzdimension eingetragen werden soll. Mit folgendem Code-Beispiel ist so etwas relativ einfach zu realisieren. Im Beispiel wird, wann immer ein bestimmtes Feld geändert wird - abgefragt über die Methode modified() des Feldes einer Datasource, die Finanzdimension Kostenstelle mit dem Wert 25 befüllt. Ist der einzutragende Wert ein ungültiger, passiert nichts (Fehlermeldung oder ähnliches). public void modified() { DimensionAttribute DimensionAttribute = DimensionAttribute::findByName("Kostenstelle"); DimensionValue newValue = '25'; // New dimension value super(); dimensionDefaultingController.setDimensionAttributeValue( DimensionAttribute, DimensionAttributeValue::findByDimensionAttributeAndValue(DimensionAttribute, newValue).RecId, newValue); } Im Beispiel wird eine existierende Instanz von DimensionDefaultingController verwendet. |
|
|
|
|
|
|
Nachstehend ein Code-Beispiel, wie man eine RecId vom Typ DefaultDimension für mehrere Dimensionen generieren kann.
Anschließend wird diese DefaultDimension mit einem Hauptkonto zu einer RecId vom Typ LedgerDimension kombiniert.
Notiz: Aufmerksamen Lesern ist sicherlich nicht entgangen, daß ich beides bereits in anderen Beiträgen geposted habe. Dieser Beitrag ist lediglich eine Kombination davon.