Lotus Symphony 的 LotusScript 支持
Lotus Notes 是一个强大的协作、工作流平台,很多厂商都把自己的业务建立在它的基础之上。一直以来 Notes 与 文档编辑软件的集成都是很多厂商所关注的问题。大家所熟悉的 Lotus Notes 与 Microsoft Office 或者 OpenOffice 在 Windows 操作系统中的集成都是通过 COM 调用来实现的。这些集成提高了用户的工作效率,增加了各个软件的可用性。在 Notes 8 中 IBM 的免费文档编辑器 Lotus Symphony 被作为一个组件紧密整合到了 Notes 中,给软件开发商和客户们提供了一种全新的更好的 Notes-office 集成方案。虽然我们有很多种方式来实现 Lotus Notes 与 Lotus Symphony 的集成。但是 LotusScript 始终是关键的一种:
- LotusScript 是 Notes 中最重要的编程语言,它已经被 Notes 开发人员广泛的使用。
- Lotus Symphony 通过 StartBasic 的方式提供对 LotusScript 的支持。StartBasic 是 OpenOffice 的脚本语言,通过它可以访问几乎所有的 LotusSymphony 提供的功能。
- StartBasic 的代码可以直接在 LotusScript 环境中执行。这是因为 LotusScript 可以直接访问 COM 对象,并且 Lotus Symphony 提供了 UNO 对象和 COM 对象的映射。
注:要使用此功能请使用 Notes 8.0.1 以上的版本
在 清单 5 中所列的 LotusScript 代码实现了,在当前编辑文档中插入一个带有数据的表格的操作。
清单 5. Symphony 组件定义的操作
Sub Click(Source As Button) Set objServiceManager = CreateObject("com.sun.star.ServiceManager") Set objCoreReflection= objServiceManager.createInstance("com.sun.star.reflection.CoreReflection") Set objDesktop = objServiceManager.createInstance("com.sun.star.frame.Desktop") Dim args() Set objFrame=objDesktop.getCurrentFrame() Set objDocument=objDesktop.getCurrentComponent () Set objText = objDocument.getText() Set objCursor = objText.createTextCursor() objText.insertString objCursor, "The Sales History Of This company", False Set objTable= objDocument.createInstance( "com.sun.star.text.TextTable") objTable.initialize 4, 4 'Insert the table objText.insertTextContent objCursor, objTable, False 'Get first row Set objRows= objTable.getRows() Set objRow= objRows.getByIndex(0) 'Set the table background color objTable.setPropertyValue "BackTransparent", False objTable.setPropertyValue "BackColor", 13421823 'Set a different background color for the first row objRow.setPropertyValue "BackTransparent", False objRow.setPropertyValue "BackColor", 6710932 'Fill the first table row objTable.getCellByName("A2").setValue 22.5 objTable.getCellByName("B2").setValue 5615.3 objTable.getCellByName("C2").setValue -2315.7 objTable.getCellByName("D2").setFormula"sum <A2:C2>" objTable.getCellByName("A3").setValue 21.5 objTable.getCellByName("B3").setValue 615.3 objTable.getCellByName("C3").setValue -315.7 objTable.getCellByName("D3").setFormula "sum <A3:C3>" objTable.getCellByName("A4").setValue 121.5 objTable.getCellByName("B4").setValue -615.3 objTable.getCellByName("C4").setValue 415.7 objTable.getCellByName("D4").setFormula "sum <A4:C4>" 'Create a paragraph break ( ControlCharacter::PARAGRAPH_BREAK). 'objText.insertControlCharacter objCursor, 0, False On Error Resume Next If Err Then Msgbox "An error occurred" End If End Sub |
在代码中我们看到,我们通过 CreateObject("com.sun.star.ServiceManager")
方法获得 LotusSymphony 的一个实例。通过 objDocument.createInstance( "com.sun.star.text.TextTable")
来创建一个表格,然后把一些数据填充进这个表格中。这里不对 StartBasic 做更多的解释了,请大家参看 OpenOffice SDK。对广大 Notes 开发人员而言,用 LotusScript 来访问 Lotus Symphony 的方式实现起来更容易上手。