Thanks to Denis Trunin's article, we can easily implement something like this in D365FO.
Then, say, we need to replace Department from Operations to Client Services for Ahmed Barnett in USMF.
Here you go.
public static DimensionDefault setValueToDefaultDimension(DimensionDefault _dimensionDefault, RefRecId _dimensionAttributeRecId, DimensionValue _newDimensionValue) { DimensionAttributeValueSetStorage dimStorage; DimensionDefault newDimensionDefault = _dimensionDefault; DimensionAttributeValue dimensionAttributeValue; if (_dimensionAttributeRecId) { dimStorage = DimensionAttributeValueSetStorage::find(_dimensionDefault); if (_newDimensionValue) { dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValue(DimensionAttribute::find(_dimensionAttributeRecId), _newDimensionValue, false, true); dimStorage.addItem(dimensionAttributeValue); } else { dimStorage.removeDimensionAttribute(_dimensionAttributeRecId); } newDimensionDefault = dimStorage.save(); } return newDimensionDefault; }
Then, say, we need to replace Department from Operations to Client Services for Ahmed Barnett in USMF.
static void setNewFinDimValueForEmployee(HcmWorkerRecId _worker, CompanyInfoRecId _legalEntity, Name _dimensionName, DimensionValue _dimensionValue) { HcmEmployment hcmEmployment = HcmEmployment::findByWorkerLegalEntity(_worker, _legalEntity); ttsbegin; hcmEmployment.selectForUpdate(true); hcmEmployment.validTimeStateUpdateMode(ValidTimeStateUpdate::Correction); DimensionDefault newDim = DimensionHelper::setValueToDefaultDimension(hcmEmployment.DefaultDimension, DimensionAttribute::findByName(_dimensionName).RecId, _dimensionValue); hcmEmployment.DefaultDimension = newDim; if(hcmEmployment.validateWrite()) { hcmEmployment.update(); } ttscommit; }
public static void main(Args _args) { HcmWorkerRecId _worker = 22565420995; //Ahmed Barnett CompanyInfoRecId _legalEntity = 22565422580; //USMF Name _dimensionName = 'Department'; DimensionValue _dimensionValue = '028'; //Currently 026 DimensionHelper::setNewFinDimValueForEmployee(_worker, _legalEntity, _dimensionName, _dimensionValue); Info(strFmt("Employee fin dim value changed!")); }