Подписание агента на сервер.




В разделе, посвященном правам доступа, говорилось том, что для запуска агента на сервере, у дизайнера, его подписавшего, должны быть права запуска агентов на сервере. Сервер указывается в опции Schedule:

Чтобы эта опция была хорошо понятна, рассмотрим следующий вариант. Система стоит в 15 филиалах и одном главном офисе, а также на ноутбуках у сотрудников, находящихся в разъездах. В таких больших системах время от времени возникают конфликты репликации - то есть конкурентное редактирование одного и того же документа в разных филиалах. Необходимо настроить системные активности и потоки данных таким образом, чтобы обеспечить всем доступ к необходимой им информации, не увеличивать трафик, минимизировать количество конфликтов.

В таких случаях, необходимо нарисовать схему, входящие потоки данных, перемещение потоков, перечислить какие действия требуются от какого филиала и на каком множестве документов они осуществляются.

Необходимо достичь того, чтобы один и тот же агент не запускался на одном и том же документе (реплике документа) на разных серверах одновременно. Другими словами, можно либо ограничить агент одним сервером, на котором он пускается, а изменения внесенные агентом потом реплицировать на сервера, либо сделать так, чтобы агент пускался на всех серверах, но множество документов, поданных ему на вход - на всех серверах было разное.

Примеры:

Пример 1

Есть агент, работает с резюме раз в день и на основе даты рождения пересчитывает поле с возрастом сотрудника.

Есть два сервера, множество резюме на обоих серверах идентично. В этой ситуации необходимо, чтобы агент запускался только на одном из серверов и, желательно, ночью или в иное время минимальной активности пользователей. Тогда на сервере «А» посчитается возраст, и эта информация уйдет на сервер «Б». В противном случае - подписания агента на оба сервера - информация будет посчитана и изменена одним и тем же образом, но одновременно на разных серверах, что в результате породит конфликт.

Пример 2

Есть база резюме сотрудников предприятия, и приказов по предприятию. В каждом филиале есть только множество документов сотрудников этого филиала, а приказы во всех филиалах - все.

Есть агент, обрабатывает документы сотрудников и делает то же, что и в примере 1 - считает возраст. В данном случае множество документов, поданных на вход агенту - специфично для каждого филиала, поэтому правомочно включить агент на ВСЕ серверы. И на каждом сервере он обработает свое множество документов. Более того, если ограничить работу агента одним серверов, часть документов будет вообще не обработана. Часть агентов запускается локально. Они рассчитаны на работу удаленных пользователей, работающих на ноутбуках.

В опции «schedule» агента указывается, на каком сервере этот агент будет запускаться.

Писать агенты можно на Lotus script, Formula Language, Java или simple action - это набор простейших действий, которые можно просто выбрать из списка.

Чтобы написать агент надо владеть хотя бы одним из этих языков. Далее рассматривается специфичные Lotus языки - языки скрипт и формул.

 

Цель нижеприведенного описания, дать общие представления и базовые навыки. Более подробная информация размещена в HELP, где приведена полная спецификация всех объектов и конструкций.

Можно сказать, что Lotus script - это basic с набором классов для работы с объектами Lotus Notes и возможностями самому писать код, применяя объектно-ориентированный подход.

Для отладки скрипта можно включить отладчик - в клиенте «File >Tools >Debug lotus script». Формулы, к сожалению, отладке в отладчике не подлежат.

LotusScript. Типы и прочие сущности.

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

Простые типы.

Есть различные простые типы - строка, числовые типы с различным количеством байт для хранения. Таблица простых типов выглядит так:

 

 

Тип Значения Размер
Integer -32,768 до 32,767 2 bytes
Long -2,147,483,648 до 2,147,483,647 4 bytes
Single -3.402823E+38до 3.402823E+38 4 bytes
Double -1.7976931348623158+308 до 1.7976931348623158+308 8 bytes
Currency -922,337,203,685,477.5807 ДО 922,337,203,685,477.5807 8 bytes
String Ограничена доступной памятью (но помните при вставке значения в поле документа ограничения на поля текстового типа в 32К) 2 bytes/символ

Для декларации переменной какого-либо типа используется конструкция DIM имя переменной as имя типа, например Dim UserName_ as string присвоение значения делается так - UserName_="Bebebe zuzuzu"

Сложные типы.

Существуют более сложные конструкции:

Конструкция Описание Размер
Array Массив элементов одного типа. Может быть многомерным до 8 измерений. Каждый из индексов может варьироваться от -32,768 до 32,767. Декларируется так: Dim имя переменной с массивом (нижняя граница индекса to верхняя граница индекса) as тип данных Например: Dim my_array(0 to 14) as string Надо отметить, что массив может быть не только из простых типов, но из сложных, например массив объектов. Массив может быть динамическим, тогда он определяется изначально имеющим некоторое количество элементов и потом может быть переопределен. Например: Redim brdr (0 to 0) as string - это сначала задается динамический массив, потом он переопределяется: Redim brdr (0 to 8) as string - при переопределении сохраняется тип. Если в массив перед его переопределением уже введены значения элементов, например: Brdr(0)="XXX" Brdr(1)="ZZY" Тогда, переопределяя размерность, необходимо, чтобы заполненные значения не потерялись. Для этого необходимо написать следующее выражение - redim preserve brdr(0 to 10) as string Доступная память
List Одномерный массив элементов одного типа, которые вызываются не по индексу, а по уникальным именам. Декларация выглядит так: Dim aaa List As String Создание нового элемента или присвоение значения существующему: a("jan")="Январь" Чтобы обратиться к элементу и получить его значение: aaa("jan") Чтобы проверить наличие элемента в списке можно пользоваться функцией IsElement, If IsElement(aaa("jan")) then …… End if Чтобы по элементу получить его название в списке пользуйтесь функцией listTag. Эта функция работает только в цикле forall, который позволяет пробегать по всем элементам списка или массива: Forall a in aaa LastName=ListTag(a) End forall Для очищения списка или удаления конкретного элемента используется функция Erase aaa(), Erase aaa ("jan") Вся доступная память
Variant Этим типом при освоении лучше пользоваться по минимуму. В него можно вставить все, что угодно. Кроме того, если вы начинаете использовать переменную, НЕ ДЕКЛАРИРУЯ ее перед этим, то она по умолчанию имеет именно этот тип. То есть можно сделать так: Dim aaa (0 to 10) as string Aaa(0)=" XXX " Aaa(1)=" ZZY" Tmp=aaa После чего появится переменная tmp типа Variant, которая будет содержать массив 16 bytes
User-defined data type Определяемый пользователем тип - может содержать набор элементов разных системных типов. Это аналог record в Pascal или struct в C. Декларация выглядит так: Type phoneRec name As String areaCode As Integer phone As String * 8 End Type Перед типом можно указать его вид [ Public | Private ] Вообще, эти конструкции применимы и для деклараций других типов при объектном стиле написания кода. Смысл их аналогичен смыслу в других языках - приватные переменные видны только в классе, публичные доступны отовсюду. 64K bytes
User-defined class Класс, написанный пользователем – подробности смотрите дизайнер Help для описания всех конструкций.  
Object reference Ссылка на объект, который может быть, например, OLE Объектом или объектом Lotus или объектом, написанным пользователем. Такие ссылки декларируются, как и другие типы, просто вместо имени типа ставится имя объекта - например: Dim doc as NotesDocument При установке значения ВСЕГДА используется ключевое слово SET: Set doc=new NotesDocument(db) 4 bytes


Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: