Computed 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")
// 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);
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:
Dieser Beitrag bezieht sich auf die Version: Dynamics AX 2012
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
Computed 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:
CASE
WHEN altItemId != '' AND useAltItemId > 0
THEN altItemId
ELSE itemId
END AS COMPUTED_ALTITEMID
from inventTable
In AX sind nun folgende Schritte notwendig:
Sehen wir uns dabei gleich den interessantes Teil davon an, nämlich die neue Methode. Die sieht folgendermassen aus:
{
#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: