Dynamics AX Blog - Dynamics AX 2012 - Seite 32

Momentan angezeigt werden nur Beiträge, welche für die Dynamics AX-Version »Dynamics AX 2012« relevant sind. Filter entfernen

RSS-Feed dieser Version

AX 2012: Werte einer Finanzdimension auslesen

Der folgende Job demonstriert, wie man sich die Werte einer Finanzdimension - im Beispiel  Department - per X++ ausgeben lassen kann.

static void getValues4Dimension(Args _args)
{
    DimensionValueService dimensionValueService;
    DimensionContract dimensionContract;
    List dimensionValueContractList;
    ListEnumerator listEnumerator ;
    DimensionValueContract dimensionValueContract;
    DimensionValue dimensionValue;

    dimensionValueService = new DimensionValueService();
    dimensionContract = new DimensionContract();
    dimensionContract.parmDimensionName('Department');
    dimensionValueContractList = dimensionValueService.getDimensionValues(dimensionContract);
    listEnumerator = dimensionValueContractList.getEnumerator();

    setPrefix(strFmt("Dimension %1: ", dimensionContract.parmDimensionName()));
    while(listEnumerator.moveNext())
    {
        dimensionValueContract = listEnumerator.current();
        dimensionValue = dimensionValueContract.parmValue();

        info(dimensionValue);
    }
}

 
 

AX 2012: Kontostruktur eines Hauptkontos ermitteln

Möchte man für das Hauptkonto einer Position einer Allgemeinen Erfassung ermitteln, kann man dies mit Hilfe des nachstehenden Codes tun.

static void getAccountStructureFromLedgerDimension(Args _args)
{
    ledgerJournalTrans ledgerJournalTrans;
   
    select ledgerJournalTrans
        where ledgerJournalTrans.JournalNum == '000151_010';   
   
    info(DimensionStorage::getAccountStructureFromLedgerDimension(ledgerJournalTrans.LedgerDimension).Name);
}

 
 

AX 2012: Standardfinanzdimension eines Datensatzes auslesen und ausgeben

Im folgenden Job werden die eingetragenen Standardfinanzdimensionen eines Datensatzes - im konkreten Fall die eines bestimmten Debitoren - ausgegeben.

static void getDimensionsFromDefaultDimension(Args _args)
{
    DimensionAttributeValueSet dimensionAttributeValueSet;
    DimensionAttributeValueSetItem dimensionAttributeValueSetItem;
    DimensionAttributeValue dimensionAttributeValue;
    DimensionAttribute dimensionAttribute;
    Common dimensionValueEntity;

    dimensionAttributeValueSet = DimensionAttributeValueSet::find(CustTable::find('9101').DefaultDimension);

    // Find all of the 'value set items' linked against the 'value set'
    while select dimensionAttributeValueSetItem
        where   dimensionAttributeValueSetItem.DimensionAttributeValueSet == dimensionAttributeValueSet.RecId
    {
        // Find the dimension 'value' (DimensionAttributeValue) that the set item points to.
        dimensionAttributeValue = DimensionAttributeValue::find(dimensionAttributeValueSetItem.DimensionAttributeValue);

        // Find the underlying attribute.
        dimensionAttribute = DimensionAttribute::find(dimensionAttributeValue.DimensionAttribute);

        // Use the helper class to obtain a reference to the underlying entity (can be anything)
        dimensionValueEntity = DimensionDefaultingControllerBase::findBackingEntityInstance(
            curext(),
            dimensionAttribute,
            dimensionAttributeValue.EntityInstance);

        info(strFmt("%1: %2", dimensionAttribute.Name, dimensionAttributeValue.getValue()));
    }
}

 
 

AX 2012: Dimensionen einer Position einer Allgemeines Erfassung per X++ auslesen

Wenn man bei einer Position einer Allgemeinen Erfassung, welche gegen ein Sachkonto/Hauptkonto bucht, per X++ die eingetragenen Dimensionen auslesen möchte, kann der folgende Code möglicherweise hilfreich sein.

Position einer Allgemeinen Erfassung


 
 

AX 2012: Datensätze mit einer bestimmten Dimension ausgeben

Der folgende Job listet alle Debitoren auf, bei welchen in der Dimension CustomerGroup der Wert 80 eingetragen ist.

