• Skip to main content
  • Skip to primary sidebar
  • Home
  • About
  • Recommended Readings
    • 2022 Book Reading
    • 2023 Recommended Readings
    • Book Reading 2024
    • Book Reading 2025
  • Supply Chain Management Guide
  • PKM
  • Microsoft Excel

Ali Raza Zaidi

A practitioner’s musings on Dynamics 365 Finance and Operations

Dynamics AX (AX 7)

Custom lookup field and group reference field D365 for finance and operations

December 17, 2018 by alirazazaidi

Hi all following code snippet for custom lookup. Copy the onlookup event handler and copy in extension class and the following code snippet

 

Field based

[FormControlEventHandler(formControlStr(Txxxx, Txxxx_ChildName), FormControlEventType::Lookup)]
public static void xxxxx_DssChildName_OnLookup(FormControl sender, FormControlEventArgs e)
{
Query query = new Query();
QueryBuildDataSource qbds;
QueryBuildDataSource qbdsJoin;
SysTableLookup sysTableLookup = sysTableLookup::newParameters(tableNum(DirPartyTable), sender);

qbds= query.addDataSource(tableNum(DirPartyTable));
qbdsJoin= qbds.addDataSource(tableNum(DirPartyRelationship));
//qbdsJoin.relations( false);
//qbdsJoin.fields().dynamic(NoYes::Yes);
// hcmWorkerCaller = HcmWorker::find(currentWorker());
// qbds.addRange(fieldNum(DirPartyTable, RecId)).value(int642Str(HcmWorker::find(currentWorker()).Person));
qbdsJoin.addRange(fieldNum(DirPartyRelationship, parentparty)).value(int642Str(HcmWorker::find(currentWorker()).Person));
qbdsJoin.addLink(fieldNum(DirPartyTable, RecId), fieldNum(DirPartyRelationship, childparty));
qbdsJoin.joinMode(JoinMode::InnerJoin);

sysTableLookup.parmQuery(query);
sysTableLookup.addLookupfield(fieldNum(DirPartyTable, Name), true);
sysTableLookup.addLookupfield(fieldNum(DirPartyTable, RecId));
sysTableLookup.performFormLookup();

FormControlCancelableSuperEventArgs event = e as FormControlCancelableSuperEventArgs;
event.CancelSuperCall();

}

Reference based is as follow

[FormControlEventHandler(formControlStr(xxxxx, Txeee_dddd), FormControlEventType::Lookup)]
public static void ddddee_DSSPerson_OnLookup(FormControl sender, FormControlEventArgs e)
{

Query query = new Query();
QueryBuildDataSource qbds;
QueryBuildDataSource qbdsJoin;
SysReferenceTableLookup _sysTableLookup = SysReferenceTableLookup::newParameters(tableNum(DirPartyTable), sender);

qbds= query.addDataSource(tableNum(DirPartyTable));
qbdsJoin= qbds.addDataSource(tableNum(DirPartyRelationship));
//qbdsJoin.relations( false);
//qbdsJoin.fields().dynamic(NoYes::Yes);
// hcmWorkerCaller = HcmWorker::find(currentWorker());
// qbds.addRange(fieldNum(DirPartyTable, RecId)).value(int642Str(HcmWorker::find(currentWorker()).Person));
qbdsJoin.addRange(fieldNum(DirPartyRelationship, parentparty)).value(int642Str(HcmWorker::find(currentWorker()).Person));
qbdsJoin.addLink(fieldNum(DirPartyTable, RecId), fieldNum(DirPartyRelationship, childparty));
qbdsJoin.joinMode(JoinMode::InnerJoin);

_sysTableLookup.parmQuery(query);
_sysTableLookup.addLookupfield(fieldNum(DirPartyTable, Recid));
_sysTableLookup.addLookupfield(fieldNum(DirPartyTable, Name));
//, true);
// _sysTableLookup.addLookupfield(fieldNum(DirPartyTable, recid));
_sysTableLookup.performFormLookup();

FormControlCancelableSuperEventArgs event = e as FormControlCancelableSuperEventArgs;
event.CancelSuperCall();
}

 

Table method extension and grid field mapping Dynamics 365 for finance and operations

December 4, 2018 by alirazazaidi

Hi all, here is small tip, I learned today, so document it

 

I need a custom method in table extension. And then this method need to call in field mapping inside Grid. Interesting it is amazing easy.

 

So like other extensions. You have to create a class add a attribute and make in static class show it will extension of certain table. And now create a method Suppose I need extension for PurchRFQScoring table

 

