Уровень сложности: средний Йонас Израэльсон, ведущий разработчик Domino, консультант
07.02.2008 Узнайте о том, как использовать данные и структуру представления Domino в представлении, созданном на основе Macromedia Flash. Это решение позволит интернет-пользователям получать информацию из стандартных представлений Domino, а также обновлять структуру отдельного представления Domino одновременно для клиентских приложений Lotus Notes и приложений с Web-интерфейсом.
В данной статье рассказывается, как использовать информацию из представления IBM Lotus Domino в Macromedia Flash, основанном и контролируемом из простого представления Domino. Таким образом, вы сможете работать с одной и той же структурой и данными, представленными в Lotus Notes и Flash-интерфейсах пользователя, просто внося изменение в представление Domino.
Это решение позволит избавиться от необходимости использования временных HTML или XML-кодов в дополнительных представлениях для того, чтобы обеспечить одинаковое форматирование данных в Lotus Notes и Flash-интерфейсах. Вместо этого интерфейсы могут использовать одно и то же форматирование, когда вы создаете отдельное представление Domino, включающее форматирование заголовков столбцов или строк – например, размер шрифта, семейство шрифтов и жирность шрифта. Такое использование Flash для Web-клиента открывает возможности для встраивания шрифтов, используемых в Domino, во Flash-анимацию, которая будет прекрасно отображаться в Web-клиенте.
В статье описывается Flash-решение под названием FlashNotesView. Оно считывает содержимое и структуру простых представлений Domino и применяет их к Flash-интерфейсу, как показано на рисунке 1. Статья предназначена для опытных Flash-разработчиков, знакомых с языком ActionScript и имеющих опыт разработки приложений Lotus Notes/Domino.
Примечание: Приведенный в статье код хранится во внешнем файле ActionScript - FlashNotesView.as. Вы можете просмотреть этот код в текстовом редакторе, если у вас не установлен Macromedia Flash.
Рисунок 1. Просмотр окончательного результата FlashNotesView
Создание компонентов пользовательского интерфейса
Macromedia Flash изначально поставляется с определенным набором компонентов пользовательского интерфейса, но вы можете также использовать Macromedia Flash Exchange для добавления дополнительных компонентов. С их помощью вы можете создать интерфейс в Macromedia Flash, просто перетаскивая элементы в рабочее окно или используя код для создания экземпляров определенных классов во время выполнения программы.
Предположим, вы хотите создать что-то вроде простого представления Lotus Notes в Macromedia Flash. Для этого используется компонент DataGrid. Для создания компонентов во время выполнения программы нужно в начале Flash-анимации импортировать классы для трех компонентов: Label, List и DataGrid. Ниже приведены команды для их импорта:
import mx.controls.Label;
import mx.controls.List;
import mx.controls.DataGrid;
После того, как вы импортировали нужные классы, вы можете создать новые экземпляры классов во время выполнения программы, используя метод createClassObject:
lblSelectView = createClassObject(Label, "lblSelectView",
getNextHighestDepth()); lstSelectView= createClassObject(List,"lstSelectView",
getNextHighestDepth()); dgridView = createClassObject(DataGrid, "dgridView",
getNextHighestDepth()); |
Подготовка источника данных
Источник данных - это модель данных, просматриваемых с помощью таких компонентов, как List и DataGrid, которая, теоретически, представляет собой просто массив объектов. Применяя метод push класса Array, вы можете добавлять новые объекты в источник. Каждый объект в массиве также рассматривается как элемент источника данных, и каждый такой элемент представлен отдельной строкой в компонентах List или DataGrid. Для определения данных в компоненте List используйте следующий код:
var arrSelectViewDP = new Array();
arrSelectViewDP.push({label:"IBM Lotus software: Lotus Documentation",
data:"http://www.lotus.com/ldd/notesua.nsf/Date"});
В данной статье мы используем представления Domino из базы данных Lotus Documentation (notesua.nsf) из раздела developerWorks Lotus.
Назначение источника данных
Экземпляр компонента List имеет свойство dataProvider. Для назначения модели источника данных экземпляру List используйте следующую команду:
lstSelectView.dataProvider = arrSelectViewDP;
Данная команда заполняет компонент List элементами модели источника. Теперь необходимо настроить все то, что будет отображаться при первом запуске Flash-анимации. А затем добавить код, необходимый для извлечения содержимого и структуры в виде Domino, выбранного пользователем из компонента List во Flash-анимации. (Компонент List появляется в окне "Select view" на рисунке 1.)
Получение данных и структуры из представления Domino в формате XML
Для начала вы должны извлечь данные изпредставления Domino. Для этого в Lotus Domino доступны несколько URL-команд, например, ?OpenView, ?OpenDocument, ?OpenPage и ?ReadForm, но более предпочтительны: ?ReadViewEntries и ?ReadDesign.
Извлечение данных из представления Domino
Используя команду ?ReadViewEntries, вы можете извлечь данные из представления в формате XML вместо заданного. URL-синтаксис для данного запроса следующий:
http://www.lotus.com/ldd/notesua.nsf/Date?ReadViewEntries
Результат этой команды:
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Lotus-Domino (Release 7.0.1 - January 17, 2006 on Windows NT/Intel) -->
<viewentries toplevelentries="690">
<viewentry position="1" unid="E1EFAB2B58C8B68785257145005A41FC" noteid="86B6"
siblings="690">
<entrydata columnnumber="0" name="Date_Update">
<datetime>20060403</datetime>
</entrydata>
<entrydata columnnumber="1" name="Titles">
<text>Real-time access and data management for the intelligent
enterprise</text>
</entrydata>
<entrydata columnnumber="2" name="Language">
<text>English</text>
</entrydata>
</viewentry>
...
</viewentries> |
Извлечение структуры представления Domino
Новая информация для разработчиков: практически недокументированная URL-команда ?ReadDesign позволяет вам извлекать не содержимое представления, а его структуру в формате XML, т.е. информацию о форматировании заголовков столбцов и строк. URL-синтаксис для данного запроса следующий:
http://www.lotus.com/ldd/notesua.nsf/Date?ReadDesign
Результат этой команды:
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Lotus-Domino (Release 7.0.1 - January 17, 2006 on Windows NT/Intel) -->
<viewdesign rowlines="3" direction="0" spacing="1" columns="3"
totalscolor="#808080">
<column columnnumber="0" width="80" name="Date_Update" title="Last updated"
sort="true" sortdescending="true" resortascending="true" format="2"
listseparator="none">
<cfont style="r" size="7" color="#000000" face="Helvetica" />
<hfont style="b" size="7" color="#000000" face="Helvetica" />
<numberformat digits="0" format="general" />
<datetimeformat show="date" date="yearmonthday" time="hourminutesecond"
zone="never" />
</column>
...
</viewdesign> |
Извлекая структуру представлений Domino, вы можете получить во Flash-интерфейсе представления, сохраняющие настройки шрифтов и прочее форматирование Lotus Notes.
Создание XML-объектов
 |
