首页 | 邮件资讯 | 技术教程 | 解决方案 | 产品评测 | 邮件人才 | 邮件博客 | 邮件系统论坛 | 软件下载 | 邮件周刊 | 热点专题 | 工具
网络技术 | 操作系统 | 邮件系统 | 客户端 | 电子邮箱 | 反垃圾邮件 | 邮件安全 | 邮件营销 | 移动电邮 | 邮件软件下载 | 电子书下载

邮件服务器

技术前沿 | Qmail | IMail | MDaemon | Exchange | Domino | 其它 | Foxmail | James | Kerio | JavaMail | WinMail | Sendmail | Postfix | Winwebmail | Merak | CMailServer | 邮件与开发 | 金笛 |
首页 > 邮件服务器 > Lotus Domino > Lotus Notes 数据库中附件的批量导出 > 正文

Lotus Notes 数据库中附件的批量导出

出处:www.ibm.com 作者:www.ibm.com 时间:2011-8-23 22:06:49
简介: Lotus Notes 数据库是一种文档型数据库,其中文档的富文本域中往往嵌入许多附件(如 Word 文档、PDF 文档、Excel 文档等)。用户时常需要将这些附件导出到其他系统中进行使用处理。然而当需要导出许多文档中的附件时,只能手动逐个打开各个文档并将附件导出,然后再将附件导入到其他系统中,那么,当附件数量很大时则会大大降低效率。本文从用户角度出发,分析了若干附件批量导出的需求并给出了相应的解决方案。

引言

Notes 数据库是一种文档型数据库,其中文档的富文本域中往往嵌入许多附件(如 Word 文档、PDF 文档、Excel 文档等)。这些附件常常是工作的重要资料,用户时常需要导出这些附件到其他系统中进行处理,如图 1 所示,用户可以将所选中的附件或者该文档中的所有附件保存到本地系统。有时用户还需要导出多个文档中的附件,如图 2 所示,每个文档中都嵌入了附件,用户需要将所选中的所有文档中的附件全部导出。在这种情况下,用户只能手动逐个打开各个文档并将附件导出到系统本地,然后再将附件导入到其他系统中,这大大降低了效率。下文分析了若干附件批量导出的需求以及相应的解决方案。


图 1. Notes 文档中附件的导出
图 1. Notes 文档中附件的导出 

图 2. 多 Notes 文档中附件的导出
图 2. 多 Notes 文档中附件的导出 

附件批量导出的需求及其解决方案

1. 导出到本地系统中

举一例说明。某公司用 Excel 表单作为公司的报表管理系统,它们的业务流程是:首先,公司定期下发 Excel 报表模板供全公司使用。然后,基层的业务人员在每个周期的期末要定期填写报表,即在模板里面填写数据,然后新建一个 Notes 文档,把这个 Excel 文件嵌入到这个文档中提交。最后,公司的信息收集人员需要从每个 Notes 文档中导出 Excel 文件,再对这些报表进行手工汇总和处理。显然,如果业务人员数量大,那么 Notes 文档就会很多,这种手工导出附件的方式最终将不堪重负。本文开发了一个 SaveToLocalSystem Agent 程序,它可以将 Notes 数据库中被选中的文档中的附件批量导出到指定的系统目录下。这个 agent 是用 LotusScript 编写的,见代码清单 1,也可以使用 Java API 编写。本文附件 attachment.nsf 中包含 SaveToLocalSystem Agent 程序及测试数据。


