/// <summary> /// Event handlers for InventSum table /// </summary> class VKInventSumEventHandler { /// <summary> /// pre insert event handler /// </summary> /// <param name = "args">PrePost event handler arguments</param> [PreHandlerFor(tableStr(InventSum), tableMethodStr(InventSum, insert))] public static void InventSum_Pre_insert(XppPrePostArgs args) { InventSum inventSum = args.getThis(); InventItemBarcode inventItemBarcode = InventItemBarcode::findItem( inventSum.ItemId, VKUpdateBarcodesService::getProductDimensionsOnly(inventSum.ItemId, inventSum.inventDim()), false, false); inventSum.VKItemBarcode = inventItemBarcode.itemBarCode; } /// <summary> /// pre update event handler /// </summary> /// <param name = "args">PrePost event handler arguments</param> [PreHandlerFor(tableStr(InventSum), tableMethodStr(InventSum, update))] public static void InventSum_Pre_update(XppPrePostArgs args) { InventSum inventSum = args.getThis(); InventItemBarcode inventItemBarcode = InventItemBarcode::findItem( inventSum.ItemId, VKUpdateBarcodesService::getProductDimensionsOnly(inventSum.ItemId, inventSum.inventDim()), false, false); inventSum.VKItemBarcode = inventItemBarcode.itemBarCode; } }Update inventSum advanced case (InventUpdateOnhand.updateInventSum())
/// <summary> /// An extension class for InventUpdateOnhand class /// </summary> [ExtensionOf(classstr(InventUpdateOnhand))] public final class VKInventUpdateOnhand_Extension { protected str sqlUpdateInventSumStr() { str sqlSet = ' SET ', sqlFrom = ' FROM INVENTSUMDELTA ', sqlGroupBy = ' GROUP BY ', sqlStr, sqlStrFirst, sqlStrLast, sqlStrInject, newSqlStr; int injectCount = 0; str 256 inventSumName = new SysDictTable(tableNum(InventSum)).name(DbBackend::Sql); str 256 inventSumDeltaName = new SysDictTable(tableNum(InventSumDelta)).name(DbBackend::Sql); str 256 inventSumVKItemBarcodeName = new SysDictField(tableNum(InventSum),fieldNum(InventSum,VKItemBarcode)).name(DbBackend::Sql,0,FieldNameGenerationMode::FieldList); str 256 inventSumDeltaVKItemBarcodeName = new SysDictField(tableNum(InventSumDelta),fieldNum(InventSumDelta,VKItemBarcode)).name(DbBackend::Sql,0,FieldNameGenerationMode::FieldList); // see query structure at header comments of original sqlUpdateInventSumStr method sqlStr = next sqlUpdateInventSumStr(); newSqlStr = sqlStr; // modify SET section to insert our new field update int pos = strScan(newSqlStr, sqlSet, 0, strLen(newSqlStr)); if (pos > 0) { sqlStrInject = strFmt(' %1.%2 = %3.%4, ', inventSumName, inventSumVKItemBarcodeName, inventSumDeltaName, inventSumDeltaVKItemBarcodeName); newSqlStr = this.injectStr(newSqlStr, pos + strLen(sqlSet) - 1, sqlStrInject); injectCount++; } // modify SELECT ... FROM section to select new field from InventSumDelta pos = strScan(newSqlStr, sqlFrom, 0, strLen(newSqlStr)); if (pos > 0) { sqlStrInject = strFmt(', %1.%2 ', inventSumDeltaName, inventSumDeltaVKItemBarcodeName); newSqlStr = this.injectStr(newSqlStr, pos - 1, sqlStrInject); injectCount++; } // modify GROUP BY section to add out field and let it appear in selection pos = strScan(newSqlStr, sqlGroupBy, pos, strLen(newSqlStr)); if (pos > 0) { sqlStrInject = strFmt('%1.%2, ', inventSumDeltaName, inventSumDeltaVKItemBarcodeName); newSqlStr = this.injectStr(newSqlStr, pos + strLen(sqlGroupBy) - 1, sqlStrInject); injectCount++; } if (3 == injectCount) { sqlStr = newSqlStr; } return sqlStr; } public void addInventSumDelta( InventSumDelta _inventSumDelta, InventTrans _inventTrans, InventTable _inventTable) { InventItemBarcode inventItemBarcode = InventItemBarcode::findItem( _inventSumDelta.ItemId, VKUpdateBarcodesService::getProductDimensionsOnly(_inventSumDelta.ItemId, InventDim::find(_inventSumDelta.inventDimId)), false, false); // Calculate/update required field here. InventSumDelta table should also have the same field added to InventSum _inventSumDelta.VKItemBarcode = inventItemBarcode.itemBarCode; next addInventSumDelta(_inventSumDelta, _inventTrans, _inventTable); } protected str injectStr(str _baseStr, int _pos, str _inStr) { str newStr, sqlStrFirst, sqlStrLast; sqlStrFirst = subStr(_baseStr, 0, _pos); sqlStrLast = subStr(_baseStr, _pos+1, strLen(_baseStr)); newStr = sqlStrFirst + _inStr + sqlStrLast; return newStr; } }
DaxOnline.org is free platform that allows you to quickly store and reuse snippets, notes, articles related to Dynamics AX.
Authors are allowed to set their own AdSense units.
Join us.