I have crated a new event handler classes for post eventHandler of insert method in salesTable level.
Please check the below code to achieve this.
class MDLSalesOrderDimesionsEventHandler
{
///
/// When new SO is created this method will be called and new custom SalesOrders dimension will be created and populated on SO.
///
///
[PostHandlerFor(tableStr(SalesTable), tableMethodStr(SalesTable, insert))]
public static void SalesTable_Post_insert(XppPrePostArgs args)
{
DimensionDefault defDim;
DimensionAttribute dimensionAttribute;
DimensionAttributeValue newValue,dimensionAttributeValue;
DimensionAttributeValueSetStorage dimensionStorage;
DimensionAttributeValueSet dimAttrValueSet; //Contains default dimension records
DimensionAttributeValueSetItem dimAttrValueSetItem; //Contains individual records for default dimensions
DimensionFinancialTag dimensionFinancialTag ; //Backing entity view for Custome type dimension //>> you can change other view contain existing Dimension
DimensionAttributeValue dimAttrValue; // Contains used financial dimension values
int backEntityType;
DimensionSHA1Hash hash;
HashKey valueKeyHashArray[];
int dimAttrCount;
Map dimAttrIdx = new Map(Types::Integer, Types::Integer);
SalesTable salesTable = args.getThis() as SalesTable;
const
var salesOrder = "SalesOrders";
dimensionAttribute = DimensionAttribute::findbyName(salesOrder);
dimensionAttributeValue = DimensionAttributeValue::findByDimensionAttributeAndValueNoError(dimensionAttribute,salesTable.SalesId,false,true);
if(!dimensionAttributeValue)
{
dimensionFinancialTag.Value = salesTable.SalesId;
dimensionFinancialTag.FinancialTagCategory = dimensionAttribute.financialTagCategory();
dimensionFinancialTag.insert();
}
dimAttrValue = DimensionAttributeValue::findByDimensionAttributeAndEntityInst(dimensionAttribute.RecId, dimensionFinancialTag.RecId, false, true);
backEntityType = tableNum(DimensionFinancialTag);
dimAttrIdx.insert(dimensionAttribute.BackingEntityType, dimAttrCount);
valueKeyHashArray[dimAttrIdx.lookup(backEntityType)] = dimAttrValue.HashKey;
hash = DimensionAttributeValueSetStorage::getHashFromArray(valueKeyHashArray, dimAttrCount);
dimAttrValueSet = DimensionAttributeValueSet::findByHash(hash);
// This value set does not exist, so it must be persisted
if (!dimAttrValueSet)
{
ttsbegin;
// Insert the value set with appropriate hash
dimAttrValueSet.Hash = hash;
dimAttrValueSet.insert();
//Insert Custom dimension set item
dimAttrValueSetItem.clear();
dimAttrValueSetItem.DimensionAttributeValueSet = dimAttrValueSet.RecId;
dimAttrValueSetItem.DimensionAttributeValue = dimAttrValue.RecId;
dimAttrValueSetItem.DisplayValue = dimensionFinancialTag.Value;
dimAttrValueSetItem.insert();
ttscommit;
}
newValue = DimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute,salesTable.SalesId,false,true);
defDim = salesTable.Defaultdimension;
dimensionStorage = DimensionAttributeValueSetStorage::find(defDim);
dimensionStorage.addItem(newValue);
defDim = dimensionStorage.save();
ttsbegin;
salesTable.selectForUpdate(true);
salesTable.DefaultDimension = salesTable.mergeDimension(salesTable.DefaultDimension,defDim);
salesTable.doUpdate();
ttscommit;
}
}
No comments:
Post a Comment