转自http://www.ibm.com/developerworks/cn/lotus/notes-mail-template/
现有 IBM Lotus Domino/Notes 邮件模板简介
模板概念
IBM Lotus Domino/Notes 应用包含一个或多个 Domino 数据库。 Domino 数据库保存了该应用中的数据、逻辑关系和设计元素。模板则是一种包含了数据库结构的文件,是一个包含了数据库设计元素的框架。它以 .ntf 作为其后缀名。通过使用模板,用户可以很方便地在企业内部或某一范围内确立 Domino/Notes 应用的设计标准,也可以很方便地维护同类型数据库设计的一致性。IBM Lotus Domino 提供了一系列的模板以供用户创建数据库使用。同时,用户也可以使用 Lotus Domino Designer 对模板进行定制。
本文中将主要讨论其中的邮件模板,它提供在本地或 Domino 服务器端发送或接收电子邮件以及使用日历进行行程安排等功能。当我们使用现有邮件模板创建一个新的邮件数据库的时候,模板中的设计元素就会被拷贝到该邮件数据库中。当然 , 我们也可以通过重新部署更新过的模板使邮件数据库与当前指定的邮件模板保持一致。
已有 Domino/Notes 邮件模板介绍
用户可以通过各种方式来访问 Domino 邮件数据库:Notes 客户端、Web 浏览器、POP3 客户端或者 IMAP 客户端等。无论是用哪种访问方式,Domino 邮件数据库的结构都是一样的,不同的是各种客户端的展现机制。使用 Lotus Notes 客户端的用户使用标准 Notes 邮件模板就可获取其所需功能。使用 Domino Web Access 或者 iNotes 客户端的用户则需要使用 Domino Web Access 邮件模板或 iNotes 邮件模板来创建自己的邮件数据库。各个版本的 Domino/Notes 提供的邮件模板如表 1 所示:
服务器 | 发布信息 | Notes 用户 | Web 用户 |
---|---|---|---|
Domino 8.x 服务器 | Domino 8.5.X | mail85.ntf | mail85.ntf |
Domino 8.0.X | mail8.ntf | mail8.ntf | |
Domino 7.x 服务器 | mail7.ntf | dwa7.ntf | |
Domino 6.x 服务器 | mail6.ntf | iNotes6.ntf |
各 Domino/Notes 版本对不同邮件模板版本的支持
在实际的应用环境中很难保证 Lotus Notes 和 Domino 版本始终一致,所以了解各个 Lotus Domino/Notes 版本对不同版本的邮件模板的支持情况是必要的。在此主要针对标准邮件模板作一下介绍。
对 Mail85.ntf 的支持 | ||||
---|---|---|---|---|
Notes 8.5.x 客户端 | Notes 8.x 客户端 | Notes 7.x 客户端 | Notes 6.x 客户端 | |
Domino 8.5.x 服务器 | 支持 | 仅支持在升级过程中的使用 | 仅支持在升级过程中的使用 | 仅支持在升级过程中的使用 |
Domino 8.x 服务器 | 仅支持在升级过程中的使用 | 仅支持在升级过程中的使用 | 仅支持在升级过程中的使用 | 仅支持在升级过程中的使用 |
Domino 7.x 服务器 | 仅支持在升级过程中的使用 | 仅支持在升级过程中的使用 | 仅支持在升级过程中的使用 | 仅支持在升级过程中的使用 |
Domino 6.5.6 服务器 | 仅支持在升级过程中的使用 | 仅支持在升级过程中的使用 | 仅支持在升级过程中的使用 | 仅支持在升级过程中的使用 |
对 Mail8.ntf 的支持 | ||||
Notes 8.5.x 客户端 | Notes 8.x 客户端 | Notes 7.x 客户端 | Notes 6.x 客户端 | |
Domino 8.5.x 服务器 | 支持 | 支持 | 仅支持在升级过程中的使用 | 仅支持在升级过程中的使用 |
Domino 8.x 服务器 | 支持 | 支持 | 仅支持在升级过程中的使用 | 仅支持在升级过程中的使用 |
Domino 7.x 服务器 | 仅支持在升级过程中的使用 | 仅支持在升级过程中的使用 | 仅支持在升级过程中的使用 | 仅支持在升级过程中的使用 |
Domino 6.5.6 服务器 | 仅支持在升级过程中的使用 | 仅支持在升级过程中的使用 | 仅支持在升级过程中的使用 | 仅支持在升级过程中的使用 |
对 Mail7.ntf 和 dwa7.ntf 的支持 | ||||
Notes 8.5.x 客户端 | Notes 8.x 客户端 | Notes 7.x 客户端 | Notes 6.x 客户端 | |
Domino 8.5.x 服务器 | 支持 | 支持 | 支持 | * |
Domino 8.x 服务器 | 支持 | 支持 | 支持 | * |
Domino 7.x 服务器 | 支持 | 支持 | 支持 | * |
Domino 6.5.6 服务器 | 仅支持在升级过程中的使用 | 仅支持在升级过程中的使用 | * | * |
对 Mail6.ntf 的支持 | ||||
Notes 8.5.x 客户端 | Notes 8.x 客户端 | Notes 7.x 客户端 | Notes 6.x 客户端 | |
Domino 8.5.x 服务器 | 支持 | 支持 | 支持 | 支持 |
Domino 8.x 服务器 | 支持 | 支持 | 支持 | 支持 |
Domino 7.x 服务器 | 支持 | 支持 | 支持 | 支持 |
Domino 6.5.6 服务器 | 支持 | 支持 | 支持 | 支持 |
注意:“仅支持在升级过程中的使用”表示该配置在服务器和客户端升级到新版本所需的时间之内是支持的。但不支持永远使用该配置。使用该配置不会导致已知的严重的问题或者缺陷。但是,IBM Lotus 不会对该配置上产生的问题发布补丁,因为该配置只会在升级过程中使用。
对于其他标注为 * 的部分,请参考关于具体版本支持的文档中的配置部分。
回页首
对现有模板进行二次开发的需求驱动有哪些?
虽然 Domino 系统提供的现有邮件模板已经具有了丰富的功能,使得终端用户可以比较方便的管理邮件以实现协同工作。但是,各终端用户都有其个性化的需求,需要定制或增加自己需要的设计元素,以增加终端用户使用的便捷性,或实现某功能需求,或更好地将邮件系统和其他已有的应用系统进行集成,例如:
回页首
怎样对现有模板进行二次开发
邮件数据库的组织
邮件数据库文件 (.NSF) 由四个部分组成:设计元素、数据文档、视图索引和全文索引。设计元素是指表单(Form)、视图(View)、代理(Agent) 和文件夹(Folder)等等,它们构成了应用的基础。数据文档(Documents)是用户提交的数据信息。形象来说,它就是用户保存在表单 (Form) 中的文档,数据库文件包容应用程序的数据,其结构由表单、域、文件夹、视图及其他显示功能部件(诸如导航器和数据库图标)组成。
邮件数据库模板 (.NTF) 主要是指仅仅包含设计元素的邮件数据库文件。作为模板文件,它可以被应用到终端用户的邮件数据库中。同一个组织的终端用户可以共享一个邮件数据库模板,也可以使用多个邮件数据库模板,如不同部门使用不同的邮件数据库模板。
设计元素简介
下面对邮件数据库中的主要设计元素进行介绍,它们之间的关系如图 2 所示。
每个数据库都能够包含它自己的共享代码和共享资源,用户能够在其他数据库中访问共享元素。共享元素可以让用户在应用中反复应用资源,而只需要在一个标准为之对其进行维护。利用共享代码和资源,用户还能够使用一个数据库集中存储特定类型的元素。然后在其他数据库中引用这些元素。
回页首
案例介绍
前面我们从理论上介绍了如何对邮件模板进行二次开发,下面我们结合实际案例对这一部内容进行进一步地介绍。我们知道,随 Lotus Domino/Notes 一起发布的模板主要提供对邮件信息的管理。而在实际应用中,邮件信息往往是和商业活动相关联的。通过对邮件模板的定制,能够更好地和商业活动相关联。
下面我们介绍一个简单的例子,考虑一个公司的法律部门,这个部门的员工经常需要处理与合同有关的邮件,而邮件可能来自于不同重要程度的客户:VIP 客户、重要客户和普通客户。对于来自不同级别客户的邮件所采取的响应时间是不同的,需要有相应的优先处理级别。通过创建自定义操作,终端用户可以标识邮件来自于哪个级别的客户。通过使用后台运行的代理,终端用户可以定期收到关于现有邮件的统计信息。通过创建分类清晰视图,终端用户则可以清楚地看到分类同时有层次关系的邮件。
创建自定义操作
在 Notes 客户端中,终端用户可以选择在“操作”菜单下提供的一些系统功能。通过二次开发,“自定义操作”可以添加到“操作”菜单中。“自定义操作”用前面提到的代理来实现。代理可以用简单的功能、公式、LotusScript. 或者 Java 进行编程,可以根据具体任务选择最佳相应的语言和技术。
在 IBM Lotus Domino Designer 中,打开邮件数据库模板。单击设计框架的“共享代码”“代理”,单击“新建代理”按钮。就可以创建一个新的代理。如图 3,我们分别创建了“合同管理 \ 设置为 VIP 客户”,“合同管理 \ 设置为重要客户”和“合同管理 \ 设置为普通客户”三个代理。这里我们使用的反斜线是帮助创建二级操作。这三个代理同属于一个一级操作“合同管理”。
在代理设计过程中,你需要指定代理名称、共享方式等基本信息。这些都比较容易理解。然而,选择代理何时运行,怎样运行以及怎么样处理对象是一个关键问题。通常代理可以“按事件”触发,也可以“按日程安排”来触发。创建自定义操作的代理,我们需要选择“按事件”触发。
选项 | 说明 |
---|---|
“操作”菜单选项 (Action menu selection) |
用户激活的代理使用该选项,如果在 Web 上运行该代理时,使用 WebQuerySave 或者 WebQueryOpen 事件。 |
代理列表中选择 (Agent list selection) |
这项设置用于通过操作、按钮、URL 或其他代理调用的代理,具有这项设置的代理不会出现在“操作”菜单中。 |
新邮件到达前 (Before new mail arrives) |
这项设置在邮件显示在邮件数据库之前用来处理邮件。 例如,移动新邮件到一特定的文件夹。 注意:一个邮件数据库里应至多有一个具有这项设置的代理。 |
新邮件到达后 (After new mail has arrived) |
这项设置在邮件显示在邮件数据库之后用来处理邮件。 例如,回复,转发或者其他操作。 注意:一个邮件数据库里可以有多个具有这项设置的代理。 |
文档被创建或修改之后 (After documents are created or modified) |
这项设置适合于用来处理新邮件或者更改的邮件的工作流任务。代理管理器会定期触发这样的代理在本地 Notes 客户端或者服务器端执行。 取决于服务器的负载,代理的执行可能有 5 到 30 分钟的延迟时间。 |
当文档被粘贴时 (When documents are pasted) |
当文档被粘贴到邮件数据库时需要修改时使用这项设置。 注意: 这个选项需要用户触发,不能在后台运行。 |
服务器启动时 (When server starts) |
具有这项设置的代理只能在服务器启动时被执行,其他时候都不会被执行。如果你希望代理不但在服务器启动时,而且在其他时候都被执行,可以使用代理列表中选择选项,然后创建另外一个在服务器启动时被调用的代理。 |
在这里,需要代理对终端用户可见,同时由终端用户选择触发,我们选择“操作”菜单选项。接下来,需要指定代理触发时所采取的具体的动作。对于本列来说,我们选择针对来自不同客户的邮件可以进行不同的标记。在 _ViewIcon 字段上,如果是来自于 VIP 客户,标记 116(紫色图标);如果是来自于重要客户,标记 115(红色图标);如果是来自于重要客户,标记 114(绿色图标)。标记为紫色图标的 LotusScript. 代码如下所示:
Sub Initialize Dim session As New NotesSession Dim db As NotesDatabase Dim collection As NotesDocumentCollection Dim doc As NotesDocument Set db = session.CurrentDatabase Set collection = db.UnprocessedDocuments Set doc = collection.GetFirstDocument() While Not(doc Is Nothing) Set itemA = doc.ReplaceItemValue( "_ViewIcon", 116 ) Call doc.Save( False, True ) Set doc = collection.GetNextDocument(doc) Wend End Sub |
在 Notes 客户端所产生自定义操作如图 4 所示:
图 5 是终端用户对来自不同客户的邮件进行标记后的结果。
创建分类丰富的视图
当终端用户对来自不同客户的邮件进行标识后,分类丰富的视图能够更好地组织这些邮件。图 6 中的“合同邮件”视图就是一个这样的视图。 除了有不同颜色的图标来标识邮件外,来自于不同级别客户的邮件也被组织在不同的分区内。通过展开和折叠相应的分区,可以给终端用户不同的视角查看邮件,使得他们可以专注于关心的邮件。
那么如何实现这样的视图呢?
首先需要创建一个“合同邮件”视图使其只选取那些用户标识过的邮件,在“视图选择”指定如下公式:
SELECT _ViewIcon != "" |
然后,增加两个新列:“状态列”和“( 状态帮助列 )”。
“( 状态帮助列 )”是一个隐藏的列,根据邮件的内部状态计算出邮件的类别,同时给状态列赋赋予相应的类别显示名称,如下所示。
DocumentStateSort := 0; DEFAULT DocumentStateCategory := @If( _ViewIcon=116; @Do(@Set ("DocumentStateSort";1);"VIP客户"); _ViewIcon=115; @Do(@Set ("DocumentStateSort";2);"重要客户"); _ViewIcon=114; @Do(@Set ("DocumentStateSort";4);"普通客户"); @Do(@Set ("DocumentStateSort";5);"未知客户") ); DocumentStateSort |
“状态”列的值很简单,即是 DocumentStateCategory 。不过需要注意的是,此列需要设置 如下的选项。排序可以选择“升序”或者“降序”。类型需要选择“分类”。同时选中“将多值分开显示成独立的条目”。
创建后台运行的代理
前面讲述了自定义操作的代理,同时我们也可以使用后台运行的代理来完成一些不需要终端用户触发的操作,如定期的发送统计邮件。
选项 | 说明 |
---|---|
每天多于一次 | 这项设置用来按时运行代理,一天若干次。单击“日程安排”按钮可以指定时间表。 |
每天一次 | 这项设置用来按时运行代理,一天一次。 |
每周一次 | 这项设置用来按时运行代理,一周一次。 |
每月一次 | 这项设置用来按时运行代理,一月一次。 |
从不运行 | 如果希望保存代理但不希望在特殊情况(如通过另一个代理调用)以外的情况运行,可以使用这项设置。 |
这里我们创建一个每月后台运行一次的代理,以发送对当月来自不同客户邮件的统计信息,邮件信息如图 9 所示。
Sub Initialize Dim NewUIWorkspace As New NotesUIWorkspace Dim NewNoteSession As New NotesSession Dim CurrentDB As NotesDatabase Set CurrentDB = NewNoteSession.CurrentDatabase ‘创建新邮件 Dim MailDoc As NotesDocument Set MailDoc = New NotesDocument(CurrentDB) MailDoc.form. = "Memo" MailDoc.SendTo = NewNoteSession.EffectiveUserName MailDoc.Subject = "月度统计" ‘创建邮件体 Dim TableNotesRichTextItem As NotesRichTextItem Set TableNotesRichTextItem = MailDoc.CreateRichTextItem("Body") Dim columnHeaderStyle. As NotesRichTextStyle. Set columnHeaderStyle. = NewNoteSession.CreateRichTextStyle( ) columnHeaderStyle.Bold = True columnHeaderStyle.FontSize =8 columnHeaderStyle.NotesFont = TableNotesRichTextItem.GetNotesFont("Arial", True) ‘创建表格 Dim i As Integer Dim columnStyles(0 To 4) As NotesRichTextParagraphStyle. For i = 0 To 4 Set columnStyles(i) = NewNoteSession.CreateRichTextParagraphStyle. columnStyles(i).LeftMargin = 0 columnStyles(i).FirstLineLeftMargin = 0 Next columnStyles(0).RightMargin =3 * RULER_ONE_CENTIMETER columnStyles(1).RightMargin = 8 * RULER_ONE_CENTIMETER columnStyles(2).RightMargin = 8 * RULER_ONE_CENTIMETER columnStyles(3).RightMargin = 3 * RULER_ONE_CENTIMETER columnStyles(4).RightMargin = 3 * RULER_ONE_CENTIMETER Dim headerColor As NotesColorObject Dim dataColor As NotesColorObject Set headerColor = NewNoteSession.CreateColorObject Call headerColor.SetRGB(239,239,239) Set dataColor = NewNoteSession.CreateColorObject Call dataColor.SetRGB(255,255,255) Call TableNotesRichTextItem.AppendTable(1,5,,,columnStyles) ‘创建表格头 Dim TableNotesRichTextNavigator As NotesRichTextNavigator Set TableNotesRichTextNavigator = TableNotesRichTextItem.CreateNavigator() TableNotesRichTextNavigator.FindLastElement RTELEM_TYPE_TABLE Dim TableNotesRichTextTable As NotesRichTextTable Set TableNotesRichTextTable = TableNotesRichTextNavigator.GetElement TableNotesRichTextTable.Style. = TABLESTYLE_TOP TableNotesRichTextTable.SetColor headerColor TableNotesRichTextTable.SetAlternateColor dataColor TableNotesRichTextItem.AppendStyle. columnHeaderStyle. TableNotesRichTextNavigator.FindNextElement RTELEM_TYPE_TABLECELL TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator TableNotesRichTextItem.AppendText "客户类型" TableNotesRichTextItem.EndInsert TableNotesRichTextNavigator.FindNextElement TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator TableNotesRichTextItem.AppendText "发件人" TableNotesRichTextItem.EndInsert TableNotesRichTextNavigator.FindNextElement TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator TableNotesRichTextItem.AppendText "主题" TableNotesRichTextItem.EndInsert TableNotesRichTextNavigator.FindNextElement TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator TableNotesRichTextItem.AppendText "日期" TableNotesRichTextItem.EndInsert TableNotesRichTextNavigator.FindNextElement TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator TableNotesRichTextItem.AppendText "邮件链接" TableNotesRichTextItem.EndInsert ‘查找“合同邮件”视图 Dim ContractNotesView As NotesView Set ContractNotesView = CurrentDB.GetView("合同邮件") Dim ContractNotesViewNavigator As NotesViewNavigator Set ContractNotesViewNavigator = ContractNotesView.CreateViewNav Dim ContractNotesViewEntry As NotesViewEntry Set ContractNotesViewEntry = ContractNotesViewNavigator.GetFirstDocument Dim dataStyle. As NotesRichTextStyle. Set dataStyle. = NewNoteSession.CreateRichTextStyle() dataStyle.Bold = False dataStyle.FontSize = 10 TableNotesRichTextNavigator.FindNextElement TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator Call TableNotesRichTextItem.AppendStyle(dataStyle) TableNotesRichTextItem.EndInsert '计算上个月 Dim lastMonth As New NotesDateTime( "" ) lastMonth.LSLocalTime = Now Call lastMonth.AdjustMonth( -1 ) While Not ContractNotesViewEntry Is Nothing Dim dateTime As NotesDateTime Dim item As NotesItem Set dateTime = ContractNotesViewEntry.Document .GetItemValueDateTimeArray("PostedDate")(0) If (dateTime.GMTTime>lastMonth.GMTTime) Then ‘增加一行 Call TableNotesRichTextTable.AddRow(1) TableNotesRichTextNavigator.FindNextElement TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator Dim MailType As String Dim MailTypeText As String MailType = ContractNotesViewEntry.Document.GetItemValue("_ViewIcon")(0) If MailType = "114" Then MailTypeText = "普通客户" Elseif MailType = "115" Then MailTypeText = "重要客户" Elseif MailType = "116" Then MailTypeText = "VIP客户" End If TableNotesRichTextItem.AppendText MailTypeText TableNotesRichTextItem.EndInsert TableNotesRichTextNavigator.FindNextElement TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator TableNotesRichTextItem.AppendText ContractNotesViewEntry.Document_ .GetItemValue("From")(0) TableNotesRichTextItem.EndInsert TableNotesRichTextNavigator.FindNextElement TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator TableNotesRichTextItem.AppendText ContractNotesViewEntry.Document_ .GetItemValue("Subject")(0) TableNotesRichTextItem.EndInsert TableNotesRichTextNavigator.FindNextElement TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator TableNotesRichTextItem.AppendText ContractNotesViewEntry.Document_ .GetItemValue("PostedDate")(0) TableNotesRichTextItem.EndInsert ‘添加文档链接 TableNotesRichTextNavigator.FindNextElement TableNotesRichTextItem.BeginInsert TableNotesRichTextNavigator Call TableNotesRichTextItem.AppendDocLink ( ContractNotesViewEntry.Document,_ ContractNotesViewEntry.Document.GetItemValue("Subject")(0)) TableNotesRichTextItem.EndInsert End If Set ContractNotesViewEntry = ContractNotesViewNavigator_ .GetNextDocument(ContractNotesViewEntry) Wend Call MailDoc.Send(False) End Sub |
添加用户定义的图标
前面我们讲到了对 _ViewIcon 字段进行赋值,相应图标所对应的数字编号可以由下表查到。
如果发现所提供的系统图标不能满足当前的需求,你可以增加用户自定义图标到邮件模板中。这样,当使用如下代码时就可以使用自定义图标来标识邮件:
… Set itemA = doc.ReplaceItemValue( "_ViewIcon", "accept.gif" ) … |
需要注意的是尽量不要在图标名称中使用下划线,在一些系统中会引起这样的图标不可见。
调试代理以提高问题修复的效率
在使用代理所提供丰富功能的同时,需要使用最有效的工具来调试代理以提高问题修复的效率。可以使用的工具包括:
回页首
小结
本文讲述了对 IBM Lotus Domino/Notes 中的邮件模板进行二次开发的相关经验。这里的案例只是基于一些简单的需求,通过这些案例,我们希望能够达到举一反三、抛砖引玉的目的。在实际环境中,用户可能有特定的需求,可以针对实际情况对邮件模板进行定制,从而来实践和优化这些经验。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14751907/viewspace-664582/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14751907/viewspace-664582/