Примечание редактора: Эта тема вам хорошо знакома? Хотите поделиться своим опытом? Примите участие в вики-программе по IBM Lotus.
| Вики по IBM Lotus Notes и Domino | Вики по Lotus Symphony |
|---|
Большинству разработчиков Lotus Notes знакомы трудности публикации данных из Lotus Notes. Разработчикам часто приходится объединять данные в приложениях Lotus Notes, создавать отчеты определенного формата или добавлять такие функции, как таблица DataPilot. Lotus Notes не поддерживает эти возможности стандартно.
Начиная с версии 8, в Lotus Notes входит бесплатный набор деловых инструментов IBM Lotus Symphony, который можно установить с клиентом Lotus Notes. Он включает следующие приложения:
- текстовый процессор Lotus Symphony Documents;
- программа для работы с электронными таблицами Lotus Symphony Spreadsheets;
- программа для создания презентаций Lotus Symphony Presentations.
Как разработчик Lotus Notes, вы можете создавать решения для публикации данных с помощью инструментария Lotus Symphony для Lotus Notes. Такие решения могут публиковать информацию, хранящуюся в базах данных Lotus Notes. Инструментарий поддерживается в Lotus Notes 8.5.1 и более поздних версиях. Эта статья посвящена публикации документов с помощью Lotus Symphony Documents и Lotus Symphony Spreadsheets.
Она содержит фрагменты кода, примеры и предлагает образец базы данных, который можно загрузить. В примере приложения Lotus Notes используются следующие агенты:
- Создание документа Lotus Symphony. Простой агент для генерации документа Lotus Symphony. В этот агент входят также полезные советы по созданию документов и работе с ними в скрытом режиме.
- Создание электронной таблицы Lotus Symphony. Простой агент для генерации электронной таблицы Lotus Symphony.
- Пример отчета в форме документа. Агент, который продолжает работу с примером документа Lotus Symphony, создавая отчет на основе данных Lotus Notes.
- Пример отчета в форме электронной таблицы. Агент, который продолжает работу с примером электронной таблицы Lotus Symphony, создавая отчет на основе данных Lotus Notes.
Чтобы использовать код, представленный в этой статье, нужно разрешить работу инструментария Lotus Symphony. Это необходимо, так как примеры написаны в виде агентов, вызываемых пользователем, которые работают на локальной системе.
И этот инструментарий поддерживается только на системах Microsoft Windows и Linux.
Наконец, Lotus Symphony поддерживает следующие форматы файлов:
- Open Document Format (ODF) 1.1 – чтение/запись;
- Microsoft 97-2003 – чтение/запись;
- Microsoft 2007 DOCX – чтение;
- Lotus SmartSuite – чтение;
- Comma-separated value (CSV) / Tab-separated value (TSV) – чтение.
В данной статье предполагается, что вы знакомы с LotusScript и идеей объектных моделей.
Данный раздел посвящен основам создания дескрипторов приложений Lotus Symphony и связанных с ними объектов. Для справок приведен пример кода; все примеры содержатся в образце приложения.
Создание ссылок на приложения Lotus Symphony
Первым шагом в обмене данными между Lotus Notes и другими приложениями является получение ссылки на целевое приложение. Хотя в простом приложении создавать ссылку не обязательно, включение ссылки на файл Lotus Symphony LSS позволяет использовать константы, связанные с обычными действиями, такими как определение форматов шрифтов, указание типов диаграмм и задание форматов файлов.
(Options)
%INCLUDE "symphonylsx.lss"
Чтобы определить размер переменных объекта для представления приложений Lotus Symphony и типы объектов, создадим ссылку на приложение Lotus Symphony:
'Следующая строка создает дескриптор
'объекта приложения Symphony.
Dim symphony As New SymphonyApplication
С этого момента этим приложением можно управлять с помощью LotusScript, выполняя такие действия, как создание или открытие документов, передача текста и форматирование этого текста (листинг 1).
Листинг 1. Создание ссылки на документы и нового документа
'Следующие строки будут отображать 'коллекцию документов и объект документа. Dim symDocuments As SymphonyDocuments Dim symDocument As SymphonyDocument |
Вот список из трех классов объектов приложений Lotus Symphony, которые можно использовать:
- SymphonyApplication.Documents
- SymphonyApplication.Spreadsheets
- SymphonyApplication.Presentations
Создание документа Lotus Symphony
Отталкиваясь от предыдущего фрагмента кода, можно передать текст в документ Lotus Symphony с использованием LotusScript. Однако сначала необходимо получить ссылку на новый документ, как показано в листинге 2.
Листинг 2. Получение ссылки на новый документ
'Следующая строка создает дескриптор 'коллекции документов Symphony, а также 'новый документ Set symDocuments = symphony.Documents Set symDocument = symDocuments.AddDocument() |
Во второй строке мы опускаемся вниз по объектной модели Lotus Symphony от объекта приложения к коллекции документов внутри этого приложения. Затем используем метод Add, который создает документ и возвращает ссылку на него.
Чтобы увидеть объектную модель документа или приложения Lotus Symphony, можно открыть документ и выбрать из меню Tools – Macros – Macro. Откроется окно, показанное на рисунке 1.
Рисунок 1. Окно Macro
При нажатии кнопки Edit откроется окно редактора BASIC, показанное на рисунке 2.
Рисунок 2. Окно редактора BASIC Lotus Symphony
Затем нажмите кнопку Object Catalog, которая выделена на рисунке 3.
Рисунок 3. Кнопка Object Catalog
Откроется окно Object Organizer, как показано на рисунке 4.
Рисунок 4. Окно объектов
В окне приведен список всех существующих объектов в иерархическом представлении. При двойном щелчке на списке открываются подчиненные объекты.
Другой вариант заключается в использовании вкладки ссылок Lotus Domino Classes, как показано на рисунке 5. Эта вкладка доступна при редактировании агента LotusScript в IBM Lotus Domino Designer.
Рисунок 5. Вкладка Reference в Lotus Domino Designer отображает классы Lotus Symphony
Объект SymphonyDocument содержит множество методов, которые стоит просмотреть. Однако прежде чем начать ввод текста в документ, нужно подумать о том, где находится курсор. Даже если вы выполняете действия с документом программно, Lotus Symphony ведет себя так, как будто человек работает с ним вручную.
Например, при создании документа Lotus Symphony в Lotus Notes курсор отображается в верхней части страницы. То же самое происходит и при программном создании документа. Поэтому давайте воспользуемся объектом Selection.Range:
Dim txtRange As SymphonyTextRange
Set txtRange = symDocument.Selection.Range
Эти две строки кода предоставят ссылку на объект SymphonyTextRange. Теперь можно использовать свойство Text для ввода текста в документ.
В объект Selection входит свойство Text, которое используется для передачи документу строки символов в текущем диапазоне:
txtRange.Text = "Hello, world!"
Этот код передает пресловутую текстовую строку "Hello, world!" в активный документ, начиная с текущей позиции курсора.
Если нужно отформатировать текст в документе Lotus Symphony, выберите текст, а затем примените форматирование. Например, можно выделить только что введенную строку "Hello, world!" жирным шрифтом.
txtRange.Font.Bold = True
Этот код применяет форматирование bold к выбранному диапазону.
Создание электронной таблицы Lotus Symphony
С помощью аналогичного кода можно создавать таблицы Lotus Symphony, как показано в листинге 3.
Листинг 3. Создание электронной таблицы Lotus Symphony
(Options) %Include "symphonylsx.lss" Dim symphony As New SymphonyApplication Dim symSheeets As SymphonySpreadsheets Dim symSheet As SymphonySpreadsheet Set symSheets = symphony.Spreadsheets() Set symSheet = symDocuments.AddSpreadsheet() |
Итак, мы следовали процессу, начав с самой высокоуровневой объектной модели (объект SymphonyApplication) и опускаясь вниз. Используя переменные Variant, мы получили ссылки на различные часто используемые объекты. Полный код приведен в листинге 4. Вы можете скопировать и вставить его в агент, а затем шаг за шагом проследить его в действии с помощью отладчика LotusScript.
Листинг 4. Полный код для ознакомления
Dim symphony As New SymphonyApplication Dim symDocuments As SymphonyDocuments Dim symDocument As SymphonyDocument Set symDocuments = symphony.Documents Set symDocument = symDocuments.AddDocument() Dim txtRange As SymphonyTextRange Set txtRange = symDocument.Selection.Range txtRange.Text = "This is my first Symphony document!" txtRange.Font.Bold = True Set txtRange = symDocument.Paragraphs.Item(2).Range txtRange.Font.Bold = False txtRange.Text = "This is great!" |
Создание отчета в форме документа Lotus Symphony
Рассмотрим такой сценарий: вы руководите разработкой программы и используете приложение Lotus Notes для отслеживания проектов этой программы. Вам регулярно требуется информация об одном или нескольких проектах и связанных с ними затратах.
Вы знакомы с работой с объектами Lotus Notes и объектами Lotus Symphony, предоставляемыми этим инструментарием. С помощью кода, аналогичного коду из листинга 5, можно создать агент, который создает желаемый отчет. В образце базы данных есть представление All Projects и образец агента Sample Document Report.
Листинг 5. Пример кода для создания отчета в форме документа Lotus Symphony
%REM
Agent 3) Sample Document Report
Created Jul 23, 2009 by Symphony Developer/Symphony Developer
Description: Comments for Agent
%END REM
Option Public
Option Declare
%Include "symphonylsx.lss"
Sub Initialize()
'Declare the Notes object variables
Dim sess As New NotesSession
Dim db As NotesDatabase
Dim v As NotesView
Dim vnav As NotesViewNavigator
Dim entry As NotesViewEntry
Dim doc As NotesDocument
Dim colCosts As NotesDocumentCollection
Dim cost As NotesDocument
Dim mgr As String
Dim planned As Currency
Dim actual As Currency
Dim variance As Currency
Dim cuser As NotesName
Set db = sess.Currentdatabase
Set v = db.GetView("All Projects")
Set vnav = v.Createviewnav()
Set entry = vnav.Getfirstdocument()
If entry Is Nothing Then
MsgBox "No documents found", , "Exiting"
Exit sub
End If
'Declare the Symphony object variables
Dim symphony As New SymphonyApplication
Dim rptDoc As SymphonyDocument
%REM
Generally, I would create the document in "invisible" mode. To
see this is action, uncomment the following line and comment the
line after the next REM block.
%END REM
'Set rptDoc = symphony.Documents.AddDocument("", False, False)
%REM
I typically use the following line during development/debugging,
then switch to the line above for production.
%END REMП
Set rptDoc = symphony.Documents.AddDocument()
Dim txtRange As SymphonyTextRange
Set txtRange = rptDoc.Selection.Range
txtRange.Text = "Project Summary Report"
txtRange.Horialignment = SYMPHONY_TEXT_HORI_ALIGN_CENTER
txtRange.Font.Bold = True
txtRange.Font.Height = 16
Call txtRange.InsertBreak(txtRange.End, SYMPHONY_TEXT_BREAK_PARAGRAPH)
Set txtRange = rptDoc.Paragraphs.Item(2).Range
txtRange.Text = "prepared " & CStr(Today)
Call txtRange.InsertBreak(txtRange.End, SYMPHONY_TEXT_BREAK_APPEND_PARAGRAPH)
Set txtRange = rptDoc.Paragraphs.Item(3).Range
Set cuser = New NotesName(sess.Commonusername)
txtRange.Text = "by " & cuser.Common
Call txtRange.InsertBreak(txtRange.End, SYMPHONY_TEXT_BREAK_APPEND_PARAGRAPH)
Call txtRange.InsertBreak(txtRange.End, SYMPHONY_TEXT_BREAK_APPEND_PARAGRAPH)
Set txtRange = rptDoc.Paragraphs.Item(5).Range
txtRange.Horialignment = SYMPHONY_TEXT_HORI_ALIGN_LEFT
txtRange.Font.Bold = False
txtRange.Font.Height = 12
'Begin walking the documents in the view, and passing the
'values into the Symphony document.
Do Until entry Is Nothing
Set doc = entry.Document
Set txtRange = rptDoc.Paragraphs.Item(rptDoc.Paragraphs.Count).Range.End
Select Case doc.Form(0)
Case "ProjectSummary"
'Print desired information for Project documents
If (mgr = "") Or (mgr <> doc.PrjMgr(0)) Then
mgr = doc.PrjMgr(0)
Call txtRange.InsertBreak(txtRange.End, _
SYMPHONY_TEXT_BREAK_APPEND_PARAGRAPH)
Set txtRange = rptDoc.Paragraphs.Item(rptDoc.Paragraphs.Count).Range.End
txtRange.Text = "Projects managed by " & mgr
Call txtRange.InsertBreak(txtRange.End, _
SYMPHONY_TEXT_BREAK_APPEND_PARAGRAPH)
txtRange.Font.Bold = True
End If
Call txtRange.InsertBreak(txtRange.End, _
SYMPHONY_TEXT_BREAK_APPEND_PARAGRAPH)
Set txtRange = rptDoc.Paragraphs.Item(rptDoc.Paragraphs.Count).Range.End
txtRange.Text = doc.PrjName(0) & " – " & doc.PrjStatus(0)
Call txtRange.InsertBreak(txtRange.End, _
SYMPHONY_TEXT_BREAK_APPEND_PARAGRAPH)
txtRange.Font.Italic = True
|
Case "Task" 'Print desired information for Task documents Set txtRange = rptDoc.Paragraphs.Item(rptDoc.Paragraphs.Count).Range.End txtRange.Text = "- " & doc.TaskDesc(0) Call txtRange.InsertBreak(txtRange.End, _ SYMPHONY_TEXT_BREAK_APPEND_PARAGRAPH) 'Calculate and print desired information for Cost documents planned = 0 actual = 0 variance = 0 Set colCosts = doc.Responses() If colCosts.Count > 0 Then Set cost = colCosts.Getfirstdocument() Do Until cost Is Nothing If IsNumeric(cost.CapPln(0)) Then planned = planned + cost.CapPln(0) End If If IsNumeric(cost.ExpPln(0)) Then planned = planned + cost.ExpPln(0) End If If IsNumeric(cost.CapAct(0)) Then actual = actual + cost.CapAct(0) End If If IsNumeric(cost.ExpAct(0)) Then actual = actual + cost.ExpAct(0) End If Set cost = colCosts.Getnextdocument(cost) Loop variance = planned – actual End If Set txtRange = rptDoc.Paragraphs.Item(rptDoc.Paragraphs.Count).Range.End txtRange.Text = " Planned: " & Format$(planned, "$#,##0") & _ " Actual: " & Format$(actual, "$#,##0") & _ " Variance: " & Format$(variance, "$#,##0") Call txtRange.InsertBreak(txtRange.End, _ SYMPHONY_TEXT_BREAK_APPEND_PARAGRAPH) End Select Set entry = vnav.Getnextdocument(entry) Loop 'Clean up Print "Cleaning up..." Set txtRange = Nothing Set rptDoc = Nothing Set symphony = Nothing Set cost = Nothing Set colCosts = Nothing Set doc = Nothing Set entry = Nothing Set vnav = Nothing Set v = Nothing Set db = Nothing Set sess = Nothing MsgBox "Complete", , "You report is now complete." End Sub |
Создание отчета в форме электронной таблицы Lotus Symphony
Рассмотрим такой сценарий: Вы – директор по продажам в небольшой компании и хотите рассмотреть в разных разрезах свои последние продажи. База данных Lotus Notes содержит заказы за прошлый месяц.
Создание отчета в форме электронной таблицы
Как и в предыдущем примере, можно использовать NotesViewNavigator для доступа к нужным данным из Lotus Notes и ввести эти данные в электронную таблицу Lotus Symphony. Уникальным аспектом в данном случае является то, что для отображения и анализа данных можно использовать таблицу DataPilot.
Это мощный инструмент для быстрого объединения, сравнения и анализа больших объемов данных. Эти данные можно организовывать, менять местами или суммировать с разных точек зрения. Подробнее о таблицах DataPilot можно узнать в информационном центре IBM Lotus Symphony.
В образце базы данных есть представление Orders и пример агента Sample Document Report.
В листинге 6 показан код, который можно использовать для создания отчета в форме электронной таблицы Lotus Symphony.
Листинг 6. Пример кода для создания отчета в форме электронной таблицы Lotus Symphony
%REM
Agent 4) Sample Spreadsheet Report
Created Jul 23, 2009 by Symphony Developer/Symphony Developer
Description: Comments for Agent
%END REM
Option Public
Option Declare
%Include "symphonylsx.lss"
Sub Initialize()
'Declare the Notes object variables
Dim sess As New NotesSession
Dim db As NotesDatabase
Dim v As NotesView
Dim vnav As NotesViewNavigator
Dim entry As NotesViewEntry
Dim row As long
'These lines obtain a handle to the 'Orders' view,
'and the first entry in it.
Set db = sess.Currentdatabase
Set v = db.GetView("Orders")
Set vnav = v.Createviewnav()
Set entry = vnav.Getfirstdocument()
If entry Is Nothing Then
MsgBox "No documents found", , "Exiting"
Exit Sub
End If
'Declare the Symphony object variables
Dim symphony As New SymphonyApplication
Dim rptSht As SymphonySpreadsheet
Dim dataSheet As Symphonysheet
Dim dpSheet As Symphonysheet
'Variables below are for the DataPilot
Dim dataPilotTables As SymphonyDataPilotTables
Dim dataPilotTable As SymphonyDataPilotTable
Dim src As SymphonyRange
Dim dst As SymphonyRange
|
%REM
Generally, I would create the document in "invisible" mode. To
see this is action, uncomment the following line and comment the
line after the next REM block.
%END REM
'Set rptSht = symphony.Spreadsheets.AddSpreadsheet("", False, False)
%REM
I typically use the following line during development/debugging,
then switch to the line above for production.
%END REM
Set rptSht = symphony.Spreadsheets.Addspreadsheet("")
%REM
The next few lines of code create and name 2 sheets. The first sheet
is called 'Data' and will contain the actual data used as the source for
the second sheet.
The second sheet will be used to display and manipulate the DataPilot.
%END REM
Set dataSheet = rptSht.Activesheet
dataSheet.Name = "Data"
Call rptSht.Sheets.Addto(dataSheet, 1, False)
Set dpSheet = rptSht.Sheets.Item(2)
dpSheet.Name = "DataPilot"
'The following lines create the header row in the source table.
With dataSheet
.Cells(1, 1).Text = "Rep"
.Cells(1, 2).Text = "Customer"
.Cells(1, 3).Text = "Region"
.Cells(1, 4).Text = "Product"
.Cells(1, 5).Text = "Num Units"
.Cells(1, 6).Text = "Price"
.Cells(1, 7).Text = "Total"
.Range("A1:G1").Font.Bold = True
End With
' The next lines pass the data from Notes into the spreadsheet.
row = 1
Do Until entry Is Nothing
row = row + 1
dataSheet.Cells(row, 1).Text = entry.Columnvalues(0)
dataSheet.Cells(row, 2).Text = entry.Columnvalues(1)
dataSheet.Cells(row, 3).Text = entry.Columnvalues(2)
dataSheet.Cells(row, 4).Text = entry.Columnvalues(3)
dataSheet.Cells(row, 5).Value = entry.Columnvalues(4)
dataSheet.Cells(row, 6).Value = entry.Columnvalues(5)
dataSheet.Cells(row, 7).Value = entry.Columnvalues(6)
Set entry = vnav.Getnextdocument(entry)
Loop
'Finally, these lines create the DataPilot.
Set dataPilotTables = dpSheet.DataPilotTables
Set src = dataSheet.Range("A1:G" & CStr(row))
Set dst = dpSheet.Cells(1, 1)
Set dataPilotTable = dataPilotTables.Add(src,"DPT_ORDERS",dst)
Dim rowFieldsString(0) As String
rowFieldsString(0) = "Rep"
Dim colFieldsString(0) As String
colFieldsString(0) = "Region"
Dim dataFieldsString(0) As String
dataFieldsString(0) = "Total"
Dim pageFieldsString(0) As String
pageFieldsString(0) = "Product"
Call dataPilotTable.AddFields(rowFieldsString, colFieldsString, _
dataFieldsString, pageFieldsString, SYMPHONY_GENERAL_FUNCTION_SUM)
End Sub
|
IBM Lotus Symphony представляет собой мощный инструмент, который позволяет опытным разработчикам LotusScript быстро освоить создание широкого спектра издательских решений. Из этой статьи вы узнали, как опубликовать содержимое базы данных Lotus Notes в различных форматах. Теперь вы умеете создавать отчеты в форме документа Lotus Symphony, выполнять анализ или даже строить диаграммы с помощью электронных таблиц Lotus Symphony.
| Имя | Размер | Метод загрузки |
|---|---|---|
| SymphInt.nsf | 448 КБ | HTTP |
- Примите участие в обсуждении материала на форуме.
- Оригинал статьи (EN).
-
Информационный центр IBM Lotus Symphony.
Этот сайт регулярно обновляется, отражая изменения в продуктах. (EN)
-
Страница IBM Lotus Symphony на IBM Lotus developerWorks.
Содержит богатую информацию и много полезных ссылок, включая ссылку на Lotus Symphony Developers Toolkit. (EN)
-
Читайте последние новости и пишите в вики по Lotus Symphony.(EN)
-
Подробнее об OpenOffice.org.(EN)