Der interessante Teil des Jobs ist die Methode addDimensionAttributeRange der Klasse SysQuery, da diese sich um das Verknüpfen der benötigten Datenquellen kümmert.

static void getRecords4DimensionValue(Args _args)
{
    Query query;
    QueryBuildDataSource queryBuildDataSource;
    QueryBuildRange queryBuildRange;
    QueryRun queryRun;
    CustTable custTable;

    query = new Query();
    queryBuildDataSource = query.addDataSource(tableNum(CustTable));

    queryBuildRange = SysQuery::addDimensionAttributeRange( query,
                                                            queryBuildDataSource.name(),
                                                            "DefaultDimension",
                                                            DimensionComponent::DimensionAttribute,
                                                            queryValue("80"),
                                                            "CustomerGroup");

    queryRun = new QueryRun(query);
    while(queryRun.next())
    {
        custTable = queryRun.get(tableNum(CustTable));

        info(custTable.name());
    }
}

Die Klasse SysQuery stellt übrigens zahlreiche weitere ähnliche Funktionen zur Verfügung, um mit Dimensionswerten zu arbeiten.


 
 

AX 2012: ID, LegacyID und Origin

 

ID

Ist eine sogenannte installations-spezifische ID, d.h. ein und dasselbe Objekt kann in unterschiedlichen Umgebungen eine andere ID aufweisen.            

Die ID wird u.a. zum Zeitpunkt des Importes eines Model per AXUTIL vergeben Somit ist die ID aus Entwicklersicht zu vernachlässigen.

Ein Model-File enthält z.B. keine IDs! Auch per Export/Import-Funktion erstellte Exportfiles mit Daten enthalten keine IDs (lediglich GUIDs)

LegacyID

Ist nur bei "alten" Objekten gesetzt, die es schon in früheren Versionen von Dynamics AX gab. Bei neuen Elementen wird dieses LegacyID nicht mehr vergeben.

Somit ist diese LegacyID für einen Entwickler nicht relevant.

Origin

Ist eine GUID, die beim Erstellen eines Elementes zugewiesen wird und nicht mehr verändert wird.      

Diese dient dazu, ein Objekt eindeutig zu identifizieren, weil die ID in unterschiedlichen Umgebungen (Entwicklungsumgebung vs. Produktivumgebung) ja eine andere sein kann.

Angenommen in AX7 würde eine in AX 2012 bereits vorhandene Klasse umbenannt werden, könnte sie weder über die ID noch über den Namen als das selbe Objekt erkannt werden, deshalb wurde diese GUID eingeführt.

Bei Tests innerhalb einer Windows-Domäne habe ich festgestellt, daß die Origin auch beim Import von Models/XPOs mit neuen Objekten von der Quell- in die Zielumgebung übernommen wird (hingegen sich die ID verändert hat).           

Wichtig: Über die Funktion Export/Import erstellte Export-Dateien enthalten GUIDs, keine Ids (im Gegensatz zu z.B. AX 2009)

Ein Must-Read zu dem Thema ist freilich: http://blogs.msdn.com/b/mfp/archive/2011/07/11/the-solution-to-the-element-id-problem.aspx

 


 
 

Formular als Dialog verwenden

Im AOT befinden sich einige tutorial-Objekte, die dem Entwickler dabei helfen können, die eine oder andere Anforderung zu lösen. Eine dieser Klassen ist die Klasse tutorial_RunbaseForm, die erklärt wie man statt einem Dialog ein eigens erstelltes Formular als Dialog verwendet.

Auf Basis dieses Turorials habe ich in Dynamics AX 2012 eine Anforderung wie folgt gelöst:


 
 
Seiten « 1 ... 29 30 31 32 33 34 35 ... 38 » 

 

 
 
 
Beiträge des aktuellen Monats
May 2024
MoDiMiDoFrSaSo
 12345
6789101112
13141516171819
20212223242526
2728293031 
 
© 2006-2024 Heinz Schweda | Impressum | Kontakt | English version | Desktop Version
Diese Webseite verwendet Cookies, um Benutzern einen besseren Service anzubieten. Wenn Sie weiterhin auf der Seite bleiben, stimmen Sie der Verwendung von Cookies zu.  Mehr dazu