Dynamics AX Blog - Posts from Februar 2015
These posts are machine-translated.
AX 2012: How to change the value of a default dimension of a recordThe following job will give you an example, of how to change the value of a dimension within the default dimensions of a record (the example-job changes the value of the dimension costcenter of a customer). In this way and manner individual dimension values can be removed also. 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 before job Screenshot after job |
|
|
|
|
|
|
The following code opens form VendTable in grid and modifies the query of the form. In the example three specific vendors should be shown.
{
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();
}
The form opened by above job may look similar to the following screenshot: