Here is something regarding the ClearDynaLinks method. Mostly you read many blogs, sites and so on that theoritically explain this method. Moreover, no further explaination or example is being provided. It is hard for new comer to catch up the idea.
Before I explain how that method work, we have to know our “ingredient”. I have two tables, BikeCustTable and BikeInvoice. The relationship for that two table is link through AccountNum. Assume there are some data in that two tables, please see the following screen.
After review our “ingredient”, is time for us to prepare our meal. First, we need two forms, Form A and Form B, both of the forms require BikeCustTable as datasource. However, in Form B, it require extra datasource, which is BikeInvoice. Take a glimpse on the screen below.
In Form A, it consists of a grid and a menu item button. The grid datasource is Table A and consists of fields from Table A. Meanwhile, there is a menu item button, calling Form B. For this menu item button, we have to pass the current datasource to form B. See the screen below.
In Form B, there only consist of one grid, and a two datasource (BikeCustTable and BikeInvoice). The BikeCustTable datasource is inner join with BikeInvoice datasource. The grid in Form B consists of fields from two table.
The scenario is like following. When user open the Form A, it display on the screen. It works well and fine. When user click the menu item button, the Form B will be display. However, you will notice the only AccountNum 100 will be display only. Where is AccountNum 101? Why it never appear in Grid?
Notice when I select AccountNum 101 in Form A, it will cause changes on Form B. In Form B, only records that have the AccountNum 101 will be displayed. Other records will not be displayed.
Why happen to the program? Why AccountNum 101 not being displayed in Running 1, and why AccountNum 100 not being displayed at Running 2? Notice when I select the record in Form A, it will reflect the changes in Form B. Why this happen? The answer is if same datasource exists in both forms, AX will try to link it together by default. This is the fact.
For disable the link, ClearDynaLinks method can be apply if you don’t want the linking to be carry forward to next form. Please look at the screen below to see the additional code that add under the datasource init method.
By add in this.query().dataSourceTable(tablenum(BikeInvoice)).clearDynalinks(); into the BikeInvoice data source init method to disable the linking. Doing so will broke the link and there will be two separate datasource in two forms. Hope after you go through this post, it will help you understand the the ClearDynaLinks method.