Dynamics AX Blog - Beiträge vom Februar 2015
AX 2012: Ändern einer Standardfinanzdimension (DefaultDimension) eines DatensatzesDer 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 nach der Änderung |
|
|
|
|
|
|
Der folgende Code öffnet ein Formular - im Beispiel das Formular VendTable - im Grid und setzt dabei Ranges auf den Query des Formulares. Konkret werden im Beispiel nur drei bestimmte Kreditoren angezeigt.
{
Args args;
FormRun fr;
QueryBuildDataSource qbds;
FormDataSource fds;
QueryBuildRange qbr;
args = new Args(formStr(VendTable));
args.caller(null);
args.menuItemType(MenuItemType::Display);
args.menuItemName(menuitemDisplayStr(VendTable));
args.formViewOption(FormViewOption::Grid);
fr = classfactory.formRunClass(args);
fr.init();
fds = fr.dataSource();
qbds = fds.queryBuildDataSource();
qbds.addRange(fieldNum(VendTable, RecId)).value(queryValue(22565421239));
qbds.addRange(fieldNum(VendTable, RecId)).value(queryValue(22565421240));
qbds.addRange(fieldNum(VendTable, RecId)).value(queryValue(22565421714));
fr.run();
fr.detach();
}
Das Ergebnis des Jobs kann wie folgt aussehen: