技术开发 频道

在Lotus Notes复合应用中集成Lotus Symphony

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 的方式实现起来更容易上手。

0
相关文章