这是一个学习关于如何使用Lotus Notes的Agent功能来实现自动化办公的学习笔记。

一. 介绍


  Lotus Notes/Domino 是一个世界领先的企业级通讯、协同工作及Internet/Intranet平台;具有完善的工作流控制、数据库复制技术和完善可靠的安全机制;尤其适合于处理各种非结构化与半结构化的文档数据、建立工作流应用、建立各类基于Web的应用。它全面实现了对非结构化信息的管理和共享,内含强大的电子邮件功能及工作流软件开发环境,是实现群组协同工作、办公自动化的最佳开发环境。

Notes的主要设计元素:

数据库:在notes中存储文档的单元,文档是用来保存数据的,数据库里保存了若干个文档。
表单:是用来定义文档的格式和布局,每个表单包含域、静态文本、图形和按钮。
视图:是帮助用户很容易的找到你想要的文档。视图可以为数据库内容提供概述报告
文件夹:类似于视图,但可以将视图中的文档拖到文件夹,反之则不行。
代理:是在数据库中执行特定任务的单机程序:如修改域值,发送邮件
XPages: XPages是Domino 8.5引进的基于JSF的设计元素。大大丰富了Domino的Web开发功能。

二. Lotus Notes 安装和配置


2.1 Lotus 产品说明

  IBM公司提供的这一软件产品的全称是IBM Lotus Notes & Domino. Notes是客户端,Domino是服务器。

  Lotus Notes是指Notes客户端,它安装在用户个人电脑上,用于访问电子邮件和Notes应用。

  Domino则是Notes/Domino组合的服务器部分,它可以运行在各种操作系统中。当用户通过Notes客户端连接服务器备份邮件数据时,用来从用户邮件数据库中提取内容的正是Domino服务器。Domino服务器还负责控制邮件和应用数据库的登录和安全等。Domino服务器拥有强大的安全模式,可以控制访问单个Notes文档级别的安全性。主要通过基于用户Notes ID登录系统,以及数据库和网络通信加密技术等来实现。

2.2 安装

2.2.1 环境:
  服务器:DOMI_SRV_9.0_WIN_64_EN_TRIAL.exe

  客户端:NotDesg_9.0_WIN_SC_deve.exe/lotus_notes853_win_SC.exe

  这里建议客户端选择Notes design。因为需要使用Domino Administrator来对Domino服务器进行配置,一般的Lotus Notes客户端不附带该组件。

  

2.2.2 Server安装和配置:

服务器安装步骤,安装默认设置安装服务器domino,服务器在初次启动的时候,将要求配置该服务器。

详细的配置方法可以参考后面的参考资料进行配置,这里只说明一些需要注意的地方:

  1. 服务器名称应与计算机名称相同,否则在配置过程中可能会出现错误,导致服务器运行不正常或无法配置。计算机名称的修改如下:右击桌面的“我的电脑”,单击“属性”,选择“计算机名”标签,再单击“更改”。

    

  2. 自定义服务器管理员的用户名和密码,用户只需要在“Last name”项中填入名称即可。下面的“Also save a local copy of the ID file”要勾选,它会创建一个“admin.id”的文件,用户加载到Note Administrator客户端用于管理Domino服务器。

    

2.2.3 Client端的安装和配置

1. 按照默认安装完Notes后(如果不了解,可以参考后面的参考资料),连接上服务器。

如果想配置服务器的话,你需要安装包含Administrator 的客户端版本,这里安装的是NotDesg_9.0_WIN_SC_deve.exe。

2. 配置邮件服务器

参考《IBM Lotus Domino 邮件服务器配置攻略》

三. Lotus Script语法介绍


  LotusScript是一种和Basic相兼容的面向对象的Scripting环境,它具有强大的能够从事面向对象应用软件开发的语言范围,能够提供循环和分支的能力、数组以及访问Notes对象的能力。 
  判断Notes中什么时候使用LotusScript或公式语言

  1. 任何时候当执行该任务的函数或命令存在时,使用公式。
  2. 对于复杂的程序控制或循环,使用LotusScript。
  3. 存取或操作储存的文档数据要使用LotusScript,特别对于跨文档、跨数据库的存取。
  4. 若公式语言不能办到,则使用LotusScript

