当前位置:首页 > 工业控制 > 《机电信息》
[导读]摘 要:介绍了Lotus Notes内 自带的部分组件以及Domino接口 的应用 , 阐述了如何使用Domino接口结合VB6工 具来开发一个邮件扩展工具 , 实现批量查询是否已读、批量修改、批量撤回等便捷功能 。

引言

LotusNotes于1989年创立 , 是一个企业级通信、协 同工作平台 ,拥有安全性高、易于管理等优点 ,符合企业网对应用的要求 。笔者单位采用基于LotusNotes 7.0的定制版本作为内部协同办公工具 , 由于该版本最后更新时间为2005年 ,许多功能已远远落后于时代 ,不够人性化,给实际工作带来了一定的阻碍。所幸Lotus Notes 自带Lotusscript脚本语言可供开发人员在lotusdesigner中进行更多个性化开发 ,并且提供了一个CoM类接口 ,可在VB、#C、java等语言中调用。

VisualBasic(以下简称"VB")是与Lotus同时代非常受欢迎的开发语言 , 具有易学易用、编程简洁、可视化UI设计、程序集成化程度高等优点 ,非常适用于快速开发小型窗体程序。

尽管VB在如今看来也是落后于时代的产物 ,但考虑到Lotusscript语法基本与VB相同以及VB开发窗体应用的便捷性 , 因此还是决定采用VB6作为开发工具引入LotusDominoobject组件进行邮件扩展工具开发。

1 需求分析

用户在使用LotusNotes发送邮件操作中 ,难免会出现重要公文、邮件内容有误或收件人有误等情况 ,希望能立即撤回错误邮件并重新发送正确邮件 , 由于不希望错误内容被阅读 ,所以整个过程越快越有利:在执行删除之前 ,有的用户可能仅想知道邮件在收件人当中的已读情况 ,根据已读/未读比例再进行下一步操作的决策:对于较小的错误 ,如果能实现静默修正功能 ,更能改善用户体验。

LotusNotes7.0版本并没有自带查询邮件是否已读和撤回功能 ,并且从单位管理制度考虑 , 即使具有该功能, 由于无法被管理员有效监管 ,可能会导致该功能被大量滥用 ,增加服务器负担 ,甚至造成宕机风险 。传统的方法是 ,用户提出申请并得到管理员审核通过后 ,使用Notes自带的邮件删除工具进行删除。

新建删除命令 ,填写所需删除邮件的标题 ,必须保证完全相同。经过一系列繁杂的设置后启动程序 ,该工具将会在服务器中遍历搜索所有用户数据库中该邮件的数据 ,检索到后则执行删除。整个过程非常漫长且卡顿,浪费算力 ,并且由于其检索逻辑是以标题作为关键字,为避免被误删 ,所以用户需要等待整个过程完成后才可以重新发出新邮件。管理员希望能减少人工操作 ,执行快捷方便 , 并能自动导出相关日志记录代替手工录入 ,在执行操作后用户可以立即重新发送邮件 ,无须等待过程完成。

2 设计思路

第一步 ,分析数据结构 。根据官方提供的开发文档以及在客户端内查看邮件属性 , 可以得到一封邮件的所有属性字段(图1) 。其中 , sMessageID为邮件标志 , sorig为邮件唯一标志(与sMessageID主要区别为 , 当一个用户发件箱和收件箱皆有该邮件时 , 为确保sorig在该用户数据库中的唯一性 , 收件箱中邮件的sorig值会改变 ,而sMessageID则保持不变):sendTo为收件人数组:CopyTo为抄送人数组:BlindCopyTo为密送:From为发件人:subject为主题:PostDate为发件时间:Body为正文内容:IsNEwDoC为是否已读标志 。以上为本次开发主要使用的属性。

第二步 ,检索邮件方式 。从数据结构来看 , 既然每封邮件有其自身唯一对应的主key , 比起note自带的工具采用标题为关键字进行检索 , 选择使用sMessageID 会更加准确和高效 , 同时也支持标题精确检索以及模糊检索。

图1 邮件属性

