Циклическое перебор записей таблицы «Действие страницы» приводит к сбою приложения?

Пишу в AL код, чтобы вставить все действия всех страниц системы в таблицу, НО как-то зацикливаясьRecord "Page Action", В этом фрагменте кода я только что показал название действия, но все еще выполняю его.procedureне проявил никаких действий:

      procedure populateActions()
var
    PageAction: Record "Page Action";
begin
    PageAction.Reset();
    if PageAction.FindSet() then begin
        repeat begin
            Message(PageAction.Name);
        end until PageAction.Next() = 0;
    end;
end;

1 ответ

Не удалось воспроизвести в моем локальном докер-контейнере с установленным.

Получено сообщение со всеми названиями действий на странице:

Это код, который был использован:

      page 50103 PopulateActionsList
{
    ApplicationArea = All;
    PageType = List;
    UsageCategory = Administration;

    actions {
        area(Processing) {
            action(ActionName)
            {
                ApplicationArea = All;

                trigger OnAction()
                begin
                    PopulateActions();
                end;
            }
        }
    }
    procedure PopulateActions()
    var
        PageAction: Record "Page Action";
        TypeHelper: Codeunit "Type Helper";
        TextBuilder: TextBuilder;
    begin
        if PageAction.FindSet() then begin
            repeat
                TextBuilder.Append(PageAction.Name + TypeHelper.CRLFSeparator());
            until PageAction.Next() = 0;
        end;
        Message(TextBuilder.ToText());
    end;
}

Примечание. Если вы хотите отображать много сообщений, даже если только в целях отладки (если вы не хотите использовать отладчик VSCode), рекомендуется использовать тип данных TextBuilder . Это не только быстрее, но и позволяет открыть только одно диалоговое окно сообщения в конце процесса. Я не запускал ваш код, потому что он потребовал бы слишком много ресурсов и мне потребовалось бы слишком много времени, чтобы сидеть и ждать результатов (если к тому времени веб-клиент не выйдет из строя).

Я изменил ваш код так, чтобы в диалоговых окнах сообщений отображались только первые 5 записей. Таким образом, я также получаю первые 5 названий действий на странице: >пусто<,Центры ответственности,Макеты отчетов,Настройки приложения,Настройка.

          procedure populateActions()
    var
        PageAction: Record "Page Action";
        counter: Integer;
    begin
        PageAction.Reset();
        if PageAction.FindSet() then begin
            repeat begin
                Message(PageAction.Name);
                counter += 1;
            end until (PageAction.Next() = 0) or (counter = 5);
        end;
    end;

Пожалуйста, проверьте приведенный выше код, чтобы узнать, работает ли он у вас. Если это не так, не могли бы вы убедиться, что таблица не пуста, например, перейдя к таблицеили обратившись к серверу базы данных... хотя я был бы обеспокоен, если бы он был пуст.

Другие вопросы по тегам