Eine einzelne Finanzdimension als bearbeitbares Feld einbinden
28.03.2015Microsoft Dynamics AX (Axapta)
|
Dieser Beitrag bezieht sich auf die Version:
Dynamics AX 2012
Dynamics AX 2012
|
|
|
|
|
|
Dieser Beitrag bezieht sich auf die Version:
Dynamics AX 2012
|
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.
{
DimensionValue costCenter;
DimensionValue oldCostCenter;
DefaultDimensionView DefaultDimensionView;
DimensionAttribute DimensionAttribute;
dimensionAttributeValueSetStorage dimensionAttributeValueSetStorage;
DimensionDefault dimensionDefault;
#define.CostCenter("CostCenter")
if(_set)
{
// Get old value
select firstOnly DisplayValue
from DefaultDimensionView
where DefaultDimensionView.Name == #CostCenter
&& DefaultDimensionView.DefaultDimension == this.DefaultDimension;
oldCostCenter = DefaultDimensionView.DisplayValue;
dimensionAttributeValueSetStorage = DimensionAttributeValueSetStorage::find(this.DefaultDimension);
// Remove old value
DimensionAttribute = DimensionAttribute::findByName(#CostCenter);
dimensionAttributeValueSetStorage.removeDimensionAttributeValue(DimensionAttributeValue::findByDimensionAttributeAndValue(DimensionAttribute, oldCostCenter).RecId);
// Add new value
if(_costCenter != "")
{
DimensionAttribute = DimensionAttribute::findByName(#CostCenter);
if( !DimensionAttributeValue::findByDimensionAttributeAndValue(DimensionAttribute, _costCenter))
{
checkFailed("Invalid value for dimension");
return "";
}
dimensionAttributeValueSetStorage.addItem(DimensionAttributeValue::findByDimensionAttributeAndValue(DimensionAttribute, _costCenter));
}
dimensionDefault = dimensionAttributeValueSetStorage.save();
this.DefaultDimension = dimensionDefault;
}
select firstOnly DisplayValue
from DefaultDimensionView
where DefaultDimensionView.Name == #CostCenter
&& DefaultDimensionView.DefaultDimension == this.DefaultDimension;
costCenter = DefaultDimensionView.displayValue;
return costCenter;
}
Nun muss man in seinem Formular nur noch ein StringEdit-Control einfügen und diesem die obige edit()-Methode zuweisen.
Wie man bei einem solchen Control sich nun noch um den Lookup und die "Details anzeigen"-Funktion kümmert, beschreiben die folgenden Beiträge: