Dynamics AX Blog - finanzdimensionen - Microsoft Dynamics AX (Axapta)

Momentan angezeigt werden nur Einträge der Kategorie »Microsoft Dynamics AX (Axapta)« Filter entfernen

In den letzten Jahren, in denen ich mich fast hauptsächlich mit der Entwicklung im Umfeld von Microsoft Dynamics AX (vormals Axapta) beschäftigt habe, ist das eine oder andere Code-Fragment entstanden, von dem ich mir vorstellen könnte, daß es auch für andere AX-Entwickler ganz nützlich sein könnte. Aber auch Tips und Tricks zu dem mächtigen ERP-System werde ich in dieser Kategorie präsentieren.

RSS-Feed dieser Kategorie
Momentan angezeigt werden nur Einträge, bei denen das Schlagwort »finanzdimensionen« eingetragen wurde. Filter entfernen

Filter über Finanzdimensionen in einer FormDataSource

Möchte man in einem Formular nur Datensätze einer Tabelle anzeigen, die bestimmte Finanzdimensionen enthalten, kann man dies über das überschreiben der init() der FormDataSource wie folgt erreichen:

public void init()
{
    super();
    
    SysQuery::addDimensionAttributeRange(salesTable_ds.query(),
                        salesTable_ds.name(),
                        fieldStr(Salestable, DefaultDimension),
                        DimensionComponent::DimensionAttribute,
                        '1001',
                        'CostCenter');    
}

Man kann addDimensionAttributeRange() auch mehrmals aufrufen, so kann man nach mehreren Dimensionen gleichzeitig filtern.

Mit clearDimensionRangesFromQuery() entfernt man solche Filter übrigens wieder:

SysQuery::clearDimensionRangesFromQuery(salesTable_ds.query())

 


 
 
 

Kostenstelle per Code anlegen

Wer mal in die Verlegenheit kommt, eine Kostenstelle per Code anlegen zu müssen, dem kann vielleicht dieser Job als Inspiration dienen:

static void createCostCenter(Args _args)
{
    str 30 _costCenter = "0815"; // Cost center id to create

    OMOperatingUnit omOperatingUnit;
    NumberSeqFormHandler numberSeqFormHandler;
    NumberSeq numberSeq;

    if (_costCenter)
    {
        if (!OMOperatingUnit::findName(
            _costCenter, OMOperatingUnitType::OMCostCenter))
        {
            ttsbegin;
            numberSeq = NumberSeq::newGetNumFromId(
                OMOperatingUnit::getNumberSequenceReference().NumberSequenceId);

            omOperatingUnit.clear();

            omOperatingUnit.initValue();
            omOperatingUnit.omOperatingUnitNumber = numberSeq.num();
            omOperatingUnit.Name = _costCenter;    // Id used as name
            omOperatingUnit.NameAlias = _costCenter;
            omOperatingUnit.omOperatingUnitType = OMOperatingUnitType::OMCostCenter;
            omOperatingUnit.LanguageId = CompanyInfo::languageId();

            if (omOperatingUnit.validateWrite())
            {
                omOperatingUnit.insert();
            }
            ttscommit;
        }
    }
}

 
 
 

Query nach Finanzdimension sortieren

Um in einem Query nach einer Finanzdimension sortieren zu können, ist die Methode SysQuery::addOrderByDimensionAttribute() zu verwenden.

Das folgende Beispiel soll dies veranschaulichen. In diesem Job werden alle Debitoren ausgegeben und dabei nach der Dimension CostCenter sortiert.

static void sortByDimension(Args _args)
{
    Query query;
    QueryRun queryRun;
    QueryBuildDataSource qbds;
    CustTable custTable;
    DimensionComponent dimensionComponent;
    DimensionValue dimensionValue;

    #define.CostCenterDimensionName("CostCenter");

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

    SysQuery::addOrderByDimensionAttribute(query,
                                           qbds.name(),
                                           fieldId2name(tableNum(CustTable),
                                                        fieldNum(CustTable, DefaultDimension)),
                                           DimensionComponent::DimensionAttribute,
                                           SortOrder::Ascending,
                                           #CostCenterDimensionName);

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

        // Get dimension value
        dimensionValue =
        (select firstonly DisplayValue from defaultDimensionView
         where defaultDimensionView.Name == #CostCenterDimensionName
            && defaultDimensionView.DefaultDimension == custTable.DefaultDimension).DisplayValue;

        info(strFmt("%1 %2", custTable.AccountNum, dimensionValue));
    }
}

 
 
 

