AX 2012: Beispiel für den Einsatz einer Computed Column

ScreenshotComputed Columns sind einer Neuerung in Dynamics AX 2012, mit deren Hilfe es möglich ist diverse Berechnungen oder ähnliches bereits auf Datenbankebene durchführen zu lassen.

Dabei ist es wichtig zu verstehen, daß man bei einer Computed Column mit Hilfe von X++ SQL-Statements generiert.

Im folgenden habe ich ein einfach gehaltenes Beispiel erstellt, um die Möglichkeiten zu demonstrieren.

Szenario: Es soll ein View erstellt werden, der eine Spalte enthält wo die Artikelnummer des Artikel ausgegeben wird bzw. wenn bei dem Artikel eine sog. Ersatzartikelnummer eingetragen ist, soll diese statt dessen ausgegeben werden.

In SQL würde man ein solches Statement wie folgt schreiben:

select  itemid,
        CASE
        WHEN altItemId != '' AND useAltItemId > 0
        THEN altItemId
        ELSE itemId
        END AS COMPUTED_ALTITEMID
from inventTable

In AX sind nun folgende Schritte notwendig:

  • Erstellen des Views im AOT
  • Erstellen einer Methode, welche die Logik abbildet
  • Im Fields-Knoten des Views ein neues Feld vom Typ String Computed Column einfügen
  • Bei diesem Feld nun die neue Methode in der Eigenschaft ViewMethod eintragen

Sehen wir uns dabei gleich den interessantes Teil davon an, nämlich die neue Methode. Die sieht folgendermassen aus:

private static server str compColAltItemIdMethod()
{
    #define.ViewName("InventTableAltItemIdView")

    #define.DataSourceName("InventTable")
    #define.FieldItemId("ItemId")
    #define.FieldAltItemId("AltitemId")
    #define.FieldUseAltItemId("UseAltItemId")
    str sItemId;
    str sAltItemId;
    str sUseAltItemId;
    DictView dictView;

    // Construct a DictView object for the present view.
    dictView = new DictView(tableNum(#ViewName));

    // Get a string that has the target field name
    // propertly qualified with an alias (such
    // as "A." or "B.").
    sItemId = dictView.computedColumnString
        (#DataSourceName,
        #FieldItemId,
        FieldNameGenerationMode::FieldList,
        true);

    sAltItemId = dictView.computedColumnString
        (#DataSourceName,
        #FieldAltItemId,
        FieldNameGenerationMode::FieldList,
        true);

    sUseAltItemId = dictView.computedColumnString
        (#DataSourceName,
        #FieldUseAltItemId,
        FieldNameGenerationMode::FieldList,
        true);

    return strFmt("CASE WHEN %1 != '' AND %2 > 0 THEN altItemId ELSE itemId END",
                        sAltItemId,
                        sUseAltItemId,
                        sItemId);
}

Der View sieht nun im Tablebrowser so aus, man sieht beispielsweise beim Artikel 3004 daß dort im Feld Computed_AltItemId eine andere Artikelnummer ausgegeben wird:

Screenshot

Dieser Beitrag bezieht sich auf die Version:
Dynamics AX 2012

 
 

 

 
 
 
Beiträge des aktuellen Monats
November 2024
MoDiMiDoFrSaSo
 123
45678910
11121314151617
18192021222324
252627282930 
 
© 2006-2024 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