public class UpdatePriceFormulaIdOnItemsService__Custom extends SysOperationServiceBase { #OCCRetrycount public void processOperation(UpdatePriceFormulaIdOnItemsContract__Custom _contract) { Query orderQuery; orderQuery = _contract.getQuery(); container compCon = str2con(_contract.parmCompany(), SysAppUtilities__Custom::semiColon); QueryRun queryRun = new QueryRun(orderQuery); while (queryRun.Next()) { InventTable inventTable = queryRun.get(tableNum(InventTable)); try { PriceFormulaId__Custom priceFormulaIdMaster = this.getPriceFormulaId(inventTable); //DSSE if (inventTable && inventTable.PriceFormulaIdMaster__Custom != priceFormulaIdMaster) { ttsbegin; inventTable.selectForUpdate(true); inventTable.PriceFormulaIdMaster__Custom = priceFormulaIdMaster; inventTable.PriceFormulaId__Custom = priceFormulaIdMaster; inventTable.doUpdate(); ttscommit; } for (int i=1; i<=conLen(compCon); i++) { DataAreaId company = conPeek(compCon, i); changecompany(company) { InventTable inventTableSales = InventTable::find(inventTable.ItemId); PriceFormulaId__Custom priceFormulaId = this.getPriceFormulaId(inventTableSales); if (inventTableSales && inventTableSales.PriceFormulaId__Custom != priceFormulaId) { ttsbegin; inventTableSales.selectForUpdate(true); inventTableSales.PriceFormulaIdMaster__Custom = priceFormulaIdMaster; inventTableSales.PriceFormulaId__Custom = priceFormulaId; inventTableSales.doUpdate(); ttscommit; } } } info(strfmt("@_CustomtITServices:SucessUpdateItem", inventTable.ItemId)); } catch (Exception::Deadlock) { retry; } catch (Exception::UpdateConflict) { if (appl.ttsLevel() == 0) { if (xSession::currentRetryCount() >= #RetryNum) { warning(strFmt("@_CustomtITServices:FaliedUpdateItem", inventTable.ItemId)); continue; } else { retry; } } else { warning(strFmt("@_CustomtITServices:FaliedUpdateItem", inventTable.ItemId)); continue; } } catch (Exception::Error) { warning(strFmt("@_CustomtITServices:FaliedUpdateItem", inventTable.ItemId)); continue; } } } public PriceFormulaId__Custom getPriceFormulaId(InventTable _inventTable) { DimensionValue brandDim; EcoResCategoryId ecoResCategoryId; container catCon = conNull(); if (_inventTable) { brandDim = _CustomtITServicesUtility__Custom::getDimension_CustomplayValue(_inventTable.DefaultDimension, SysAppUtilities__Custom::dimensionAttributeNameBrand); catCon = _CustomtITServicesUtility__Custom::getProdCategories(_inventTable.ItemId); } ItemPriceFormula__Custom itemPriceFormula; if (_inventTable.ItemId) { itemPriceFormula = ItemPriceFormula__Custom::findByItem(_inventTable.ItemId); } if (!itemPriceFormula && catCon != conNull() && brandDim) { for (int i=1; i<=conLen(catCon); i++) { ecoResCategoryId = EcoResCategory::find(conPeek(catCon, i)).RecId; itemPriceFormula = ItemPriceFormula__Custom::findByCategoryBrand(ecoResCategoryId, brandDim); if (itemPriceFormula) { break; } } } if (!itemPriceFormula && brandDim) { itemPriceFormula = ItemPriceFormula__Custom::findByBrand(brandDim); } if (!itemPriceFormula && catCon != conNull()) { for (int i=1; i<=conLen(catCon); i++) { ecoResCategoryId = conPeek(catCon, i); itemPriceFormula = ItemPriceFormula__Custom::findByCategory(ecoResCategoryId); if (itemPriceFormula) { break; } } } return itemPriceFormula.PriceFormulaId; } } ===================== public class UpdatePriceFormulaIdOnItemsController__Custom extends SysOperationServiceController { // <summary> /// Creates a new instance of <c>UpdateEndOfLifeOnItemsController__Custom</c> class. /// </summary> /// <param name = "_args">A controller arguments.</param> /// <returns>A instance of <c>SysOperationController</c> class.</returns> public static UpdatePriceFormulaIdOnItemsController__Custom construct(Args _args) { UpdatePriceFormulaIdOnItemsController__Custom controller = new UpdatePriceFormulaIdOnItemsController__Custom(); controller.parmArgs(_args); return controller; } /// <summary> /// Instantiate controller. /// </summary> protected void new() { super(classStr(UpdatePriceFormulaIdOnItemsService__Custom), methodStr(UpdatePriceFormulaIdOnItemsService__Custom, processOperation)); this.parmDialogCaption("@_CustomtITServices:UpdatePriceFormulaIdItem"); } /// <summary> /// Runs the class with the specified arguments. /// </summary> /// <param name = "_args">The specified arguments.</param> public static void main(Args _args) { UpdatePriceFormulaIdOnItemsController__Custom controller = UpdatePriceFormulaIdOnItemsController__Custom::newFromArgs(_args); controller.parmExecutionMode(SysOperationExecutionMode::Synchronous); controller.startOperation(); } /// <summary> /// Instantiate and initialize controller class. /// </summary> /// <param name = "_args">The specified arguments.</param> /// <returns> /// returns controller class. /// </returns> public static UpdatePriceFormulaIdOnItemsController__Custom newFromArgs(Args _args) { UpdatePriceFormulaIdOnItemsController__Custom controller = UpdatePriceFormulaIdOnItemsController__Custom::construct(_args); return controller; } } ================== [DataContractAttribute, SysOperationContractProcessingAttribute(ClassStr(UpdatePriceFormulaIdOnItemsUIbuilder__Custom))] public class UpdatePriceFormulaIdOnItemsContract__Custom { str packedQuery; Str company; /// <summary> /// Initialize query /// </summary> public void initQuery() { Query newQuery; newQuery = new Query(queryStr(InventTable)); this.setQuery(newQuery); } /// <summary> /// Get/Set the packed query /// </summary> /// <param name = "_packedQuery">query</param> /// <returns>string</returns> [ DataMemberAttribute, AifQueryTypeAttribute('_packedQuery', queryStr(InventTable)) ] public str parmPackedQuery(str _packedQuery = packedQuery) { packedQuery = _packedQuery; return packedQuery; } /// <summary> /// Get the query /// </summary> /// <returns>Query</returns> public Query getQuery() { return new Query(SysOperationHelper::base64Decode(packedQuery)); } /// <summary> /// Set the query /// </summary> /// <param name = "_query">query</param> public void setQuery(Query _query) { packedQuery = SysOperationHelper::base64Encode(_query.pack()); } // <summary> /// Gets or sets the value of the datacontract parameter company. /// </summary> /// <param name="_company"> /// The new value of the datacontract parameter company; optional. /// </param> /// <returns> /// The current value of datacontract parameter company /// </returns> [ DataMemberAttribute, SysOperationLabelAttribute(literalStr("@_CustomtITServices:Company")), SysOperation_CustomplayOrderAttribute("1") ] public Str parmCompany(Str _company = company) { company = _company; return company; } }
This blog is contains coding reference related to Microsoft AX 2012 and D365 finance and operations and Power platform
Tuesday, April 23, 2024
Sysoperation framework with Aot query
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment