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()
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.