OBJECT Codeunit 86832 Current Object Management
{
  OBJECT-PROPERTIES
  {
    Date=04.09.14;
    Time=[ 4:20:17];
    Modified=Yes;
    Version List=;
  }
  PROPERTIES
  {
    OnRun=BEGIN
          END;

  }
  CODE
  {
    VAR
      NavApplicationObjectBaseType@1002 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Type";
      ThisObjectType@1001 : Text;
      ThisObjectID@1000 : Integer;
      Detected@1003 : Boolean;

    PROCEDURE Type@1() : Text;
    BEGIN
      IF NOT Detected THEN
        Detect;

      EXIT(ThisObjectType);
    END;

    PROCEDURE ID@2() : Integer;
    BEGIN
      IF NOT Detected THEN
        Detect;

      EXIT(ThisObjectID);
    END;

    LOCAL PROCEDURE Detect@3();
    VAR
      StackTrace@1100409001 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Diagnostics.StackTrace";
      ThisCodeunitType@1000 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Type";
      ThisType@1001 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Type";
      LastFrame@1100409004 : Integer;
      Continue@1003 : Boolean;
    BEGIN
      NavApplicationObjectBaseType :=
        NavApplicationObjectBaseType.GetType('Microsoft.Dynamics.Nav.Runtime.NavApplicationObjectBase');

      StackTrace := StackTrace.StackTrace;
      FindNextNavObject(StackTrace,ThisCodeunitType,LastFrame);

      REPEAT
        FindNextNavObject(StackTrace,ThisType,LastFrame);
        IF NOT ISNULL(ThisType) THEN
          Continue := ThisType.Equals(ThisCodeunitType)
      UNTIL NOT Continue;

      IF NOT ISNULL(ThisType) THEN
        ParseTypeName(ThisType.Name);

      Detected := TRUE;
    END;

    LOCAL PROCEDURE FindNextNavObject@4(StackTrace@1000 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Diagnostics.StackTrace";VAR ThisType@1002 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Type";VAR LastFrame@1001 : Integer);
    VAR
      Stop@1003 : Boolean;
    BEGIN
      REPEAT
        ThisType := StackTrace.GetFrame(LastFrame).GetMethod.DeclaringType;
        LastFrame += 1;
        Stop := LastFrame = StackTrace.FrameCount;
        IF (NOT Stop) AND (NOT ISNULL(ThisType)) THEN
          Stop := ThisType.IsSubclassOf(NavApplicationObjectBaseType) AND NOT (ThisType.BaseType.Equals(NavApplicationObjectBaseType));
      UNTIL Stop;

      IF LastFrame = StackTrace.FrameCount THEN
        CLEAR(ThisType);
    END;

    LOCAL PROCEDURE ParseTypeName@5(TypeName@1100409001 : Text);
    VAR
      RegEx@1100409000 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Text.RegularExpressions.Regex";
      Match@1100409002 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Text.RegularExpressions.Match";
      Groups@1100409003 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Text.RegularExpressions.GroupCollection";
      Group@1100409004 : DotNet "'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Text.RegularExpressions.Group";
    BEGIN
      RegEx := RegEx.Regex('(\D+)(\d+)');
      Match := RegEx.Match(TypeName);
      Groups := Match.Groups;
      ThisObjectType := Match.Groups.Item(1).Value;
      EVALUATE(ThisObjectID,Match.Groups.Item(2).Value);
    END;

    BEGIN
    END.
  }
}

