Looping Through Enum

Sometimes you may need to loop through Enum. To do this, you can use List Data Type.

local procedure EnumLoop()
var
    MyEnum: Enum "My Enum";
    EnumIndex: List of [Integer];
    iMax, iLoop : Integer;
begin
    EnumIndex := ScanSource.Ordinals();
    iMax := EnumIndex.Count();

    If iMax <= 0 then
        exit;
    
    iLoop := 1;
    repeat //loop here
      MyEnum := EnumIndex.Get(iLoop);
      iLoop += 1;
    until iLoop > iMax;
end;

Edit: A few people asking why I use repeat until in here. The snippet code above is the result after multiple experiments of trying to find a way to loop through enum. The repeat until was just a “remnant” from previous attempt. It was not designed to be the best code, it was just to share one way to loop through enum. Unfortunately, not many people see it that way.

Anyway, to simplify the code, use code below.

local procedure EnumLoop()
var    
    currEnum: Enum "My Enum";
    currOrdinal : Integer;
begin
    foreach currOrdinal in Enum::"My Enum".Ordinals() do begin
       currEnum := Enum::"My Enum".FromInteger(currOrdinal);
       //do something here
    end;
end;

thatnavguy

Experienced NZ-based NAV Developer and Consultant with 15+ years of experience leading multiple IT projects, performing business analyst, developing, implementing, and upgrading Dynamics NAV and Business Central. Passionate to deliver solution that focuses on user-friendly interface while keeping high standard of compliance with the needs.

You may also like...

1 Response

  1. 19 April 2021

    […] So I came across this post from ThatNavGuy: Looping Through Enum – That NAV guy (wordpress.com) […]

Leave a Reply

Your email address will not be published. Required fields are marked *