清单 1. 多 Notes 文档中附件批量导出到本地系统
				
 Type BROWSEINFO 
 hOwner As Long 
 pidlRoot As Long 
 pszDisplayName As String 
 lpszTitle As String 
 ulFlags As Long 
 lpfn As Long 
 lParam As Long 
 iImage As Long 
 End Type 

 Const BIF_RETURNONLYFSDIRS = &H1 
 Const BIF_DONTGOBELOWDOMAIN = &H2 
 Const BIF_STATUSTEXT = &H4 
 Const BIF_RETURNFSANCESTORS = &H8 
 Const BIF_BROWSEFORCOMPUTER = &H1000 
 Const BIF_BROWSEFORPRINTER = &H2000 
 Const MAX_PATH = 260 

 Declare Function SHGetPathFromIDList Lib "shell32" Alias "SHGetPathFromIDListA" 
     (ByVal pidl As Long, ByVal pszPath As String) As Long 
 Declare Function SHBrowseForFolder Lib "shell32" Alias "SHBrowseForFolderA" 
     (lpBrowseInfo As BROWSEINFO) As Long 
 Declare Sub CoTaskMemFree Lib "ole32" (ByVal pv As Long) 
 Declare Function GetDesktopWindow Lib "user32" () As Long 


 Sub Initialize() 
   
 Dim session As New NotesSession 
 Dim db As NotesDatabase 
 Dim collection As NotesDocumentCollection 
 Dim doc As NotesDocument   
 Dim rtitem As Variant 
 Dim NotesItem As NotesItem 
   
 Dim bi As BROWSEINFO 
 Dim pidl As Long 
 Dim path As String 
 Dim pos As Integer 
   
 bi.hOwner = GetDesktopWindow() 
 bi.pidlRoot = 0& 
 bi.lpszTitle = "Select directory to save the attachments"
 bi.ulFlags = BIF_RETURNONLYFSDIRS 
 pidl = SHBrowseForFolder(bi) 
 path = Space$(MAX_PATH) 

 If SHGetPathFromIDList(ByVal pidl, ByVal path) Then 
 pos = InStr(path, Chr$(0)) 
 End If 

 Call CoTaskMemFree(pidl) 

   Set db = session.CurrentDatabase 
   Set collection = db.UnprocessedDocuments 
   Set doc = collection.GetFirstDocument() 
   
 While Not(doc Is Nothing)   
     // 此处假定附件是嵌入在 Body 域当中,当然也可以循环文档所有的域,然后对于富文本域进行处理,提取附件      
     Set rtitem = doc.GetFirstItem( "Body" ) 
     If ( rtitem.Type = RICHTEXT ) Then 
          ForAll o In rtitem.EmbeddedObjects                     
            If ( o.Type = EMBED_ATTACHMENT ) Then     
              Call o.ExtractFile( Left(path, pos - 1) & "\" & o.Name  ) 
          End If         
          End ForAll 
     End If 
    Set doc = collection.GetNextDocument(doc) 
   Wend 

 End Sub 

使用操作说明:将 SaveToLocalSystem Agent 添加到任意 Notes 数据库中,然后在任意的 view 中选择需要导出附件的文档,再点击菜单 Actions 当中的 SaveToLocalSystem,这时会弹出一个对话框来选择存储目录,如图 3 所示,选好后点击确定,所选文档中的附件就会被导出到所选目录下了。


图 3. 多 Notes 文档中附件批量导出到本地系统
图 3. 多 Notes 文档中附件批量导出到本地系统 

2. 汇总到 Notes 文档中

对于上面的例子,管理员也可能需要将不同文档中的附件汇总到该 Notes 数据库的一个文档中,又或者汇总到其他数据库的一个文档中。本文开发了另外一个 SaveToNotesDatabase Agent,它可以在指定的 Notes 数据库中新建一个文档,并将选中的文档中的附件批量汇总到该文档中。这个 Agent 也是用 LotusScript 编写的,见代码清单 2,也可以使用 Java API 编写。本文附件 attachment.nsf 中包含 SaveToNotesDatabase Agent 程序及测试数据。


清单 2. 多 Notes 文档中附件批量汇总到 Notes 文档中
				
 Sub Initialize() 
   
   Dim session As New NotesSession 
   Dim db As NotesDatabase 
   Dim collection As NotesDocumentCollection 
   Dim doc As NotesDocument   
   Dim rtitem As Variant 
   Dim doc2 As NotesDocument 
   Dim NotesRichTextItem As NotesRichTextItem 
   Dim NotesItem As NotesItem 
   Dim workspace As New NotesUIWorkspace 
   Dim result As Variant 
 
   result = workspace.Prompt( 13, "Choose database to save the attachments", "") 
   
   Set db = session.CurrentDatabase 
   Set collection = db.UnprocessedDocuments 
   Set doc = collection.GetFirstDocument() 
   
   If result(0) = "" & result(1) = db.Filename Then 
         Set doc2 = db.Createdocument()  
   Else 
         Dim db2 As NotesDatabase 
         Set db2 = session.GetDatabase( result(0), result(1), False ) 
         Set doc2 = db2.Createdocument() 
   End If 
   
   // 此处假定新建文档基于表单“Main Topic”,并将附件汇总到 Body 富文本域中
   doc2.Form = "Main Topic"
   doc2.Subject = "New Attachment"
   Set NotesRichTextItem = New NotesRichTextItem( doc2, "Body" ) 
   
   While Not(doc Is Nothing)         
     // 此处假定附件是嵌入在 Body 域当中,当然也可以循环文档所有的域,然后对于富文本域进行处理,提取附件
     Set rtitem = doc.GetFirstItem( "Body" ) 
     If ( rtitem.Type = RICHTEXT ) Then 
     ForAll o In rtitem.EmbeddedObjects 
        If ( o.Type = EMBED_ATTACHMENT ) Then     
         Call o.ExtractFile( "c:\temp\" & o.Name ) 
         Call notesRichTextItem.EmbedObject( EMBED_ATTACHMENT ,"", "c:\temp\" & o.Name) 
         Kill "c:\temp\" & o.Name 
        End If         
     End ForAll 
      End If 
   Set doc = collection.GetNextDocument(doc) 
   Wend 
   
   Call doc2.Save(False, True )   
   
 End Sub 

使用操作与上面类同,只是这次弹出的对话框是用来选择存储数据库的,如图 4 所示,可以选择本地的 Notes 数据库,也可以选择其他服务器上的 Notes 数据库,选好后点击确定,然后 SaveToNotesDatabase 会在该数据库中新建一个文档,并将所选文档中的附件汇总到该文档中。


图 4. 多 Notes 文档中附件批量汇总到 Notes 文档中
图 4. 多 Notes 文档中附件批量汇总到 Notes 文档中 

3. 导出到 Lotus Quickr 场所中

作为新一代的文档协作平台,Lotus Quickr 提供了功能强大的文档管理功能,并为客户提供了一系列功能强大的连接器(Connectors),这些连接器可以以插件的形式被安装到常用的桌面应用软件中,从而实现基于这些软件对 Quickr 服务器中文档数据的访问。另外,Quickr 为用户提供了一套完备的文档管理 API 以供用户定制和扩展,即 Content Public API,其中包括 WebService API 和 REST API 两部分。

在安装了 Quickr Notes 连接器后,用户可以将 Notes 数据库中的附件添加到 Quickr 场所中,如图 1 所示,这与保存到本地系统的情况类似。如果需要添加多个文档中的附件时,同样需要依次打开各个文档,将其中的附件添加到某个 Quickr 场所中。那么与上面两种情况类似,也可以开发一个 Agent 程序,将所有选中的文档中的附件批量添加到某个 Quickr 场所中。这个 Agent 可以使用 Java API 编写以获取附件,并使用 WebService API 编写程序将获取的附件添加到 Quickr 的某个场所中。

结束语

本文介绍了三种 Notes 数据库中附件批量导出的需求及相应的解决方法,并给出了前两种解决方案的具体实现代码。

在近二十年间,Lotus 的一些客户往往都积累了大量的 Domino 应用,并且大多都在稳定的运行中。但是,随着新兴技术的不断涌现,这些企业迫切的需要重用这些已有的 IT 资产,最大程度地分析和挖掘其中存储的宝贵数据,并期望和其它新兴的技术进行有效的集成。除了上述三种需求外,用户还可能将附件批量导入到其他一些系统中,比如 FileNet 及一些非结构化数据库等。如果读者有兴趣,可以参考本文的方法来实现其他 Agent,使用相应的 API 将附件批量导入到其他系统中。


下载

描述 名字 大小 下载方法
本文示例 attachment.zip 597 KB HTTP

关于下载方法的信息


参考资料

学习

相关文章 热门文章
  • 定制 Lotus iNotes 的邮件地址本
  • 从Notes迁移到Exchange Server 2007/Exchange Server 2010
  • Lotus Domino/Notes应用缓慢 如何加速?
  • IBM Lotus Notes附件处理多个缓冲区溢出漏洞
  • IBM Lotus Notes“cai://”URI Handler远程代码执行漏洞
  • IBM Lotus Notes Traveler多个安全漏洞
  • 现有 IBM Lotus Domino/Notes 邮件模板简介
  • 在 Lotus Notes 中设置邮件定时发送的方法及代理功能介绍
  • IBM Lotus Notes SURunAs.exe明文存储口令漏洞
  • IBM Lotus Domino 8.5 服务器管理入门手册
  • IBM Lotus Notes names.nsf开放重新定向漏洞
  • IBM Lotus Notes远程栈溢出漏洞
  • Domino管理员29个问题
  • Lotus Domino/Notes如何有效防止垃圾邮件
  • 配置Domino服务器
  • Lotus Notes常见问题答疑
  • Lotus Notes安装和使用的常见问题
  • Lotus Notes 的最终用户最需知道的十件事
  • 如何提高Domino服务器性能
  • LOTUS NOTES .INI文件参数设置秘籍
  • Domino 做Internet企业邮局的配置
  • Domino SMTP邮件服务器设置实例
  • 基于Linux平台的Domino Server安装与配置
  • 如何配制Domino for IIS?
  • 自由广告区
     
    最新软件下载
  • MCTS Self-Paced Training Kit Exam 7...
  • Foxmail 7 正式版
  • Microsoft Exchange 2010 PowerShell ...
  • SharePoint Server 2010 部署文档
  • Exchange 2010 RTM升级至SP1 教程
  • Exchange 2010 OWA下RBAC实现的组功能...
  • Lync Server 2010 Standard Edition 标..
  • Lync Server 2010 Enterprise Edition...
  • Forefront Endpoint Protection 2010 ...
  • Lync Server 2010 Edge 服务器部署文档
  • 《Exchange 2003专家指南》
  • Mastering Hyper-V Deployment
  • 今日邮件技术文章
  • Lotus Notes 数据库中附件的批量导出
  • 定制 Lotus iNotes 的邮件地址本
  • linux下如何用脚本自动发送文本mail邮件
  • 成功的电子邮件营销:从“狩猎”到“耕..
  • 电子邮件营销的四条黄金法则
  • 电子邮箱被盗用 经营户破财300万
  • 邮件是驱动手机用户购买行为最有效的移..
  • 企业邮箱惊现“隐形人” 境外客户屡被骗
  • 用户突破4亿 网易 Q2财报高度肯定邮箱...
  • 在规划电子邮件安全策略时采取的措施
  • 使用“Netsh”轻松更改IP地址
  • Exchange管理员的活动目录指南
  • 最新专题
  • 鸟哥的Linux私房菜之Mail服务器
  • Exchange Server 2010技术专题
  • Windows 7 技术专题
  • Sendmail 邮件系统配置
  • 组建Exchange 2003邮件系统
  • Windows Server 2008 专题
  • ORF 反垃圾邮件系统
  • Exchange Server 2007 专题
  • ISA Server 2006 教程专题
  • Windows Vista 技术专题
  • “黑莓”(BlackBerry)专题
  • Apache James 专题
  • 分类导航
    邮件新闻资讯:
    IT业界 | 邮件服务器 | 邮件趣闻 | 移动电邮
    电子邮箱 | 反垃圾邮件|邮件客户端|网络安全
    行业数据 | 邮件人物 | 网站公告 | 行业法规
    网络技术:
    邮件原理 | 网络协议 | 网络管理 | 传输介质
    线路接入 | 路由接口 | 邮件存储 | 华为3Com
    CISCO技术 | 网络与服务器硬件
    操作系统:
    Windows 9X | Linux&Uinx | Windows NT
    Windows Vista | FreeBSD | 其它操作系统
    邮件服务器:
    程序与开发 | Exchange | Qmail | Postfix
    Sendmail | MDaemon | Domino | Foxmail
    KerioMail | JavaMail | Winwebmail |James
    Merak&VisNetic | CMailServer | WinMail
    金笛邮件系统 | 其它 |
    反垃圾邮件:
    综述| 客户端反垃圾邮件|服务器端反垃圾邮件
    邮件客户端软件:
    Outlook | Foxmail | DreamMail| KooMail
    The bat | 雷鸟 | Eudora |Becky! |Pegasus
    IncrediMail |其它
    电子邮箱: 个人邮箱 | 企业邮箱 |Gmail
    移动电子邮件:服务器 | 客户端 | 技术前沿
    邮件网络安全:
    软件漏洞 | 安全知识 | 病毒公告 |防火墙
    攻防技术 | 病毒查杀| ISA | 数字签名
    邮件营销:
    Email营销 | 网络营销 | 营销技巧 |营销案例
    邮件人才:招聘 | 职场 | 培训 | 指南 | 职场
    解决方案:
    邮件系统|反垃圾邮件 |安全 |移动电邮 |招标
    产品评测:
    邮件系统 |反垃圾邮件 |邮箱 |安全 |客户端
    广告联系 | 合作联系 | 关于我们 | 联系我们 | 繁體中文
    版权所有:邮件技术资讯网©2003-2010 www.5dmail.net, All Rights Reserved
    www.5Dmail.net Web Team   粤ICP备05009143号