[ExtensionOf(tableStr(PurchRFQScoring))]

public static class PurchRFQScoring_Extension

{

 

[SysClientCacheDataMethodAttribute(true)]  //This attribute will cache your display method.

public static display Name ScoringName(PurchRFQScoring _this)

{

return PurchRFQScoringRFQCaseCriteria::find(_this.ScoringRFQCaseCriteria).name;

}

 

}

 

Now compile solution. And open the grid and from field mapping, set table In source. And in field you have to add method with class reference like

 

PurchRFQScoring_Extension::ScoringName

So Where comes fields in Workflow conditions. Dynamics 365 For finance and operations

November 30, 2018 by alirazazaidi

During writing custom workflow. I found interesting things. Worth to share. In workflow condition screen. I did not found a lot of options. First thing I found that these Fields in conditions comes from field group we used in Approval creation wizard. But where to come child level fields. ??

 

Interestingly, these child level fields comes from  Workflow Document Query. Required child fields comes from child or tables in main data source of query.

Following screenshots will helps you to more understanding

 

 

Avoid Over layering in Development of Workflows on Existing Form Extension version – Dynamics 365 for finance and operations

November 23, 2018 by alirazazaidi

Hi all,  My fellow Sohail Shaikh wrote an excellent blog Post, I used it in my customization to avoid overlay methods in some of out of the box table.

http://d365technext.blogspot.com/2018/07/avoid-over-layering-in-development-of.html

 

 

That article made my day and worked perfectly fine. But here one thing that article missed.  How we have to set form designer the custom workflow in list page . Something like If I copied from Sheiks sabs article.

 

 

There is error when I created on initialized of custom table in a extension class for list page . I got following error.

 

 

So it is not possible, I still not figure out. Later possible I will got they way to do so. Any how I achieved this in extension for interaction class.  I copied the  post event of initializeQuery method and copied in my class and following code will work for me. To enable or disabled workflow in list page

 

[PostHandlerFor(classStr(TableListPageInteraction), methodStr(ListPageInteraction, initializeQuery))]

public static void TableListPageInteraction_Post_initializeQuery(XppPrePostArgs args)

{

TableListPageInteraction TableListPageInteraction = args.getThis();

StatusTable RFQStatusTable = purchRFQCaseTableListPageInteraction.listPage().activeRecord(queryDataSourceStr(TableListPage, DDSRFQStatus)) as DDSRFQStatus;

FormRun formRun = TableListPageInteraction.listPage().formRun();

 

FormRun.design().workflowDatasource(formDataSourceStr(PurchRFQReplyTable, DDSRFQStatus));

FormRun.design().workflowEnabled(true);

FormRun.design().workflowType(workflowtypeStr(DSSRFQCaseWFType));

 

}

 

It works for me

How to assign workflow instance to other then document originator Dynamics 365 for finance and operations

November 22, 2018 by alirazazaidi

In this webcast, I explain how to use Custom workflow participant provider. I got requirement that In HR Portal self service provider. HR can submit request on the behalf of some worker. But when HR submit the document in Workflow for approval. The first user will be the behalf-ed user, so he can review and confirm the requirement. And certainly that User / worker will be different then document originator. I achieved that with the help of Custom Workflow Participant Provider.

 

Number Sequence framework webcast Part 2 -Demo Dynamics 365 for finance and operation

November 12, 2018 by alirazazaidi

This is second part of webcast. Here I demonstrate to setup number sequence in Dynamics 365 for finance and operations

 

Number sequence framework webcast Part 1 Dynamics 365 for finance and Operations

November 12, 2018 by alirazazaidi

First Part of number sequence framework webcast.

upgrade D365 For finance and operations from 7.x to 8 by Tommy Skaue

November 2, 2018 by alirazazaidi

My fellow MVP Tommy Skaue wrote a series of Blog posts about upgrade D365 For finance and operations from 7.x to 8.+. On linkedin.

 

Tommy Skaue wrote

I made a series of blog posts going through the #MSDyn365FO upgrade process from 7.x to 8.+ this week, aiming at the ones who perhaps have less complex upgrade scenarios. I realize some have overlayerings and tons of customizations they need to get ready through a code upgrade process, but maybe my posts can inspire still. Having to manually service the 7.x the next few months, until we all go #evergreen #OneVersion can be avoided if your application and organization is ready to get on 8.+. Take a look and let me know what you think. 🙂

 

  • Upgrade from 7.x to 8.+ series | Post 1 | Start in LCS https://lnkd.in/dYrztCZ
  • Upgrade from 7.x to 8.+ series | Post 2 | Deploy Dev and Grab source DB https://lnkd.in/dK3Kp7g
  • Upgrade from 7.x to 8.+ series | Post 3 | Validate Code and Data in Dev https://lnkd.in/dY93H3P
  • Upgrade from 7.x to 8.+ series | Post 4 | Setup a new Build https://lnkd.in/dennhvH
  • Upgrade from 7.x to 8.+ series | Post 4 | Upgrade Sandbox and finally Production https://lnkd.in/dwXtK33