Работа с XML в Macromedia Flash
Вы можете использовать класс XML в Macromedia Flash, чтобы пропустить пробелы, символы табуляции и пустой строки в XML-файле и выводить сообщение о завершении загрузки содержимого из файла data.xml. Для этого используйте следующий сценарий:
var xml = new XML();
xml.ignoreWhite = true;
xml.onLoad = function(success) {
if(success) trace("XML has successfully been loaded.");
}
xml.load("data.xml"); |
|
|
Как встроить XML, полученный из представления Domino, в компонент DataGrid Macromedia Flash? Для начала вам необходим XML-объект, который мог бы получить и обработать ответ на запрос, отправленный серверу. XML-объект XmlView содержит XML, присланный сервером; вы указываете объекту игнорировать символы пробела, табуляции и пустой строки (см. вставку справа "Работа с XML в Macromedia Flash"), т. к. вам не нужен XML, отформатированный для чтения пользователем.
Также при получении XML-результата от сервера должна выполняться функция:
var xmlView = new XML();
xmlView.ignoreWhite = true;
xmlView.onLoad = onXMLViewLoad;
Извлечение данных представления
 |
Извлечение структуры представления
Создайте дополнительный XML-объект, аналогичный xmlView с названием xmlViewDesign. Этот объект содержит XML, полученный из структуры выбранного представления:
xmlViewDesign.load(strView+"?ReadDesign");
Добавьте эту строку в функцию обработки XML – xmlView для того, чтобы она загружала структуру после успешной загрузки данных из представления.
|
|
Когда интерфейс запускается в Macromedia Flash, вы можете вызвать метод load XML-объекта, который инициирует загрузку XML-данных из представления, выбранного пользователем, как показано ниже:
xmlView.load(strView+"?ReadViewEntries");
Переменная strView содержит URL выбранного представления.
Заполнение DataGrid данными представления
После получения XML-данных из представления Domino, выполняются коды из обоих листингов, так как они были расположены внутри функции onXMLViewLoad. Используйте временный массив для фиксации XML-узлов, когда вы получаете результат в цикле.
var arrView = arrViewRows=arrViewCols=[];
В следующем листинге в цикле проходятся XML-узлы и создается временный объект objRow, который заполняется содержимым столбцов каждой строки представления Domino. Объект ОbjRow затем присоединяется к свойству dataProvider компонента DataGrid.
arrViewRows = xmlView.firstChild.childNodes;
for (var row = 0; row<(arrViewRows.length); row++) {
if (arrViewRows[row].nodeName == "viewentry") {
arrViewCols = arrViewRows[row].childNodes;
var objRow = new Object();
for (var col = (arrViewCols.length); col>=0; col--) {
if (arrViewCols[col].nodeName == "entrydata") {
objRow[arrViewCols[col].attributes.columnnumber] =
arrViewCols[col].firstChild.firstChild;
}
}
arrView.push(objRow);
}
}
dgridView.dataProvider = arrView;
// Очистим заголовок столбца datagrid
for (var col = 0; col<(dgridView.columnCount); col++) {
var column = dgridView.getColumnAt(col);
column.headerText = "";
} |
Для ясности изложения заголовки столбцов DataGrid здесь очищены и будут заполнены позже, когда вы примените структуру представления.
Применение структуры представления к DataGrid
Для применения настроек структуры представления вы должны добавить приведенный здесь код к функции onXMLViewDesignLoad, которая выполняется, когда вы получаете содержимое от команды ?ReadDesign. Снова используйте временные массивы для хранения XML-узлов, когда вы в цикле получаете результат.
var arrViewCols = [];
arrViewCols = xmlViewDesign.firstChild.childNodes;
for (var col = 0; col<(arrViewCols.length); col++) {
if (arrViewCols[col].nodeName == "column") {
var column = dgridView.getColumnAt(col);
column.headerText = arrViewCols[col].attributes.title;
column.width = int(arrViewCols[col].attributes.width);
column.resizable = Boolean(arrViewCols[col].attributes.resize);
column.setStyle("fontSize",
int(arrViewCols[col].firstChild.nextSibling.attributes.size));
column.setStyle("fontFamily",
arrViewCols[col].firstChild.nextSibling.attributes.face);
column.setStyle("color",
arrViewCols[col].firstChild.nextSibling.attributes.color);
}
}
dgridView.redraw(); |
Данный код перебирает столбцы, определенные в XML, и применяет настройки к соответствующим столбцам компонента DataGrid. Это происходит путем настройки соответствующих CSS-значений через свойство setStyle.
Данный код позволяет перенести из структуры представления следующие свойства:
- Текст заголовка столбца
- Ширина столбца
- Возможность изменения размера столбца
- Размер шрифта столбца
Конечно, вы можете с легкостью расширить этот список, добавляя соответствующий код, поддерживающий другие свойства.
Внедрение FlashNotesView.as в новые решения
Для того чтобы использовать FlashNotesView.as в начале новой Flash-анимации, например такой, какая включена в FlashNotesView_clean.fla, добавьте эту строку в первый кадр панели Actions своей Flash-анимации:
#include "FlashNotesView.as"
 |
