Dynamics AX Blog - Beiträge vom April 2013
AX 2012: Nützliche Funktionen rund um das Thema Finanzdimensionen
16.04.2013Microsoft Dynamics AX (Axapta)
|
AX 2012: SysOperation-Framework: Ein eigenes Attribut erstellen
02.04.2013Microsoft Dynamics AX (Axapta)
Die Attribute des SysOperation-Frameworks sind über Klassen abgebildet, die von SysAttribute abgeleitet sind. Dadurch ist es relativ einfach möglich, sich eigene Attribute zu erstellen. Folgende Schritte sind dafür notwendig:
|
|
|
|
|
|
|
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.