Build Dynamics Query in Dynamics 365 for Finance and Operations – Video Webcast MsDyn365FO

October 11, 2018 by alirazazaidi

 

Hi every one, here is another video.  Perfection is enemy of best and Best is enemy of good.  I spend 3 less sleep nights but unable to attain perfection in terms of presentation, I decided to complete it in good condition. It is beginner level video for developers. Certainly It based my 6 years technical work in Dynamics Ax 2012 and Dynamics 365 for Finance and Operations. Imagine how much I explored while making this video.   I used many reference to complete the code snippet form Internet.  Ahhoo

  • Build Query in AOT

  You can build a query in the AOT using Visual Studio. An advantage of creating the query in the AOT is that it can be reused in various places, saving lines of identical code, and making wide-reaching query adjustment easier.

 

 

 

  • Build Query in X++

Queries can also be built dynamically with X++ code. Both approaches are used in the standard application. One advantage of making the query dynamic is that it is not public in the AOT and is protected against unintentional AOT changes.

 

 

  • X++ Query Component
    • QueryRun
    • Query
    • QueryBuildDataSource
    • QueryBuildFieldList
    • QueryBuildRange
    • QueryFilter
    • QueryBuildDynaLink
    • QueryBuildLink

 

 

 

  • QueryRun

Use the queryRun object to execute the query and fetch data.

 QueryRun queryRun;

    queryRun = new QueryRun(query);

    if (queryRun.prompt())

    {

        while (queryRun.next())

        {

            inventTrans = queryRun.get(tableNum(InventTrans));

        }

}

  • Query

 The query object is the definition master. It has its own properties and has one or more related data sources.

        Query query;

       query = new Query();

        query.addDataSource(tableNum(InventTrans));

  • QueryBuildDataSource

Using QueryBuildDataSources you add all the tables you want joined (just one in this example). This is also where you define how the resultset is to be sorted. The orderMode() method lets you define:

  • OrderBy
  • GroupBy

QueryBuildDataSource queryBuildDataSourceTrans, queryBuildDataSourceDim;

queryBuildDataSourceTrans = query.addDataSource(tableNum(InventTrans));

queryBuildDataSourceDim = queryBuildDataSourceTrans.addDataSource(tableNum(InventDim));

 queryBuildDataSourceDim.addGroupByField(fieldNum(InventDim, InventBatchId));

 queryBuildDataSourceDim.relations(true);

 

 

  • QueryBuildFieldList

 The queryBuildFieldList object defines which fields to fetch from the database. The default is a dynamic field list that is equal to a “select * from …”. Each data source has only one queryBuildFieldList object which contains information about all selected fields. You can also specify aggregate functions like sum, count, and avg with the field list object.

 QueryBuildFieldList  qbfl       = qbds.fields();

 qbfl.addField(fieldNum(CustTable,CreditMax),SelectionField::Sum);

   qbfl.addField(fieldnum(CustTable,RecId),SelectionField::Count);

 

  • QueryBuildRange

  QueryBuildRange – The queryBuildRange object contains a limitation of the query on a single field.

QueryBuildDataSource    custTableQBDS, custTransQBDS;

QueryBuildRange         qbr1, qbr2;

custTableQBDS = query.addDataSource(tablenum(custTable));

qbr1 = query.dataSourceTable(tableNum(CustTable)).addRange(fieldNum(CustTable, AccountNum));

    qbr2 = query.dataSourceTable(tableNum(CustTable)).addRange(fieldNum(CustTable, InvoiceAccount));

    qbr1.value(SysQuery::value(‘4011’));

    qbr2.value(SysQuery::value(‘4010’));

  • QueryFilter

QueryFilter – The queryFilter object is used to filter the result set of an outer join. It filters the data at a later stage than the queryBuildRange object and filters the parent table based on the child table results.

QueryBuildDataSource    custTableQBDS, custTransQBDS;

 QueryFilter qFilter1, qFilter2;

custTableQBDS = query.addDataSource(tablenum(custTable));