具体内容请参考 《LotusScript语言的基本知识》

四. Lotus Notes 的Agent编程


在参考《在 Lotus Notes 中设置邮件定时发送的方法及代理功能介绍》中具体介绍了Agent的概念和如何使用。

这里只就Lotus Script的编程进行一些使用上的说明:

  1. Declerations 用来定义一些函数或者全局变量,比如下面的 createPath 在Declerations中定义并实现后,将变成下面这样

    

  2. 程序的入口使用Initialize,Terminate入口一般不使用,如果程序实现在Terminate中,一些Lotus Script接口将无法被调用。

五. 具体实例


  这里有一个Notes 的邮件附件处理Agent,具体的需求是根据邮件的时间和标题来创建文件夹,并将附件存储在标题文件夹中。

 Sub createPath(path As String)

     Set objFSO = CreateObject("Scripting.FileSystemObject")

     If objFSO.FolderExists(path) Then
'Messagebox ("Directory does exist")
Else
'Messagebox("Directory does not exist")
Mkdir (path)
End If
End Sub Sub Initialize Dim DirResult As String
Dim dirPath As String
dirPath = "d:\loans" Dim names As String
Dim compname As String
Dim zhihangList() As String
zhihangList() = "scarlettduan"
zhihangList() = "jack"
zhihangList() = "god"
zhihangList() = "lu" Dim session As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim item As NotesItem
Dim body As NotesRichTextItem
Dim rtnav As NotesRichTextNavigator
Dim rtrange As NotesRichTextRange Set db = session.CurrentDatabase
Set dc = db.UnprocessedDocuments
Set doc = dc.GetFirstDocument
Set body = doc.GetFirstItem("Body") Set rtnav = body.CreateNavigator REM 过滤发件人
Set item = doc.GetFirstItem("From")
If (item Is Nothing) Then
Msgbox "收件人不存在,这个程序不能运行 ",,"退出"
Exit Sub '退出程序 1
Else
Dim nameArr nameArr = Split(Cstr(item.Text),"/", -, ) 'For i = 0 To Ubound(nameArr)
' Messagebox nameArr(i)
'Next i '取倒数第三个作为发件人
'names = Mid(nameArr( Ubound(nameArr) - 2), 4)
names = Mid(nameArr(), ) For i = To Ubound(zhihangList)
If(zhihangList(i) = names) Then
'Messagebox ("find the zhihang from the list")
Goto Step1
End If
Next i Msgbox "发件人不正确,可能不是你想要加工的邮件 ",,"退出"
Exit Sub '退出程序 2
End If Step1: REM 过滤附件信息
If rtnav.FindFirstElement(RTELEM_TYPE_FILEATTACHMENT) Then Dim filetype As String
Do
Set att = rtnav.GetElement()
filetype = Strright(att.Source,".")
'Messagebox filetype
If filetype = "xls" Or filetype = "xlsx" Then
Msgbox "该邮件中存在EXCEL 附件,可能不是你想要加工的邮件 ",,"退出"
Exit Sub '退出程序 3
End If Loop While rtnav.FindNextElement()
Else
Msgbox "该邮件中不存在附件,可能不是你想要加工的邮件 ",,"退出"
Exit Sub '退出程序 5
End If REM 获得时间,创建文件夹
Dim timeArr
Dim myMouth As String
Dim myDay As String
Dim dateTime As New NotesDateTime( "" )
Set item = doc.GetFirstItem( "DateComposed" ) dateTime.LSLocalTime = doc.Created createPath(dirPath) myMouth = Format(Cstr(dateTime.LSLocalTime), "yyyymm")
dirPath = dirPath & "\" & myMouth 'Messagebox "dirPath " & dirPath
createPath(dirPath) myDay = Format(Cstr(dateTime.LSLocalTime), "yyyymmdd")
dirPath = dirPath & "\" & myDay 'Messagebox "dirPath " & dirPath
createPath(dirPath) REM 这里需要根据实际情况修改
REM 获得邮件标题,创建文件夹
Set item = doc.GetFirstItem( "Subject" ) If ( item.Text = "" ) Then '如果该邮件没有标题,根据需要创建文件名 'Messagebox( "There is no Subject item on the document.you need to create file by youself" )
compname = Cstr(Inputbox$("There is no Subject item on the document. " + Chr() + "the document name should be?")) If(compname = "") Then
Msgbox "你必须输入一个公司名称 ",,"退出"
Exit Sub '退出程序 4
End If compname = dirpath & "\" & names & compname
createPath(compname) Else ' 在邮件有标题的情况下 'Messagebox( "The Subject item on the document has the value: " + item.Text )
Dim subArr
Dim haveComp As Boolean
'Dim names As String haveComp = False
subArr = Split(Cstr(item.Text),":", -, ) 'Messagebox subArr(0) & " " & Cstr(item.Text)
'一般情况下,格式为xxx申请:xxx公司,这里表示没有使用“:”作为分隔符的情况下,提示手动输入
If subArr() = item.Text Then '如果非上面格式的情况,使用“:”分割的邮件名 'Messagebox ("have not 公司 1")
compname = Cstr(Inputbox$("There is no Subject item on the document. " + Chr() + "the document name should be?")) If(compname = "") Then
Msgbox "你必须输入一个公司名称 ",,"退出"
Exit Sub '退出程序 4
End If compname = dirpath & "\" & names & compname
createPath(compname) Else
For i = To Ubound(subArr) '这里是创建文件夹的关键位置,公司名需要是带有申请两字的后面
If Instr(subArr(i), "申请") = Then '''''''(1)
'如果整个标题中都没有上面的关键字,该处理将在后面进行,对于下面的have not 公司 2
Else
'Messagebox ("hava 公司 2")
haveComp = True
compname = subArr(i + )
compname = dirpath & "\"& names & compname
createPath(compname)
End If
Next i '一般情况下,下面的路径不会运行到
If haveComp = False Then 'have not 公司 2.对于上面的(1) 'Messagebox ("have not 公司 2")
compname = Cstr(Inputbox$("There is no Subject item on the document. " + Chr() + "the document name should be?")) If(compname = "") Then
Msgbox "你必须输入一个公司名称 ",,"退出"
Exit Sub '退出程序 4
End If compname = dirpath & "\" & names & compname
createPath(compname)
End If
End If End If REM Get attachments
If rtnav.FindFirstElement(RTELEM_TYPE_FILEATTACHMENT) Then Do
Set att = rtnav.GetElement()
filepath$ = compname + "\" & att.Source 'Messagebox(filepath$)
Call att.ExtractFile(filepath$)
'Print filepath$ & " extracted"
Loop While rtnav.FindNextElement() End If
End Sub

