Skip to main content
Post a question

Notifications

Announcements

No record found.

Community site session details

Community site session details

Session Id : N+pDyBvKX3pflOm/fhZseS
Finance | Project Operations, Human Resources, ...
Answered

Iterate Datasource records in Reverse.

Like (0) ShareShare
ReportReport
Posted on 19 Nov 2021 11:12:36 by 65

Hello All,

I tried iterating over the datasource records just like the below code snippet shows.

InventTrans                 localInventTrans = InventTrans_DS.getFirst() as InventTrans;
ItemId                      itemId;

while(localInventTrans)
{
  //access fields by using localInventTrans.fieldname
  itemId = localInventTrans.ItemId;


  //get the next record from the datasource
        localInventTrans = InventTrans_DS.getNext() as InventTrans;
}

but the problem is the records are being fetched in reverse, for example:
if the datasource had three records with ids 1,2 and 3. The ds_.getFirst() returns the last id record ( in this case id=3) and then traverses back.

Is there any way I can change this behavior and traverse from the actual first record ( in this case id=1). 

Thanks.

  • Suggested answer
    OsamaAG Profile Picture
    65 on 19 Nov 2021 at 17:20:32
    RE: Iterate Datasource records in Reverse.

     nmaenpaa   As for the problem that I was facing  of  datasource records are in reverse.

    This was because my Datasource property "Start position" was set to "Last".

  • OsamaAG Profile Picture
    65 on 19 Nov 2021 at 16:55:07
    RE: Iterate Datasource records in Reverse.

    Yes you are right. I did include the "running sum" but at the sacrifice of performance. I am looking for a better way.

    Thanks a lot for your suggestion and replies. nmaenpaa.

  • Verified answer
    nmaenpaa Profile Picture
    101,156 Moderator on 19 Nov 2021 at 14:59:23
    RE: Iterate Datasource records in Reverse.

    Here's my suggestion: if the user wants to see a sum of some columns, they can export the data to Excel, and simply highlight all the columns that they want to sum. Excel shows the sum of the selected cells automatically.

    I'm not sure if there's any nice way to show such "running sum" of all previous rows without a performance disaster. So perhaps you need to rethink this a bit.

    Depending on the actual needs of the users, they could also use the new grid capabilities that have recently been added to D365FO : https://docs.microsoft.com/en-us/dynamics365/fin-ops-core/fin-ops/get-started/grid-capabilities

    But only if they use D365FO. You posted in AX forum, and used "Dynamics AX (current version)" tag so I'm not sure which version you are using.

  • OsamaAG Profile Picture
    65 on 19 Nov 2021 at 12:24:39
    RE: Iterate Datasource records in Reverse.

    Yes you are absolutely right that my display method is actually doing exactly like your example and its not efficient in any way. but as I don't have expertise in D365 I am stuck in using display method

    Lets say I am standing at record 100th, I have to get the Amount sum of all the previous records and display it in the records 100th.

    If I was standing on 4th record then I'll have to get the Amount sum of the previous records and that would be sum of 3 records.

  • Suggested answer
    nmaenpaa Profile Picture
    101,156 Moderator on 19 Nov 2021 at 12:16:52
    RE: Iterate Datasource records in Reverse.

    If you can't share any more data, then I'm unable to provide any more help.

    I hope you'll find a solution to your business requirement, whatever it may be.

    Have a nice day!

  • Suggested answer
    nmaenpaa Profile Picture
    101,156 Moderator on 19 Nov 2021 at 12:14:47
    RE: Iterate Datasource records in Reverse.

    Also having a display method that iterates every record on the form doesn't sound like a good design.

    Let's say you have a grid with 20 records, and this display field is shown on the grid.

    When the form is opened, the system has to iterate all the records 20 times (one for each time the display method is shown = one for each record visible on the form). This sounds pointless.

    You were discussing this display method requirement in another question, so I don't wish to handle it more here. But I think you might get alternative suggestions for solving your business requirement if you just shared your business requirement there. The quality of help you get (and the quality of the result that you will achieve) depends on the quality of the information that you share when asking for help. And I want to help you achieving best possible quality in your work. 

  • OsamaAG Profile Picture
    65 on 19 Nov 2021 at 12:12:30
    RE: Iterate Datasource records in Reverse.

    nmaenpaa, I debugged the code and from there I identified this issue of records in reverse.

    I would love to provide you with screenshots of the data to better clear the problem but In my case it might not be possible for me. I hope you don't mind.

  • nmaenpaa Profile Picture
    101,156 Moderator on 19 Nov 2021 at 11:50:18
    RE: Iterate Datasource records in Reverse.

    Hi,

    could you please share some screenshots about the situation? Just to make sure there are no misunderstandings.

    1) A screenshot of the records on the form

    2) Write the ID of each record to infolog in your while loop, and share a screenshot that shows the result

    Thanks!

  • OsamaAG Profile Picture
    65 on 19 Nov 2021 at 11:43:03
    RE: Iterate Datasource records in Reverse.

    Yes nmaenpaa The sequence is reversed from what I see on the form. Not random but totally reverse.

    I am doing code in display method like this :

    displayMethod(MyTable _myTable)
    {
    FormDataSource ds=_myTable.datasource();
    MyTable temp=ds.getFirst() as MyTable;
    
    while(temp)
    {
    
    //// My work here
    
    temp=temp.getNext() as MyTable;
    }
    
    }

  • Suggested answer
    nmaenpaa Profile Picture
    101,156 Moderator on 19 Nov 2021 at 11:33:49
    RE: Iterate Datasource records in Reverse.

    Hi,

    are you saying that you get them in different sequence than what you see in the form? Are you 100% sure? For me it returns the records in the same sequence than what I see in the form. So perhaps you're misinterpreting the results.

    Anyway, I don't think that you can impact what the "getFirst" and "getNext" will return. But you can most likely design your own solution in a way that can handle how the system provides them. And you can even take the data source query, add your own sorting logic and then run the query in your code to get the records in the sequence that you want.

    But like I said, to me it seems that the system already works like you are asking. Perhaps there's something wrong with your code. Did you share your actual code with us? Or something else? To me it seems that the code that you shared doesn't do much. 

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Daivat Vartak – Community Spotlight

We are honored to recognize Daivat Vartak as our March 2025 Community…

Announcing Our 2025 Season 1 Super Users!

A new season of Super Users has arrived, and we are so grateful for the daily…

Kudos to the February Top 10 Community Stars!

Thanks for all your good work in the Community!

Leaderboard

#1
André Arnaud de Calavon Profile Picture

André Arnaud de Cal... 292,865 Super User 2025 Season 1

#2
Martin Dráb Profile Picture

Martin Dráb 231,723 Most Valuable Professional

#3
nmaenpaa Profile Picture

nmaenpaa 101,156 Moderator

Leaderboard

Product updates

Dynamics 365 release plans
Loading complete