AX 2012: Nützliche Funktionen rund um das Thema Finanzdimensionen
16.04.2013Microsoft Dynamics AX (Axapta)
|
Dieser Beitrag bezieht sich auf die Version:
Dynamics AX 2012
Dynamics AX 2012
Dies ist ein Beitrag aus der Serie »Dynamics AX 2012 - Finanzdimensionen«
In Dynamics AX 2012 hat sich die Handhabung von Finanzdimensionen stark verändert. Und zwar sowohl auf der Oberfläche als auch das dahinterliegende Datenmodell. Wo früher noch ein Feld - meist mit dem Namen Dimension - vom Typ Array in einer Tabelle zu finden war, so findet man nun stattdessen ein von RecId abgeleitetes Feld namens DefaultDimension (o.ä.).
In dieser Serie möchte ich speziell auf diese Änderungen eingehen und das eine oder andere Stück Code präsentieren.
Alle Beiträge dieser Serie anzeigen
|
|
|
|
|
|
Wenn man in AX beispielsweise Finanzdimensionen aus einer externen Quelle verarbeiten soll, dann können die beiden folgenden Methoden möglicherweise hilfreich sein.
Die Erste Methode namens existDimension() prüft ob es die übergebene, benannte Dimension in AX überhaupt gibt und ob der übergebene Dimensionswert ebenfalls gültig ist.
{
boolean isValid = false;
DimensionAttribute DimensionAttribute;
DimensionAttributeValue DimensionAttributeValue;
DimensionAttribute = DimensionAttribute::findByName(_dimensionName);
if(DimensionAttribute)
{
DimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(DimensionAttribute, _dimensionValue);
if(DimensionAttributeValue)
{
isValid = true;
}
else
{
isValid = checkFailed(strFmt("'%1' für Dimension '%2' nicht gefunden.", _dimensionValue, _dimensionName));
}
}
else
{
isValid = checkFailed(strFmt("Dimension '%1' unbekannt.", _dimensionName));
}
return isValid;
}
Beispielaufruf: existDimension("Costcenter", "3100");
Die Zweite Methode namens existDimensionCombination() prüft, ob die Kombination des übergebenen Hauptkontos und des übergebenen Dimensionswertes gültig ist.
{
boolean isValid = false;
FinancialDimensionValidationService FinancialDimensionValidationService;
ledgerAccountValidationContract ledgerAccountValidationContract;
ledgerAccountContract ledgerAccountContract;
dimensionAttributeValueContract dimensionAttributeValueContract;
FinancialDimensionValidationService = new FinancialDimensionValidationService();
ledgerAccountValidationContract = new LedgerAccountValidationContract();
ledgerAccountContract = new LedgerAccountContract();
dimensionAttributeValueContract = new DimensionAttributeValueContract();
ledgerAccountContract.parmMainAccount(_mainAccount);
ledgerAccountContract.parmValues(new List(Types::Class));
dimensionAttributeValueContract.parmName(_dimensionName);
dimensionAttributeValueContract.parmValue(_dimensionValue);
ledgerAccountContract.parmValues().addEnd(dimensionAttributeValueContract);
ledgerAccountValidationContract.parmLedgerAccount(ledgerAccountContract);
isValid = FinancialDimensionValidationService.validateLedgerAccount(ledgerAccountValidationContract);
if( !isValid)
{
error(strFmt("Ungültige Kombination: %1 - %2: %3", _mainAccount, _dimensionName, _dimensionValue));
}
return isValid;
}
Beispielaufruf: existDimensionCombination("60000", "Costcenter", "3100");
In der realen AX-Entwickler-Welt wird eine solche Prüfung vermutlich etwas komplexer werden und wahrscheinlich auch eine Kombination beider Methoden notwendig sein.