|
После объявления всех переменных инициализируются объекты db, collection и note. Далее идет цикл Do…Until на основе условия: указывает ли ссылка note на какой-либо документ. Сначала внутри цикла проверяется, создан ли документ по форме REQ. Если это не так, то переходим к следующему документу. Если документ создан на основе формы REQ, то проверяются остальные условия: документ не завершен и срок его исполнения уже истек. Если любое из этих условий не выполняется, то переходим к следующему документу (выполняется оператор, стоящий перед Loop). Если же оба условия выполняются, то мы должны отправить сообщение по электронной почте. Для этого создается новый объект memo класса NotesDocument, и в нем задаем поля Form, SendTo, Subject. В основной части письма будут находиться короткое сообщение, напоминающее пользователю о невыполненном задании и ссылка на незавершенный документ.
В данной программе-агенте для форматирования поля Body используются методы AddNewLine, AppendText, AppendDocLink класса NotesRichTextItem, позволяющие легко производить различные действия над форматированным текстом. Сначала, используя метод AppendText, добавляем в поле Body текст «Напоминаем, что у вас есть невыполненное задание!». Затем, используя метод AddNewLine, добавляем 2 пустые строки. Далее с помощью метода AppendText добавляем текст «Нажмите на этой ссылке, чтобы увидеть незавершенный документ!». И, наконец, применяя метод AppendDocLink, отображаем ссылку на незавершенный документ.
У метода AppendDocLink существует один обязательный параметр – документ, на который указывает ссылка, и один необязательный параметр, представляющий собой текст, который отображается в строке состояния окна Notes, когда курсор устанавливается на ссылке.
После создания объекта memo отправляем его (метод Send, параметр false означает, что при отправке документа к нему не будет присоединена форма), переходим к следующему документу и повторяем весь процесс.
Для действий над форматированным текстом можно применять и другие методы класса NotesRichTextItem. Например, метод AppendRTFile позволяет присоединять файлы, а метод EmbedObject – создавать встроенные объекты, такие как электронные таблицы и презентации.
Метод Timedifference возвращает разницу между cutoff и duedate в секундах (cutoff–duedate). Свойство DateTimeValue возвращает значение даты-времени в элементе (т.е. фактически в поле). Этот метод применим только к элементам даты-времени. Если элемент другого типа, то возвращается Nothing.
69 Работа с идентификаторами документов в языке формул
1) Функция @DocumentUniqueID
Область применения: нельзя использовать в формулах навигатора. В формулах полей создает ссылку (DocLink) на текущий документ.
Данная функция возвращает так называемый универсальный идентификатор документа (UNID) – 32-х символьную комбинацию шестнадцатитиричных цифр, уникально идентифицирующую текущий документ во всех репликах распределенной базы.
Универсальный идентификатор документа можно посмотреть в окне свойств документа на последней закладке в первых двух строках после метки ”ID”, отбросив символы OF в начале и ON в середине.
Рисунок 2 – Последняя закладка свойств документа
Domino генерирует универсальный идентификатор при создании документа. Первые его 16 символов представляют собой дату-время создания документа (с точность до тиков), а вторые 16 символов – случайное число. Domino проверяет, не оказалось ли в текущей реплике базы документа с таким же универсальным идентификатором, и если это так, то снова случайно генерирует вторые 16 символов. После сохранения документа в базе данных его универсальный идентификатор не изменяется. Исключение составляют случаи, когда документ копируется в базу через буфер обмена или пересылается почтой – перед помещением документа в базу проверяется, не существует ли в ней уже документ с таким же универсальным идентификатором, и если это так, то для добавляемого в базу документа генерируется новый универсальный идентификатор. С помощью Lotus Script программист может самостоятельно изменять UNID документа, но в этом случае необходимо самостоятельно заботиться об уникальности UNID.
Третья и четвертая строки после метки ”ID” содержат информацию, специфичную в каждой реплике распределенной базы [9].
Многие понятия и алгоритмы Domino, прежде всего «дерево» документов-ответов, базируются на универсальных идентификаторах документов. Так документ-ответ всегда содержит предопределенное поле с именем $Ref, в котором хранится уни в ерсальный идентификатор документа-родителя для данного документа-ответа. В поле $Ref отображается на 2 символа больше (всего 34): добавляются символы F и N (из OF и ON соответственно).
Пример. Формула столбца представления выводит в этом столбце для некоторого документа его UNID.
@Text (@DocumentUniqueID)
2) Функция @InheritedDocumentUniqueID
Область применения: нельзя использовать в формулах навигатора. Предназначена для работы с документами, созданными по форме с включенной опцией наследования полей. Если опция не включена, то возвращает такое значение, что и функция @DocumentUniqueID. В формулах полей создает ссылку (DocLink) на текущий документ.
Данная функция возвращает универсальный идентификатор документа, который был текущим в момент создания документа, в котором используется эта функция.
3) Функция @NoteID
Область применения: нельзя использовать в формулах формы и навигатора.
Данная функция возвращает восьмисимвольный идентификатор документа в базе – строку с префиксом NT, например, NT000008FA (последняя строка последней закладки в окне свойств документа, см. рис. 2.1). @NoteID уникально идентифицирует документ только в текущей базе данных.
4) Функция @GetDocField(UNID; имя_поля)
Область применения: нельзя использовать в формулах отбора, колонок, всплывающих окон и навигатора.
Для текущей базы данных функция возвращает значение поля с именем имя_поля из документа с универсальным идентификатором UNID. Параметр имя_поля – строка, указывается в кавычках. Возвращаемое значение зависит от типа поля: строка или список строк, число или список чисел, дата-время или временной диапазон. Если задан не существующий UNID или поле, то возвращается пустая строка.
Пример. Вычисляемое поле в документе-ответе всегда будет содержать значение поля Subject из главного документа. Когда создается новый документ-ответ, то значение в вычисляемом поле наследуется из главного документа.
@If (@IsNewDoc; Subject; @GetDocField ($Ref; ”Subject”))
5) Функция @SetDocField(UNID; имя_поля; новое_значение)
Область применения: нельзя использовать в формулах отбора, колонок, всплывающих окон и навигатора.
Для текущей базы данных функция присваивает новое значение полю с именем имя_поля в документе с универсальным идентификатором UNID. Параметр имя_поля – строка, указывается в кавычках. Параметр новое_значение должен соответствовать типу поля.
Функция @SetDocField наиболее часто используется в формулах полей, кнопок, агентов.
Пример. Формула кпопки-действия в документе-ответе изменяет значение поля Subject в главном документе:
@SetDocField ($Ref; ”Subject”; ”Новое значение”)
71. Установка уровней безопасности в Notes
Ответственность за работу с владельцами и пользователями приложений лежит на разработчике базы данных, именно он определяет права доступа пользователей приложения. Владелец – лицо или группа лиц, наделенная полномочиями, позволяющими им изменять дизайн приложений. Владельцы дизайна определяют пути и методы разработки. Пользователи – это не только те, кто вводит данные в базу данных, но и те, кто пользуются информацией из приложения. Существуют также многочисленные типы пользователей с различными возможностями доступа. Типы доступа к приложению могут варьироваться от очень простого до очень сложного и строго контролируемого.
Для базы данных существует 7 уровней доступа. Привилегии доступа предоставляются отдельным лицам или группам в ACL (Access Control List) базы данных. Уровни безопасности баз данных, используемых в Domino, перечислены в таблице 20
Таблица 20 – Уровни безопасности баз данных Domino | ||
Уровень | Привилегии доступа | |
No Access | Нет; | |
Depositor | Позволяет создавать и сохранять документы, но не позволяет изменять или читать документы (даже собственные); | |
Reader | Позволяет читать документы, но не позволяет создавать или изменять их; | |
Author | Позволяет создавать или изменять свои собственные документы. Может также читать другие документы, удалять свои собственные; | |
Editor | Может создавать новые документы, редактировать свои и чужие документы. Может также удалять документы; | |
Designer | Editor + возможность изменять проект базы данных; | |
Manager | Designer + право изменять ACL. Этим уровнем полномочий обладает также администратор сервера Домино. При создании БД этот уровень получает создавший ее пользователь. |
Все перечисленные уровни присваиваются без различия типа пользователя – обычный пользователь, группа пользователей либо сервер. Необходимость настраивать доступ для сервера возникает, если в организации имеется несколько серверов Domino и есть необходимость обмениваться данными между ними. Для репликации данных может быть достаточно дать связанным серверам права уровня «Editor». Это позволит обмениваться документами, удалять их и изменять. Устанавливать уровень доступа «Designer» нужно только для серверов, с которых планируется менять структуру БД.
Дополнительная степень детализации уровней доступа может быть установлена с помощью ролей и специальных полей. Если приложение содержит несколько баз данных, то необходимо продумывать ACL для каждой из них.
Уровней доступа бывает достаточно не всегда. Например, автор не может изменить свой собственный документ до тех пор, пока форма не содержит в поле типа авторских данных имя этого автора. Никто на любом уровне ACL не может удалить документ из базы данных, если не установлен флажок Delete Documents.
Право доступа читателя можно уточнить с помощью поля типа Reader Names (имен читателей). Если документ содержит это поле, и в нем нет имени пользователя или группы, в которой пользователь состоит, то данный пользователь не сможет прочитать документ. На самом деле пользователь даже не будет знать о существовании документа.
Точно также в полях имен авторов можно ограничить право создавать и редактировать документы (авторское право), уточнив список пользователей или групп, которые могут создавать и редактировать документы.
72 Ограничение использования форм и представлений с помощью ролей
Роли используют, чтобы более точно настроить ограничения на доступ к базе данных. Роли создаются в ACL и используются таким же образом, как имена пользователей в формах и представлениях.
Пользователи распределяются по ролям точно так же, как и по группам. Отличительной чертой в этом случае является то, что группе тоже можно назначить роль. На самом деле, роль можно определить для любого субъекта из перечисленных. Но это является и недостатком ролей. Поэтому если определенную роль необходимо назначить только некоторым пользователям из группы, то приходится их имена указывать в ACL явно, а не в составе группы.
Роли появились в четвертой версии Lotus Notes.
Диалоговое окно ACL имеет 4 кнопки (закладки) в левой части окна: Basic (основные сведения), Roles (роли), Log (журнал), Advanced (дополнительные сведения).
Чтобы создать новую роль в базе данных необходимо:
1) Открыть окно ACL базы данных (File à Database à Access Control …);
2) Щелкнуть на закладке Roles;
3) Щелкнуть на кнопке Add;
4) Ввести имя новой роли и щелкнуть на кнопке OK;
5) Щелкнуть на кнопке OK для закрытия окна ACL.
Роли, заключенные в квадратные скобки, отображаются в окне Roles вкладки Roles и в нижнем правом окне Roles вкладки Basic. В базу данных можно добавить до 75 ролей. Имена ролей могут состоять из чисел, букв и пробелов. Первой в имени роли может идти цифра, пробелы лучше вообще не использовать (рекомендация IBM).
После того, как роль добавлена в базу данных, ее можно использовать для ограничения доступа и возможности изменения проекта базы данных. Как формы, так и представления в окне Properties имеют вкладку Security, в которой можно использовать роли. Она очень полезна, если в базе данных есть набор документов, в которых хранятся значения, обновляемые только небольшой группой пользователей (например, список, используемый в ключевом поле). Можно ограничить право доступа создания к форме, в которой хранятся списки, и право доступа чтения к представлению, которое показывает документы, созданные по этой форме, для группы пользователей. Значения из форм можно получить с помощью команд @Column и @LookUp, заданных для скрытых представлений.
Чтобы ограничить доступ к форме с помощью роли необходимо выполнить следующее:
1. Открыть форму в режиме проекта;
2. Открыть окно свойств формы Properties и щелкнуть на вкладке Security (вкладка с ключом);
3. Отменить отметку в поле All authors and above (все авторы и выше) в разделе Who Can Create Documents with This Form (кто может создавать документы с помощью этой формы) окна Properties;
4. Щелкнуть на роли в поле со списком и сохранить форму.
Таким же образом право доступа чтения к документам, созданным с помощью данной формы, можно ограничить, отменив установку флажка All readers and above (все читатели и выше) в разделе Default Read Access for Documents Created with This Form (стандартное право доступа для чтения документов, созданных по этой форме) окна Properties.
Для назначения роли пользователю или группе необходимо на вкладке Basic окна ACL отметить группу или отдельного пользователя в ACL и щелкнуть на соответствующей роли в поле списка Roles. Возле этой роли появится отметка.
В системе безопасности на уровне представлений роли используются точно так же. Чтобы ограничить доступ к представлению с помощью роли необходимо:
1. Открыть представление в режиме проекта;
2. Щелкнуть на вкладке Security окна View Properties;
3. Отменить установку флажка All readers and above (все читатели и выше) в разделе Who may use this view (может использоваться);
4. Щелкнуть на роли в поле со списком и сохранить представление.
Роли – это не единственное средство ограничения доступа к формам и представлениям. Таким же образом можно разрешить доступ группе или отдельному пользователю. Более того, использование ролей не отменяет действия ACL. Если пользователь имеет к базе данных право доступа Reader, то он может только читать документы. Даже если для данного пользователя добавить право доступа создания для формы, то он все равно не сможет создавать документы с помощью этой формы.
С помощью ролей можно также ограничить право доступа чтения и редактирования к личным документам. Для этого следует добавить роль в поле Reader Name или Author Name. Имя роли следует заключать в двойные кавычки и квадратные скобки, например, ”[Creator]”.
74 Скрытие кнопок и других объектов в зависимости от роли
Для работы с уровнями доступа используются следующие функции языка формул: @UserAccess, @UserRoles, @IsMember, @IsNotMember. Их можно использовать на закладке Hide When для написания формулы в окне формулы, с установленным флажком Hide…if formula is true (вместо … отображается имя объекта, например, Action).
1) функция @UserRoles
Область применения: нельзя использовать в формулах отбора, колонок и фоновых агентов. Функция предназначена для использования в базах данных, расположенных на сервере, или для локальных баз данных с установленным флажком ” Enforce a Consistent Access Control List across all Replicas ” (использовать единый ACL для всех реплик). Это свойство находится на вкладке Advanced окна ACL. Для локальных баз данных без этого свойства функция всегда возвращает пустую строку.
Функция @UserRoles возвращает текстовый список имен ролей, на которые в ACL назначен текущий пользователь. Имена ролей заключаются в квадратные скобки.
2) функция @IsMember
Область применения: без ограничений.
Функцию можно записать в нескольких форматах:
@IsMember (строка; список_строк)
@IsMember (список_строк1; список_строк2)
Возвращает 1(True), если строка является элементом списка строк; возвращает 0(False) в противном случае. Если оба параметра являются списками – возвращает 1(True), если все элементы списка_строк1 содержатся в списке_строк2. Функция учитывает регистр.
Дата добавления: 2015-09-10; просмотров: 82 | Поможем написать вашу работу | Нарушение авторских прав |