技术开发 频道

Lotus Domino R5 开发心得

    【IT168 技术文章】

       Lotus Domino 是当今办公自动化系统的主流开发平台之一,目前大部分企业和机构都在使用Lotus Domino 开发自己的无纸办公系统。不久前,我参加的一个OA 系统开发项目就是使用Lotus Domino R5 开发的。在开发过程中,我积累了一些小技巧,现在公布出来,希望能给相关人士提供一些帮助。

     一. Lotus Domino 与关系数据库的互操作

     在项目开发过程中,遇到的第一个棘手的问题是:如何把原先的关系型数据库中的内容全部导入 Domino 中因为企业现在的所有数据都集中在一个关系型数据库中,因此希望Notes库能与旧的关系库互操作,而不必在数据库转换上浪费更多人力。

    此外,由于Lotus Notes是非结构化的数据库,而关系数据库属于结构化数据库,因此要实现两者的互操作或数据导入/导出势必需要一个专门的转换程序,而这个程序一般来说都属于附加品,要么由Lotus提供,要么由数据库厂商提供,如Lotus Notes与Oracle数据库之间的转换就有专门的程序(Pump)。一般在购买Lotus产品的时候Lotus公司不会提供此类产品,如果需要可以单独购买。而对于企业来说,如果企业数据存放在不止一个关系库中,那么就需要购买若干个此类产品,而且还不一定能买的到,因此能否通过Lotus Script编写一个通用的数据库转换程序就成为本次开发的难点之一。

    解决这个问题用到了Lotus Domino R5 中提供的三个Lotus Notes 对象类:ODBCConnection(ODBC 连接)、ODBCQuery(ODBC 查询)以及ODBCResultSet(ODBC结果集)。应用这三个类并辅以Lotus Script语言就能实现与关系数据库的互操作问题。

   具体解决方法如下:

    第一步 在控制面板——>32位ODBC数据源中建立用户数据源Test;

    ---- 第二步 在Domino R5中新建一个数据库Try,并建立一个空白表单Connection,此表单没有任何内容,然后在表单上创建一个“操作”,起名为“Read”;

    ---- 第三步 在“Read”操作的编程窗口中选择编程语言为Lotus Script;

    ---- 第四步 在编程窗口的对象窗口中点击“Option”事件,并写入如下脚本:

    ---- Uselsx "*lsxodbc" // 使用Lotus Script 扩展对象中的ODBC类

    ---- 第五步 选中“Declare”事件,在其中写入:

    [Copy to clipboard]CODE:

    Dim session As NotesSession

    Dim db As NotesDataBase

    Dim doc As NotesDocument

    Dim qry As ODBCQuery

    Dim result As ODBCResultSet

    Dim con As ODBCConnection

    定义程序中使用到的各种对象。

    第六步 选中“Click”事件,在其中写入:

    [Copy to clipboard]CODE:

    Sub Click(Source As Button)

    ' Set New Value

    Set session = New NotesSession

    Set con = New ODBCConnection

    // 新建ODBCConnection对象实例

    Set qry = New ODBCQuery

    // 新建ODBCQuery对象实例

    Set result = New ODBCResultSet

    // 新建ODBCResultSet对象实例

    ' 取得当前数据库信息

    Set db = session.CurrentDataBase

    Set doc = New NotesDocument(db)

    // 新建文档

    doc.form = "connection"

    // 新建文档的表单指向connection

    Call con.Disconnect()

    // 保证con对象当前没有连接其他数据源

    If con.ConnectTo("test") Then

    // 如果连接成功

    Set qry.connection = con

    // 将建立好连接的con交给query对象

    qry.SQL = "SELECT * FROM Table1"

    // SQL 语句

    Set result.Query = qry

    // 将已经连接上数据源并写好SQL

    语句的query对象赋给result对象

    Call result.Execute() // 执行SQL语句

    Do // 循环直到结果集为空

    Call result.NextRow() // 指针指向下一条记录

    For i = 1 To result.Numcolumns

    // Numcolumns属性记录关系库中的字段个数

    field = result.FieldName(i)

    // 根据字段的索引值得到字段的名字

    value = result.GetValue(field)

    // 取得字段值

    If Isdate(value) Then

    // 对日期字段的特殊处理

    If value = Datevalue("0:00:00") Then

    value = ""

    Else

    value = Format(value,"mm-dd-yyyy")

    End If

    End If

    Set item = doc.AppendItemValue(field,value)

    // 将关系库中的值写到Notes当前库的当前表单中

    Next

    Call doc.save(True,True)

    // 当一条记录的所有字段都被写入

    Notes库后保存此文档

    Set db = session.CurrentDataBase

    Set doc = New NotesDocument(db) // 新建文档

    doc.form = "connection"

    Loop Until result.IsEndOfData

    Call con.Disconnect() // 断开与数据源的连接

    Else

    Messagebox("Could not connect to server")

    End If

    End Sub

    ---- 最后,保存表单并运行,用鼠标点击Read 操作后,关系数据库中的内容就被取到Notes的文档型数据库中了。

   

0
相关文章