Dynamics AX Blog - Dynamics AX 2012 - Beiträge von 2014 - Seite 8

RSS-Feed dieser Version
AX 2012: Finanzdimension auf Basis einer Formulareingabe eintragenOftmals hat man die Anforderung, daß auf Basis einer Eingabe in einem Formular auch eine bestimmte Finanzdimension eingetragen werden soll. Mit folgendem Code-Beispiel ist so etwas relativ einfach zu realisieren. Im Beispiel wird, wann immer ein bestimmtes Feld geändert wird - abgefragt über die Methode modified() des Feldes einer Datasource, die Finanzdimension Kostenstelle mit dem Wert 25 befüllt. Ist der einzutragende Wert ein ungültiger, passiert nichts (Fehlermeldung oder ähnliches).
public void modified()
{
DimensionAttribute DimensionAttribute = DimensionAttribute::findByName("Kostenstelle");
DimensionValue newValue = '25'; // New dimension value
super();
dimensionDefaultingController.setDimensionAttributeValue(
DimensionAttribute,
DimensionAttributeValue::findByDimensionAttributeAndValue(DimensionAttribute, newValue).RecId,
newValue);
}
Im Beispiel wird eine existierende Instanz von DimensionDefaultingController verwendet. |
Makro innerhalb eines SELECT-Statements verwendenDas Beispiel listet beispielsweise nur aktive Stücklistenpositionen (Tabelle BOM) auf (aktiv über die Felder FromDate und ToDate). Lässt man den zweiten Parameter des Makros leer (dateNull()), so werden alle Stücklistenpositionen gelistet.
static void useMacroInSelectStatement(Args _args)
{
bom bom;
date emptyDate;
// parameters: %1 = table instance, %2 date, %3 empty date value
#localmacro.bomDateFilter
&& ( %2 == dateNull() || (
((%1.FromDate <= %2) && (%1.ToDate >= %2)) ||
((%1.FromDate == %3) && (%1.ToDate == %3)) ||
((%1.FromDate <= %2) && (%1.ToDate == %3)) ||
((%1.FromDate == %3) && (%1.ToDate >= %2))
))
#endMacro
;
while select bom
where bom.ItemId == '123'
#bomDateFilter(bom, systemDateGet(), emptyDate)
{
info(bom.bomid);
}
} |
Welche Felder werden in einem automatisch generierten Lookup angezeigt?Mir wurde diese Frage vor kurzem selbst gestellt und konnte diese allerdings nur zum Teil beantworten. Ich wusste aber noch, daß ich schon einmal eine Seite gesehen hatte, wo dies genau erklärt wird. Aber ich wusste weder noch wo, noch konnte ich sie über diverse Suchmaschinen finden. Aber in alten Unterlagen fand ich die Quelle dann doch, der Trick um die Quelle auch mit Google und Konsorten zu finden ist, mit dem altem Namen von Microsoft Dynamics AX - Axapta danach zu suchen! Tut man dies, so findet man rasch folgende Seite: |
|
|
|
|
|
|
Folgende Display-Methode in der Datasource einer Form zeigt beispielsweise die Finanzdimension Costcenter eines Debitoren an.
public display DimensionValue showCostCenter(CustTable _custTable) { DimensionAttributeValueSet dimensionAttributeValueSet; DimensionAttributeValueSetItem dimensionAttributeValueSetItem; DimensionAttributeValue dimensionAttributeValue; DimensionAttribute dimensionAttribute; #define.CostCenterDimensionName("CostCenter"); if( !_custTable || !_custTable.DefaultDimension) { return ''; } dimensionAttributeValueSet = DimensionAttributeValueSet::find(_custTable.DefaultDimension); select firstOnly RecId from dimensionAttributeValueSetItem where dimensionAttributeValueSetItem.DimensionAttributeValueSet == dimensionAttributeValueSet.RecId join DimensionAttributeValue where DimensionAttributeValue.RecId == dimensionAttributeValueSetItem.DimensionAttributeValue join RecId from dimensionAttribute where dimensionAttribute.RecId == DimensionAttributeValue.DimensionAttribute && dimensionAttribute.Name == #CostCenterDimensionName if(dimensionAttributeValue && dimensionAttribute) { return dimensionAttributeValue.getValue(); } return ''; }Einfachere Variante (siehe Kommentare)
public display DimensionValue showCostCenter(CustTable _custTable) { #define.CostCenterDimensionName("CostCenter"); return ((select firstOnly DisplayValue from DefaultDimensionView where DefaultDimensionView.Name == #CostCenterDimensionName && DefaultDimensionView.DefaultDimension == _custTable.DefaultDimension).DisplayValue); }