qFilter1 = query.addQueryFilter(custTableQBDS,”AccountNum”);

qFilter1.value(“4011″);

qFilter2 = query.addQueryFilter(custTableQBDS,” InvoiceAccount”);

qFilter1.value(“4010″);

 

 

  • QueryBuildDynalink

QueryBuildDynalink – Contains information regarding a relation (limitation) to an external record. When the query is run, this information is converted to additional entries in the WHERE clause of the query SQL statement. Can only exist on the parent data source of a query. The function is used by forms, when two data sources are synchronized. Then the child data source will contain a dynalink or dynalinks to the parent data source. The function is used even if the two data sources are placed in two different forms but are still synchronized.

  • QueryBuildLink

QueryBuildLink  –  Specifies the relation between the two data sources in the join. Can only exist on a child data source.

QueryBuildLink          qbl;

QueryBuildDataSource    custTableQBDS, custTransQBDS;

custTableQBDS = query.addDataSource(tablenum(custTable));

custTransQBDS = custTableQBDS.addDataSource(tableNum(CustTrans));

qbl = custTransQBDS.addLink(fieldNum(CustTable, AccountNum), fieldNum(CustTrans, AccountNum));

 

Reference : 

http://www.axaptapedia.com/Query_class

https://docs.microsoft.com/en-us/dynamicsax-2012/developer/query-object-model

Cleanup routines in Dynamics 365 for Finance and Operations- From Microsoft Blog post shared

October 5, 2018 by alirazazaidi

In Dynamics 365 for Finance and Operations cleanup routines are available across various modules within the product. It is important to note that these cleanup routines should be only executed after detailed analysis and confirmation from the business this data is no longer needed. Also always test each routine first in test environment prior executing it in production. This article provides an overview on what is available today.

read complete article from this link https://blogs.msdn.microsoft.com/axsa/2018/09/05/cleanup-routines-in-dynamics-365-for-finance-and-operations/

« Previous Page
Next Page »

Primary Sidebar

About

I am Dynamics AX/365 Finance and Operations consultant with years of implementation experience. I has helped several businesses implement and succeed with Dynamics AX/365 Finance and Operations. The goal of this website is to share insights, tips, and tricks to help end users and IT professionals.

Legal

Content published on this website are opinions, insights, tips, and tricks we have gained from years of Dynamics consulting and may not represent the opinions or views of any current or past employer. Any changes to an ERP system should be thoroughly tested before implementation.

Categories

  • Accounts Payable (2)
  • Advance Warehouse (2)
  • Asset Management (3)
  • Azure Functions (1)
  • Books (6)
  • Certification Guide (3)
  • Customization Tips for D365 for Finance and Operations (62)
  • D365OF (59)
  • Data Management (1)
  • database restore (1)
  • Dynamics 365 (58)
  • Dynamics 365 for finance and operations (135)
  • Dynamics 365 for Operations (165)
  • Dynamics AX (AX 7) (134)
  • Dynamics AX 2012 (274)
  • Dynamics Ax 2012 Forms (13)
  • Dynamics Ax 2012 functional side (16)
  • Dynamics Ax 2012 Reporting SSRS Reports. (31)
  • Dynamics Ax 2012 Technical Side (52)
  • Dynamics Ax 7 (65)
  • Exam MB-330: Microsoft Dynamics 365 Supply Chain Management (7)
  • Excel Addin (1)
  • Favorites (12)
  • Financial Modules (6)
  • Functional (8)
  • Implementations (1)
  • Lifecycle Services (1)
  • Logseq (4)
  • Management Reporter (1)
  • Microsoft Excel (4)
  • MS Dynamics Ax 7 (64)
  • MVP summit (1)
  • MVP summit 2016 (1)
  • New Dynamics Ax (19)
  • Non Defined (9)
  • Note taking Apps (2)
  • Obsidian (3)
  • Personal Knowledge Management (2)
  • PKM (13)
  • Power Platform (6)
  • Procurement (5)
  • procurement and sourcing (5)
  • Product Information Management (4)
  • Product Management (6)
  • Production Control D365 for Finance and Operations (10)
  • Sale Order Process (10)
  • Sale Order Processing (9)
  • Sales and Distribution (5)
  • Soft Skill (1)
  • Supply Chain Management D365 F&O (3)
  • Tips and tricks (278)
  • Uncategorized (165)
  • Upgrade (1)
  • Web Cast (7)
  • White papers (4)
  • X++ (7)

Copyright © 2025 · Magazine Pro On Genesis Framework · WordPress · Log in