第三步 ,进入收件人数据库进行检索 。由于每封邮件的收件人是有限的 ,无须全局遍历检索 ,只需要进入每个收件人的数据库检索即可 , 能够节省大量的检索时间 。可以通过MessageID获取该邮件对象 ,然后获取 sendTo数据从而取得收件人列表。

第四步 ,检索出来后读取IsNEwD0C字段判断邮件是否已读 ,使用RemovePermanently(True)方法执行删除操作或ReplaceItemValue()方法执行替换修改操作。

所有操作执行完毕后 ,该邮件即已完全消失或者被修正 ,达到了邮件撤回或静默修改的目的 ,操作结束。

3 窗体设计

根据设计思路第二步 ,用户需要提供发件人信息以及需要撤回的邮件的MessageID , 因此绘制两个输入框 ,为了提供关于该邮件的更多信息以便管理员确认 ,故加上主题、发送时间、正文显示区域 。绘制按钮用以触发检索、修改及删除等操作 。根据管理员需求 ,再绘制一个状态区域 , 即运行过程细节展示区域以及导出日志按钮。

4 开发

首先在VisualBasic 6中引用Lotus Domino 0bjects 接口组件(图2) 。

主要用到以下几个模块代码(仅列出部分核心代码 ,非完整代码) :

4. 1 核心方法介绍

