Основы языка формул. Синтаксис и лексические элементы формул, страница 14

REM   "Записать   хронологию  документа";

jcApproval   :=   "Approved";

jcAreaMgr   :=   @Name([Abbreviate];  @UserName);

jdAreaMgr   :=   @Text(@Now;    "S2") ;

jcDocHistory:= "Request " + jcApproval + " by " + jcAreaMgr +

"   on   "   +   jdAreaMgr   ;

jcSignHistory := jcApproval + " by" + jcAreaMgr + " on " + @Text(@Today) ;

PSetField("cAreaSign";  @Trim(cAreaSign   : jcSiqnHistary) ] ;

REM   "Заполнить поле cDocHistory, если оно пустое";

jcFullName := cFirstName + " " + clnitial + " " + cLastName; 

@If (cDocHistory = ""; @SetField("cDocHistory"; "Request " + @If(cAccess =

"Delete User"; "to "; "for ") + cAccess + " for " + lcFullName +

" created on " + jdAreaMgr + " by " + jcAreaMgr) ; "") ;

REM "Теперь добавить данное событие в хронологию документа";

@SetField("cDocHistory" ; cDocHistory : jcDocHistory);

REM "Хронология голосования"; .

@SetField("cVote"; @Trim(cVote : jcApproval)) ;

@SetField("cVoter"; @Trim(cVoter : @Name([Abbreviate];@UserName)));

@SetField("dVote"; @If(dVote = ""; @Now; dVote : @Now)) ;

REM "Удалить имя пользователя из списка лиц,

REM которые должны одобрить документ";

jcApproverList := @Trim(@Replace(cApproverList ; cVoter; ""));

@SetField("cApproverList"; jcApproverList)

Это код программы-агента, с помощью которой подписывается документ. Список лиц, которые должны подписать документ, хранится в поле многих значений cApproverList. Когда кто-нибудь из них одобряет (визирует) документ, его имя удаляется из поля cApproverListи модифицируются несколько полей; таким образом осуществляется регистрация данного события.

Например, создается строка и добавляется в поле cAreaSign. Она конкатенируется с помощью оператора конкатенации (:) и добавляется в поле cAreaSignв качестве последнего элемента. Подобным же образом хронология документа запоминается в поле cDocHistory. Хронология голосования (voting history) запоминается в нескольких полях: cVote, cVoter и dVote.

Чтобы устранить имя лица, одобрившего документ, из поля cApproverList,это имя сначала заменяется с помощью функции @Replaceна строку со значение null, а затем эта строка удаляется из списка посредством функции @Trim. Полученный в результате этого список без имени лица, одобрившего документ, снова запоминается в поле cApproverList.

Обеспечение ввода пользовательской информации

Для получения информации, вводимой пользователем, используются несколько функций @Functions. Наиболее распространенной является функция @Prompt(), которая имеет несколько вариантов: от простого диалогового окна с кнопкой ОК до окна, допускающего выбор многих значений. Варианты функции @Prompt()перечислены в табл. 19.10.

Функция @DialogBox() может отображать любую информацию в форме, введенную пользователем, но наиболее эффективна она в том случае, если отображает форму, содержащую одну область компоновки. Используя функцию @DialogBox()таким способом, можно создавать стандартные диалоговые окна операционной системы Windows.

Функция @PickList() отображает в диалоговом окне представление и из заданного столбца возвращает значение для выбранного документа.

ПРЕДОСТЕРЕЖЕНИЕ

Следует с осторожностью использовать функции @Prompt(), @DialogBox() и @PickList() в программах-агентах. Программы-агенты, использующие язык формул, за один проход обрабатывают документ и не запоминают значения из одного документа в следующем  документе. Хорошей практикой является ограничение области действия программы-агента с помощью установки параметра Manually from Agent List (Вручную из списка программ-агентов), что предотвращает отображение программы-агента в меню Action. Такая программа-агент запускается с помощью кнопки в панели действий формы.

Таблица 19.10 - Варианты функции @Prompt()