Войти
 
 
   
 
  
Новости Notes.ру Библиотека Биржа труда Вопрос - ответ Форум Регистрация Поиск О проекте
Разделы
О Notes
Советы
Шаблоны и примеры
Литература
Презентации
 
Java: внутри файла MS Excel 2007. Часть четвёртая   В публикуемой сегодня части статьи заканчивается описание процедур загрузки электронной таблицы и начинается описание самого интересного - каким образом получить данные, хранящиеся в ячейках таблицы
Шаблоны и примеры Читать статью
 
Java: внутри файла MS Excel 2007. Часть третья   В предлагаемой вниманию читателя третьей части статьи о структуре файла электронной таблицы Microsoft Excel формата 2007 речь идёт о коде Java, "разархивирующем" файловый поток и формирующем объекты, с которыми предстоит взаимодействовать при дальнейшей обработке данных электронной таблицы
Шаблоны и примеры Читать статью
 
Java: внутри файла MS Excel 2007. Часть вторая   В настоящем материале автор постарается систематизировать свои знания о том, как устроено хранение данных электронной таблицы, и презентовать небольшую Java-библиотеку, предоставляющую возможность чтения данных и заполнения файла электронной таблицы Microsoft Excel
Шаблоны и примеры Читать статью
 


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

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

Паттерны. Часть 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
Комментарий * :
Код подтверждения * :


Мероприятия
Пресс-релизы
Биржа труда
Последнее на форуме
 
А так же:
Lotus notes и ЭЦП
29.09.2017 17:16:14
Как удалить профиль?
16.04.2016 00:08:51
Скопировать в буфер поле документа
24.05.2015 08:55:52
 
© LOGOSPHERE.RU