参考资料:

IBM Lotus Domino Server首次配置详解 http://net.zol.com.cn/103/1032259.html

IBM Lotus Domino 邮件服务器配置攻略 http://net.zol.com.cn/105/1052918.html

LotusScript基本语法及举例分析 http://news.ccidnet.com/art/32855/20100709/2110929_1.html

LotusScript语言的基本知识 http://wnight88.blog.51cto.com/512204/140459

在 Lotus Notes 中设置邮件定时发送的方法及代理功能介绍 http://www.ibm.com/developerworks/cn/lotus/notes-timing/

附件

Lotus Notes 学习笔记的更多相关文章

  1. C# Windows Service调用IBM Lotus Notes发送邮件

    近日研究了下IBM Lotus Mail,这货果然是麻烦,由于公司策略,没有开放smtp,很多系统邮件都没有办法发送,于是入手google学习Lotus Mail,想做成Windows服务,提供wcf ...

  2. Google TensorFlow深度学习笔记

    Google Deep Learning Notes Google 深度学习笔记 由于谷歌机器学习教程更新太慢,所以一边学习Deep Learning教程,经常总结是个好习惯,笔记目录奉上. Gith ...

  3. Java程序猿JavaScript学习笔记(2——复制和继承财产)

    计划和完成在这个例子中,音符的以下序列: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaSc ...

  4. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  5. udacity android 学习笔记: lesson 4 part b

    udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...

  6. Java程序猿JavaScript学习笔记(14——扩大jQuery UI)

    计划和完成这个例子中,音符的顺序如下: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScr ...

  7. Oracle RAC学习笔记02-RAC维护工具集

    Oracle RAC学习笔记02-RAC维护工具集 RAC维护工具集 1.节点层 2.网络层 3.集群层 4.应用层 本文实验环境: 10.2.0.5 Clusterware + RAC 11.2.0 ...

  8. PHP WeBaCoo后门学习笔记

    PHP WeBaCoo后门学习笔记 - PHP WeBaCoo backdoor learning notes WeBaCoo (Web Backdoor Cookie) 是一款隐蔽的脚本类Web后门 ...

  9. gPRC学习笔记

    gPRC学习笔记 gPRC基础教程. gPRC官方文档. protobuf 3.0的简易教程. 什么是RPC RPC(remote procedure call) -- 远程过程调用(相对于本地调用的 ...

随机推荐

  1. 理解WCF(第二部分,部分參考他人)

    該篇的主題:wcf到底是怎工作的? 一.什么是分布式: 首先看一张图: 由上图对比我们可以发现,区别就是前者把服务器放在了一台电脑上,而后者把服务器放在了多台电脑上.这样多台电脑处理起来的速度比一台电 ...

  2. 大数据日志分析产品——SaaS Cloud, e.g. Papertrail, Loggly, Sumo Logic;Open Source Frameworks, e.g. ELK stack, Graylog;Enterprise Products, e.g. TIBCO LogLogic, IBM QRadar, Splunk

    Learn how you can maximize big data in the cloud with Apache Hadoop. Download this eBook now. Brough ...

  3. struts2 框架 的环境搭建 与配置

    一,Struts2简介: 1,来由:Struts(金属支架),在程序中表示起支撑作用的通用程序代码,Struts2是在Struts1框架的基础上融合了WebWork优秀框架升级得到的. 2,解释:St ...

  4. 01_常用的MIME类型

    .doc     application/msword .docx   application/vnd.openxmlformats-officedocument.wordprocessingml.d ...

  5. 【构建二叉树】02根据中序和后序序列构造二叉树【Construct Binary Tree from Inorder and Postorder Traversal】

    我们都知道,已知中序和后序的序列是可以唯一确定一个二叉树的. 初始化时候二叉树为:================== 中序遍历序列,           ======O=========== 后序遍 ...

  6. OpenCV - Windows(win10)编译opencv + opencv_contrib

    在之前的几篇文章中,我提到了在Android.Linux中编译opencv + opencv_contrib,这篇文章主要讲在Windows中编译opencv + opencv_contrib. 首先 ...

  7. bzoj 3012: [Usaco2012 Dec]First! Trie+拓扑排序

    题目大意: 给定n个总长不超过m的互不相同的字符串,现在你可以任意指定字符之间的大小关系.问有多少个串可能成为字典序最小的串,并输出这些串.n <= 30,000 , m <= 300,0 ...

  8. 用Raspberry Pi搭建Azure IOT解决方案

    Raspberry Pi是一款基于Linux的单板机电脑.它由英国的树莓派基金会所开发,目的是以低价硬件及自由软件刺激在学校的基本计算机科学教育.树莓派配备一枚博通(Broadcom)出产的ARM架构 ...

  9. POJ1001(C++处理大数)

    Exponentiation Time Limit: 500MS   Memory Limit: 10000K Total Submissions: 158025   Accepted: 38470 ...

  10. .NET接入微信支付(一)JS API接入 V3

    前段时间刚接完银联支付,完事后又接了微信支付,前段时间一直急着上线,微信的接入一直没有时间处理,今天我们就来整理一下微信支付的接入方法和要点. 配置: 首先呢微信支付需要通过审核,审核啥的准备工作我就 ...