Выполнение формул, содержащих вызовы @-команд
Функция @PostedCommand используется в 4-й и выше версиях Domino как замена для @Command 3-х с целью обеспечения совместимости, поскольку @Command 4-й и выше версии выполняется иначе. Формула с @Command, написанная в 4-й и выше версии не может быть выполнена в 3-й.
При выполнении указанных в формуле действий Domino всегда выполняет функции @PostedCommand (как @Command в 3-й версии) в последнюю очередь. Если в формуле имеется несколько вызовов функции @PostedCommand, они обрабатываются в порядке появления, но после всех остальных операторов и @-функций. Даже если для изменения порядка действий используется @Do, функции @PostedCommand выполняются в последнюю очередь.
Например, предположим, что приведенная ниже формула содержит ряд выражений, заключенных в скобки внутри функции @Do:
FIELD X :=
@If( условие;
@Do( @PostedCommand1; @Prompt; @PostedCommand2 );
@Error )
При вычислении, если условие истинно, указанные в @Do действия будут выполняться в следующем порядке:
(1) @Prompt
(2) @PostedCommand1
(3) @PostedCommand2
@Do выполняет все, не относящиеся к @PostedCommand действия в порядке слева направо; а после их завершения выполняет все @PostedCommand в том же порядке.
Предположим, вы пишете формулу, которая должна выполнять @PostedCommand, проверку @If, а затем несколько других действий, за которыми следует еще одна @PostedCommand. Domino выполнит действия в такой последовательности: проверка условия и соответствующее действие, затем прочие "обычные" действия, затем обе @PostedCommand.
Программа
(4) @PostedCommand( [имя_команды]; параметр );
(1) @If( Условие; True_действие; False_действие );
(2) FIELD X := "Текст";
(3) FIELD Y := "Следующий текст";
(5) @PostedCommand( [имя_команды] )
Чтобы "заставить" Domino выполнить первую @PostedCommand перед проверкой @If и следующими за ней действиями, можно создать формулу-подпрограмму (ее нужно определить в "Run once" - агенте) и запускать ее с помощью дополнительной @PostedCommand:
Программа ( в акции, кнопке, кнопке панели инструментов, гиперобъекте, Run once - агенте)
(1) @PostedCommand( [имя_команды]; параметр );
(2) @PostedCommand( [ToolsRunMacro]; "(Subprogram)" )
(Подпрограмма) (Run once - агент, запускаемый из списка агентов, с именем Subprogram)
(3) @if( Условие; True_действие; False_действие )
(4) FIELD X := "Текст";
(5) FIELD Y := "Следующий текст";
(6) @PostedCommand( [имя_команды] )
Вызовы функций @Command происходят при выполнении формулы в том порядке, в котором встречаются (вместе с другими операторами и @-функциями). Однако имеются исключения из этого правила. Перечисленные ниже в таблице типы @Command выполняются аналогично @PostedCommand, то есть после всех остальных действий. В R 6 добавлен целый ряд однотипных команд, которые выполняют те же действия, но немедленно, а не после других команд:
Команда, выполняющаяся после всеx остальных @-команд |
Новый аналог в R 6, выполняющийся немедленно |
[EditClear] |
[Clear] |
[EditProfile] |
[EditProfileDocument] |
[FileCloseWindow] |
[CloseWindow] |
[FileDatabaseDelete] |
[DatabaseDelete] |
[FileExit] |
[ExitNotes] |
[Folder] |
[FolderDocuments] |
[NavigateNext] |
[NavNext] |
[NavigateNextMain] |
[NavNextMain] |
[NavigateNextSelected] |
[NavNextSelected] |
[NavigateNextUnread] |
[NavNextUnread] |
[NavigatePrev] |
[NavPrev] |
[NavigatePrevMain] |
[NavPrevMain] |
[NavigatePrevSelected] |
[NavPrevSelected] |
[NavigatePrevUnread] |
[NavPrevUnread] |
[ReloadWindow] |
[RefreshWindow] |
[ToolsRunBackgroundMacros] |
[RunSheduledAgents] |
[ToolsRunMacro] |
[RunAgent] |
[ViewChange] |
[SwitchView] |
[ViewSwitchForm] |
[SwitchForm] |