Войти
 
 
   
 
  
Новости Notes.ру Библиотека Биржа труда Вопрос - ответ Форум Регистрация Поиск О проекте
Разделы
О Notes
Советы
Шаблоны и примеры
Литература
Презентации
 
Всё о задаче AdminP. Часть вторая   Во второй части мы завершаем рассмотрение AdminP. В ней рассмотрены запросы междоменного администрирования и способы управления функциями AdminP с помощью настроек документа сервера, команд консоли сервера, файла Notes.ini и интервалов очистки базы данных. В этой статье предполагается, что вы опытный администратор Domino и прочитали первую часть
О Notes Читать статью
 
Всё о задаче AdminP. Proxy-действия в R5 и Domino 6   Приложение к статье об административном процессе
О Notes Читать статью
 
Всё о задаче AdminP. Часть первая   Перевод классической статьи 2003-его года о задаче административного процесса (AdminP). Очень полезна для понимания работы механизма этой задачи. В первой части статьи описаны компоненты задачи AdminP, как они работают, и как их использование помогает сделать работу администратора Domino проще. Задача AdminP (сакращённо от Administration Process, Административный процесс) работает с базой административных запросов (Administration Requests, admin4.nsf)
О Notes Читать статью
 


Шаблоны и примеры

Главная   Библиотека   Шаблоны и примеры

Паттерны. Часть 1. Фасад

Часть 1. Фасад
Часть 2. Фасад для абстрактного документа >>>
Часть 3. Фасад для документа >>>
Часть 4. Итератор >>>
Часть 5. Factory >>>

Денис Самойлович
Допустим, есть некий документ, в нем определенные поля которые нужно получать/устанавливать из скрипта. Существует множество способов сделать это. Рассмотрим некоторые из них.
1. Простейший вариант, использование расширенного синтаксиса
dim subject$
subject$ = doc.Subject(0)
...
doc.Subject = subject$
Вариант плох по многим причинам. В первую очередь, из-за того, что заранее неизвестно, есть ли это поле в документе или нет. Что приводит к сложноотлавливаемым ошибкам. Кроме того, нет контроля типов. Также легко ошибиться в написании поля, и это станет известно только на этапе выполнения.

2. Использование стандартных методов GetItemValue и ReplaceItemValue
dim subject$
subject$ = doc.GetItemValue("Subject")(0)
...
call doc.ReplaceItemValue("Subject", subject$)
Уже лучше. По крайней мере, мы застрахованы от случая, когда такого поля в документе нет (GetItemValue просто вернет пустую строку). Плюс ReplaceItemValue всегда устанавливает флаг Summary для поля, и его можно отобразить в виде. Но по-прежнему нет контроля типов, по-прежнему легко ошибиться при наборе имени поля.

3. использование констант для имен полей
const FN_SUBJECT = "Subject"
...
dim subject$
subject$ = doc.GetItemValue(FN_SUBJECT)(0)
...
call doc.ReplaceItemValue(FN_SUBJECT, subject$)
Почти идеальный вариант. Автоматически исчезает целый класс ошибок, связанных с неправильным набором имени поля. На этом варианте можно было бы и остановиться.

4. Но мы пойдем дальше и завернем документ в специальный класс
const FN_SUBJECT = "Subject"
...
Class Document
meDoc As NotesDocument
Sub New(doc As NotesDocument)
Set meDoc = doc
End Sub ' New
Property Get Subject As String
Subject = meDoc.GetItemValue(FN_SUBJECT)(0)
End Property ' Get Subject
Property Set Subject As String
call meDoc.ReplaceItemValue(FN_SUBJECT, Subject)
End Property ' Set Subject
End Class ' Document
...
dim facade as new Document(doc)
...
dim subject$
subject$ = facade.Subject
...
facade.Subject = subject$
Похоже, мы пришли обратно к самому первому способу (расширенный синтаксис). Но без недостатков. Чего и вам желаю.

Часть 1. Фасад
Часть 2. Фасад для абстрактного документа >>>
Часть 3. Фасад для документа >>>
Часть 4. Итератор >>>
Часть 5. Factory >>>

Читайте на Notesnet.ru
О пользе ООП при проектировании систем на платформе Lotus Notes/Domino >>>
Пример UI элемента на основе паттерна MVC >>>
Использование паттерна MVC в модальных диалоговых окнах >>>
 
  Опубликовано — 08/26/2009 |    

Denny, 09.09.2009 11:10:05:
2VladSh: эээ, "пардоньте за сиськи" (из Декстера). Ну да. Простите старого ветенерана. В старых версиях лотуса эта проблема имела место быть, сейчас видимо уже нет.

VladSh, 03.09.2009 19:17:53:
"По крайней мере, мы застрахованы от случая, когда такого поля в документе нет (GetItemValue просто вернет пустую строку)"
Денис, у меня аж случился "разрыв шаблона восприятия"...
doc.Subject(0) также само возвращает пустую строку!
Разница между вариантами 1 и 2 точно не в этом.



Добавить комментарий
Имя * :
e-mail
Комментарий * :
Код подтверждения * :


Мероприятия
Пресс-релизы
Биржа труда
Последнее на форуме
 
А так же:
Как удалить профиль?
16.04.2016 00:08:51
Скопировать в буфер поле документа
24.05.2015 08:55:52
Импорт DXL-описания документов в Lotus Domino. Одноимённые поля
16.04.2015 16:49:58
 
© LOGOSPHERE.RU