Ограничения FlashNotesView-решений
На данный момент текущая версия FlashNotesView не поддерживает классифицированные представления. Одно из решений - это использование компонента TreeList для показа иерархии документов. |
|
Затем перетащите экземпляры Label, List и DataGrid из панели Components в рабочее окно, а потом удалите вновь созданные экземпляры. Так ваша Flash-анимация при компиляции Flash-файла включит эти вновь добавленные компоненты в формат ShockWave Flash (SWF), используемый Macromedia Flash Player. Так как фактический код находится во внешнем ActionScript-файле FlashNotesView.as, то это все, что вам необходимо проделать внутри Macromedia Flash.
Настройка собственного решения FlashNotesView
Кроме случаев, кода вы вносите изменения в FlashNotesView.as, вы должны использовать Macromedia Flash для компиляции Flash-файла (FLA) в SWF Flash-анимацию для Macromedia Flash Player. Во-первых, попробуйте настроить список представлений, доступных для выбора пользователя. Это нетрудно сделать, внеся изменения в код. Например, если вы хотите добавить какое-либо представление с форума Bob Balaban (Looseleaf), просто добавьте следующий код, в начале которого определен источник данных:
arrSelectViewDP.push({label:"Bob Balaban (Looseleaf) Forum",
data:"http://www.looseleaf.net/Looseleaf/Forum.nsf/
8178b1c14b1e9b6b8525624f0062fe9f"});
Примечание: Адрес URL должен включать любые существующие URL-команды, поэтому при копировании URL из интернета следует убрать из них ?OpenView.
Когда вы ближе познакомитесь с внесением изменений в решение, продумайте создание специального класса для расширения DataGrid, в котором будут содержаться предпочитаемые вами методы и свойства.
Безопасность
Если во время тестирования Flash-анимации FlashNotesView_final.swf появляется сообщение системы безопасности, следуйте инструкциям на экране, чтобы позволить локальному SWF-файлу получить доступ к внешнему адресу.
В 8 версии Macromedia Flash Player появился повышенный уровень безопасности, позволяющий Flash-анимации взаимодействовать только с внутренними системами того же домена. Чтобы обойти эту проблему, нужно создать текстовый файл (называемый файлом политик) на внутреннем сервере, с которым Flash-анимация может взаимодействовать. Затем просто добавьте в этот файл те домены, которым разрешено взаимодействие с текущим сервером.
Ниже приведен пример такого файла, который постоянно хранится на backendhost.com и получает запросы от clienthost.com:
<cross-domain-policy>
<allow-access-from domain="clienthost.com" />
</cross-domain-policy>
Имя файла политик - crossdomain.xml. О деталях улучшенной модели безопасности в Macromedia Flash Player 8 читайте в статье "Об изменениях в политиках безопасности Flash Player 8".
Заключение
Многофункциональные интернет-приложения, созданные на базе Flash-интерфейса, но по функциональной насыщенности сравнимые с приложениями для настольного компьютера и поддерживающие работу с видео и звуком, являются "горячей" темой Flash-разработок последних нескольких лет. Подобные приложения легче всего соединять с системами баз данных для доставки информации пользователям.
Вы можете пользоваться сервером Lotus Domino в качестве базы для интерфейсов, основанных на Flash, а также встраивать Flash-приложения в HTML-файлы, поставляемые из баз данных Domino на клиентские компьютеры, работающие на различных платформах. Кроме того, можно компилировать Flash-приложение в отдельный исполняемый файл, который можно записать на CD для распространения. Flash-приложение на CD сохраняет связь с внутренним сервером Domino, доступным через HTTP с клиентского компьютера. Это одно из преимуществ использования Macromedia Flash в качестве независимого презентационного уровня для решений, созданных на базе Domino, так же как и то, что при необходимости вы с легкостью можете использовать Flash-приложение для работы с другими внутренними системами.
Загрузка | Описание | Имя | Размер | Метод загрузки |
|---|
| Файл Flash ActionScript | FlashNotesView.as.zip | 2KB | HTTP |
|---|
| Пустой Flash-файл | FlashNotesView_clean.fla.zip | 5KB | HTTP |
|---|
| Flash-файл со всеми кодами и компонентами | FlashNotesView_final.fla.zip | 194KB | HTTP |
|---|
| Обработанная Flash-анимация | FlashNotesView_final.swf.zip | 62KB | HTTP |
|---|
Ресурсы Научиться
Получить продукты и технологии
Обсудить
Об авторе  | |  | Йонас Израэльсон (Jonas Israelsson) – ведущий разработчик Domino в Strand Interconnect, занимающийся вопросами разработки ролевых порталов. В сфере его интересов также лежит объединение интуитивных и функциональных пользовательских интерфейсов с логикой внутренних приложений. Вы можете написать ему на jonas.israelsson@strandinterconnect.se, а также заглянуть на его блог: http://www.israelsson.nu/blog/. |
Выскажите мнение об этой странице
|