Create0bject("Notes.Notessession"): 获取当前Note登录的session对象;GetDatabase("数据库地址"" "names. nsf"):进入通信录数据库;search(): 方法搜索发件人地 址 ; GetFirstDocument () : 获 取 第 一 条 搜 索 结 果 ; GetFirstItem(字段名):获取指定字段;GetDatabase(服务器"数据库):获取数据库;GetLastDocument():获取搜索结果中的最后一 个文档;emovePermanently(True)彻底删除邮件(如果是false则是删除到回收站);ReplaceItem Value(属性"值):替换属性值。

4.2 初始化

Dim aDC As 0bject;DimMaildocAs 0bject;Dim sessionAs 0bject;DimMaildbAs 0bject;DimviewAs 0bject;Dim a() As string;Dim arr() As string;setsession= Create0bject("Notes.Notessession")

4.3 检索邮件

setMaildb = session.GetDatabase ("数据库地址"""names.nsf") 1 进 入 通 信 录 ;If Not Maildb.Is0pen Then Maildb.0pen;fajian=Text1.Text;setaDC= Maildb.search("owner=""" & fajian & """ & type=""Person"""" Nothing"

图2 引用组件

0) ! 在 通 信 录 中 搜 索 该 地 址 :set Maildoc = aDC. GetFirstDocument () ! 取得 该 条 文 档 :set rtiteml =Maildoc.GetFirstItem ("Mailserver") !取得其所属服务器sername= rtiteml.Text

setrtitem2 = Maildoc.GetFirstItem("MailFile") !取得其 数 据 库 地 址 :dbname = rtitem2.Text:set Maildb =session.GetDatabase (sername, dbname) !进入其邮箱:IfNotMaildb.Is0penThenMaildb.0pen:IfCombol.Text ="MessageID" Then:docid = Left(Trim (Replace(Replace(Replace(Text2.Text, """", ""), Chr(l3), ""), Chr(l0), "")),49) !输入邮件ID:Keyword = "@Contains(SMessageID:"""& docid & """)":EndIf:setaDC = Maildb.search (Keyword, Nothing, 0) !搜索该邮件:setMaildoc= aDC.GetLastDocument() !获取该邮件:

set rtitem3 = Maildoc.GetFirstItem ("sendTo") !获取收件人:set rtitem4 = Maildoc.GetFirstItem("CopyTo")"获取抄送人:

setsubjectl=Maildoc.GetFirstItem ("subject") !获取标题:

setposttime=Maildoc.GetFirstItem("PostedDate") !获

取发件时间:

4.4 执行查询是否已读/修改/删除操作

setMaildb=session . GetDatabase ( "JMEP02MAD/servers/Geph", "names.nsf"): set aDC= Maildb.search ("owner=""" & a(i) & """ & type=""Person""", Nothing, 0)!查找收件人

setMaildoc= aDC.GetFirstDocument() :

setrtiteml = Maildoc.GetFirstItem ("Mailserver"):sername = rtiteml.Text:set rtitem2 = Maildoc.GetFirstItem ("MailFile") : dbname = rtitem2.Text: setMaildb = session.GetDatabase(sername, dbname)

0n Error Resume Next

CallMaildoc.RemovePermanently(True)

4.5 交互优化

在上述核心代码的基础上 ,加入一些容错机制、自动补全、群组收件人展开、按照主题模糊查询、邮件批量修改、日志导出、仅删除未读等功能优化客户体验 ,具体代码不再赘述。

5 测试

开发完成后进行测试 ,顺利运行成功(图3)。

基于Visual Basic的Lotus Notes邮件扩展工具开发

6    结语

使用Domino接口与VB开发语言 , 既可以发挥Lotus NotN强大的文档处理能力 ,又可以发挥VB友好的可视化功 ,并且开发快捷 ,工作效率提升明显。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

与安卓系统相比,鸿蒙系统具有卓越的性能,不仅可以应对各种各样的设备,而且在多设备播放和物联网方面也有很强的优势。

关键字: 鸿蒙系统 智慧时代 安卓系统

在电力电子与电气工程领域,逆变器和变压器都是不可或缺的重要设备。尽管它们都在电力转换和传输过程中发挥着关键作用,但它们在功能、工作原理和应用场景等方面存在着显著的差异。本文将从科技视角出发,对逆变器和变压器的区别进行深度...

关键字: 逆变器 变压器

电动机作为现代工业与生活的重要动力源,广泛应用于各个领域。然而,在电动机的运行过程中,电容烧毁的问题时常发生,给生产和生活带来诸多不便。那么,电动机为何偏爱“烧电容”呢?本文将从电容的作用、烧毁原因以及预防措施等方面进行...

关键字: 电动机 电容

在日新月异的工业技术领域,变频器作为一种电力电子装置,已逐渐成为驱动设备、节能降耗的不可或缺的关键设备。AMB100变频器作为其中的佼佼者,凭借其出色的性能、广泛的应用领域以及高效的节能效果,为现代工业生产提供了强大的动...

关键字: amb100变频器 变频器

光伏发电作为本世纪最具有潜力的可再生能源技术之一,其清洁、环保、可再生的特性受到广泛关注。然而,任何一项技术都不是完美的,光伏发电同样存在一些明显的缺点和挑战,这些问题限制了其大规模应用和商业化推广。本文旨在深入探讨光伏...

关键字: 光伏发电 光电效应

在电源管理领域,低压差线性稳压器(LDO)因其结构简单、稳定性好、噪声低等特点而得到广泛应用。随着电子设备对电源性能要求的不断提高,片外电容的LDO设计逐渐成为研究的热点。其中,功率管作为LDO的核心部件,其设计尤为重要...

关键字: ldo 有片外电容 低压差线性稳压器

磁铁,作为一种能够吸引铁、镍、钴等金属的特殊物体,自古以来就引起了人们的极大兴趣。在现代科技中,磁铁的应用更是无处不在,从电动机、发电机到核磁共振成像设备,无不体现了磁铁的神奇力量。那么,磁铁与磁铁之间是如何相互作用的呢...

关键字: 磁铁 磁场

随着可再生能源技术的不断发展和应用,逆变器作为能源转换和储存的核心设备,其在电力系统中的作用日益凸显。根据储能类型的不同,逆变器可以分为电化学储能逆变器和机械储能逆变器两大类。这两类逆变器在结构、原理和应用场景等方面存在...

关键字: 逆变器 可再生能源

随着全球能源结构的深刻变革,可再生能源的推广和应用已成为当今世界的发展趋势。在这一大背景下,逆变器作为连接可再生能源发电设备和电网的关键设备,其重要性日益凸显。本文旨在探讨逆变器的发展背景,分析当前市场现状,并展望其未来...

关键字: 逆变器 可再生能源

在电力系统中,隔离开关是一种关键设备,用于隔离电源、倒闸操作以及接通和断开小电流电路。在10kV高压系统中,隔离开关的选择尤为重要,它直接关系到电力系统的安全稳定运行。本文将对10kV高压隔离开关的选择进行详细探讨,以期...

关键字: 隔离开关 高压电
关闭