Die "Details anzeigen"-Funktion für eine als einzelnes Feld eingebundene Finanzdimension einbinden

In diesem Beitrag habe ich beschrieben, wie man eine einzelne Finanzdimension als eigenes Feld einbinden kann.

Dies ist ein Folgebeitrag und soll demonstrieren, wie man für ein solches Feld die "Details anzeigen"-Funktion programmieren kann.


 
 
 

Eine Lookup-Methode für ein als einzelnes Feld eingebundene Finanzdimension überschreiben

In diesem Beitrag habe ich beschrieben, wie man eine einzelne Finanzdimension als eigenes Feld einbinden kann.

Dies ist ein Folgebeitrag und soll demonstrieren, wie man für ein solches Feld die lookup()-Methode überschreiben kann.


 
 
 

Eine einzelne Finanzdimension als bearbeitbares Feld einbinden

Wie man in Dynamics AX 2012 einen Datensatz um die Finanzdimensionen erweitert, ist im Internet an mehreren Stellen hinlänglich beschrieben. Was aber, wenn man bei einem solchen Datzensatz eine einzelne Dimension nicht über den über das Framework eingebundene Register bearbeiten möchte, sondern diese an einer anderen Stelle im Formular - beispielsweise im Grid - einbinden möchte?

In einem solchen Fall kann evtl. die folgende edit()-Methode helfen. In meinem Beispiel wird die Dimension Kostenstelle mit Hilfe einer solchen Methode eingebunden.


 
 
 

AX 2012: Ändern einer Standardfinanzdimension (DefaultDimension) eines Datensatzes

Der nachstehende Job demonstriert, wie man den Wert einer Dimension (im Beispiel wird die Dimension Kostenstelle eines Debitors geändert) innerhalb der Standardfinanzdimensionen eines Datensatzes per Code austauschen kann. Auf diese Art & Weise können auch einzelne Dimensionswerte entfernt werden.

static void changeDimensionValue(Args _args)
{
    DimensionAttributeValueSetStorage dimensionAttributeValueSetStorage;
    DimensionAttribute dimensionAttribute;
    CustTable custTable = CustTable::find("US-014");
    DimensionValue oldDimensionValue;
    DimensionValue newDimensionValue = "011";
    DimensionDefault newDimensionDefault;

    #define.dimensionName("CostCenter")

    DimensionValue getDimensonValue(DimensionDefault _dimensionDefault)
    {
        DefaultDimensionView defaultDimensionView;
        select firstonly DisplayValue
        from defaultDimensionView
        where defaultDimensionView.Name == #dimensionName
            && defaultDimensionView.DefaultDimension == _dimensionDefault;

        return defaultDimensionView.DisplayValue;
    }

    // Get current value
    oldDimensionValue = getDimensonValue(custTable.DefaultDimension);

    // Build DimensionAttributeValueSetStorage
    dimensionAttributeValueSetStorage = DimensionAttributeValueSetStorage::find(custTable.DefaultDimension);
 
    // Remove old dimension value
    dimensionAttribute = DimensionAttribute::findByName(#dimensionName);
    dimensionAttributeValueSetStorage.removeDimensionAttributeValue(
        DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, oldDimensionValue).RecId);
 
    // Set new dimension value
    if(newDimensionValue != "")
    {
        dimensionAttribute = DimensionAttribute::findByName(#dimensionName);
        dimensionAttributeValueSetStorage.addItem(
            DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute, newDimensionValue));
    }
 
    newDimensionDefault = dimensionAttributeValueSetStorage.save();

    ttsbegin;
    custTable.selectForUpdate(true);
    custTable.DefaultDimension = newDimensionDefault;
    custTable.update();
    ttscommit;
}

Screenshot vor der Änderung

Screenshot

Screenshot nach der Änderung

Screenshot


 
 
Seiten 1 2 3 4 » 

 

 
 
 
Beiträge des aktuellen Monats
November 2019
MoDiMiDoFrSaSo
 123
45678910
11121314151617
18192021222324
252627282930 
 
© 2006-2019 Heinz Schweda | Impressum | Kontakt | English version | Mobile 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