Циклическое перебор записей таблицы «Действие страницы» приводит к сбою приложения?
Пишу в 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;
Пожалуйста, проверьте приведенный выше код, чтобы узнать, работает ли он у вас. Если это не так, не могли бы вы убедиться, что таблица не пуста, например, перейдя к таблице