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
Showing posts with label QueryRun. Show all posts
Showing posts with label QueryRun. Show all posts
Tuesday, April 23, 2024
Sysoperation framework with Aot query
Saturday, April 24, 2021
Query with join with multiple data sources in AX (Inner join, not exists join)
public void initializeQueryDS() { query = new Query(); QueryBuildDataSource qbds; QueryBuildDataSource qbdsSessionLine; switch(routing) { case Routing::Sales: qbds = query.addDataSource(tableNum(SalesLine)); qbdsSessionLine = qbds.addDataSource(tableNum(WorkbenchSessionLine)); qbdsSessionLine.joinMode(JoinMode::NoExistsJoin); qbdsSessionLine.relations(true); qbdsSessionLine.fetchMode(QueryFetchMode::One2One); TblNum = tableNum(SalesLine); break; case Routing::Return: qbds = query.addDataSource(tableNum(SalesLine)); TblNum = tableNum(SalesLine); break; } } public void initializeQueryRange() { if(inventLocationId != strMin()) { QueryBuildDataSource qbdsSalesLine,qbdsInventDim; qbdsSalesLine = query.dataSourceTable(tableNum(SalesLine)); qbdsInventDim = qbdsSalesLine.addDataSource(tableNum(InventDim)); qbdsInventDim.joinMode(JoinMode::InnerJoin); qbdsInventDim.relations(true); qbdsInventDim.fetchMode(QueryFetchMode::One2One); qbdsInventDim.addRange(fieldNum(InventDim, InventLocationId)).value(inventLocationId); } if(shipDate != dateNull()) { QueryBuildDataSource qbds; qbds = query.dataSourceTable(tableNum(SalesLine)); qbds.addRange(fieldNum(SalesLine, ShippingDateConfirmed)).value(SysQuery::value(shipDate)); } if(dlvModeFrom.elements()) { container conMOD; Enumerator enumerator = dlvModeFrom.getEnumerator(); while (enumerator.moveNext()) { conMOD += enumerator.current(); } QueryBuildDataSource qbds; qbds = query.dataSourceTable(tableNum(SalesLine)); qbds.addRange(fieldNum(SalesLine, DlvMode)).value(con2Str(conMOD)); } } public WorkbenchSessionLine initFromCommon(Common _callerTable) { WorkbenchSessionLine line; switch (_callerTable.TableId) { case tableNum(SalesLine): line.RefRecId = _callerTable.(fieldNum(SalesLine, RecId)); line.RefTableId = _callerTable.TableId; line.InventTransId = _callerTable.(fieldNum(SalesLine, InventTransId)); if(routing == Routing::Sales) { line.ReferenceType = RefType::SalesOrder; } else if(routing == Routing::Return) { line.ReferenceType = RefType::ReturnOrder; } break; default: break; } return line; } public void createWorkbenchSession(WorkbenchSessionContract _contract) { WorkbenchSessionTable header; WorkbenchSessionLine line; RecordInsertList lineRecordList = new RecordInsertList(tableNum(WorkbenchSessionLine), true, true, true, false, true, line); contract = _contract; this.initializeParameters(); this.initializeQueryDS(); this.initializeQueryRange(); try { ttsbegin; NumberSeq numberSeq = NumberSeq::newGetNum(TMSParameters::numRefInternalSessionID()); header.initValue(); header.DynamicsInternalSessionID = numberSeq.num(); numberSeq.used(); header.SessionStatus = SessionStatus::Open; header.LE_ID = curExt(); if (routing == Routing::Sales || routing == Routing::Return) { header.CombineOrders = true; } header.insert(); queryRun = new QueryRun(query); while(queryRun.next()) { Common common = queryRun.get(TblNum); line = this.initFromCommon(common); line.WorkbenchSessionTable = header.RecId; lineRecordList.add(line); } lineRecordList.insertDatabase(); ttscommit; this.openWorkbenchSessionForm(header); } catch { } }
Sunday, April 11, 2021
Run Query run
QueryRun queryRun = new QueryRun(this.getQueryOrderHoldRules()); while (queryRun.next()) { MCRHoldCodeTable mcrHoldCodeTable = queryRun.get(tableNum(MCRHoldCodeTable)); this.checkExistingOrdeHolds(mcrHoldCodeTable); }
Query run with dynamic ranges
public Query getQueryOrderHoldRules() { Query query; QueryBuildDataSource qbdsMCRHoldCodeTable; query = new Query(); qbdsMCRHoldCodeTable = query.addDataSource(tableNum(MCRHoldCodeTable)); switch (documentStatus) { case CredManDocumentStatusCheck::Confirmation: qbdsMCRHoldCodeTable.addRange(fieldNum(MCRHoldCodeTable, SAZConfirmation)).value(SysQuery::value(NoYes::Yes)); break; case CredManDocumentStatusCheck::PickingList: qbdsMCRHoldCodeTable.addRange(fieldNum(MCRHoldCodeTable, SAZPickingList)).value(SysQuery::value(NoYes::Yes)); break; case CredManDocumentStatusCheck::PackingSlip: qbdsMCRHoldCodeTable.addRange(fieldNum(MCRHoldCodeTable, SAZPackingSlip)).value(SysQuery::value(NoYes::Yes)); break; case CredManDocumentStatusCheck::WHSShipment: qbdsMCRHoldCodeTable.addRange(fieldNum(MCRHoldCodeTable, SAZWHSShipment)).value(SysQuery::value(NoYes::Yes)); break; case CredManDocumentStatusCheck::Invoice: qbdsMCRHoldCodeTable.addRange(fieldNum(MCRHoldCodeTable, SAZInvoice)).value(SysQuery::value(NoYes::Yes)); break; default: break; } qbdsMCRHoldCodeTable.addRange(fieldNum(MCRHoldCodeTable, SAZHoldCodeRule)).value(SysQuery::valueNot(SAZHoldCodeRule::None)); return query; }
Subscribe to:
Posts (Atom)