




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在 IBM Lotus Domino Designer 中使用 Java 构建应用程序Oscar Hernandez, 高级软件工程师, IBMOscar I Hernandez 是 IBM Lotus 技术支持中心的高级软件工程师。他是 Lotus Notes/Domino 应用程序开发团队的成员,也是 IBM 认证的高级应用程序开发人员。简介:本文旨在帮助那些传统的 LotusScript 开发人员转向 Java 开发。在几乎不具备 Java 知识的情况下,本文可帮助您开始在 IBM Lotus Domino 中进行 Java 应用程序开发。简介对于 IBM Lotus Notes 应用程序开发人员来说,LotusScript 和 LotusScript 类在设计 Notes 应用程序时很有用。LotusScript API 支持以编程方式与数据库、文档,甚至设计元素进行交互。随着 Java 发展成为主流编程语言,原来越多的 Notes 应用程序开发人员开始将目光投向 Java。本文面向那些想要在 IBM Lotus Domino 中使用 Java 进行编程的 LotusScript 开发人员。假定读者具有一定的 LotusScript 编程经验。本文包含三部分:Java 语言、示例和其他要素。Java 编程人员可以直接跳到示例部分,但是新手应该从 Java 语言部分开始阅读。Java 语言发布于 1995 年,Java 是一种面向对象的编程语言,它的出现满足了平台独立性需求。这是通过将 Java 源代码编译成字节码实现的,然后任意平台上的任何 Java 虚拟机(JVM)都可以解释字节码。因此,只要为目标平台实现了 JVM,就可以运行任何 Java 应用程序。有关更多信息,请参见 “The History of Java Technology”。Java 的语法类似于 C,而它面向对象的实现方式类似于 C+,因此 C/C+ 编程人员可以轻松掌握 Java。但是,LotusScript 开发人员可能会发现 Java 语法与 LotusScript 大不相同。由于本文关注的是在 Lotus Domino 中使用 Java,因此所展示的示例也将在 Lotus Domino 的环境中实现。我们从经典的 “Hello World” 示例开始。在 Domino Designer 中创建新的 Java 代理时,会收到表 1 左栏所示的模板代码。右栏的代码已经进行了修改以适应 “Hello World” 示例的需要。表 1. Hello World 示例模板 Java 代理代码 Hello World Java 代理代码 import lotus.domino.*; public class JavaAgent extends AgentBase public void NotesMain() try Session session = getSession(); AgentContext agentContext= session.getAgentContext(); / (Your code goes here) catch(Exception e) e.printStackTrace(); import lotus.domino.*; public class JavaAgent extends AgentBase public void NotesMain() try Session session = getSession(); AgentContext agentContext= session.getAgentContext(); / (Your code goes here) System.out.println(Hello World!); catch(Exception e) e.printStackTrace(); 逐行详解我们来逐行看一下这段代码:import lotus.domino.*; Java 使用 import 语句以包括其他 Java 类。在本例中,所有 lotus.domino 类对于代理代码都可用。Java 类通常包含在 JAR 文件中。代理可以通过几种方式使用 JAR 文件。有关 JAR 文件的信息,请参阅本文第 4 节 “将外部 JAR 文件与 Java 代理一起使用” 部分。public class JavaAgent extends AgentBase Java 是一种面向对象的编程语言。该行证明了这一点,创建 Java 代理时,它创建了 JavaAgent 类,这是在其中编写 Java 代码的主类。可能还注意到了 JavaAgent 类扩展了 AgentBase 类。因为 Java 是面向对象的,所以扩展 AgentBase 类为我们提供了进入代理的入口点,这将我们带到了下一行。public void NotesMain() NotesMain 方法是到代理的入口点。这里我们用自己的定义改写了 AgentBase 方法定义。try 在 Java 中,错误处理通过 try 和 catch 块进行处理。Java 中抛出异常的方法必须囊括在 try 块中,而且每一个 try 块都必须有一个相应的 catch 块。在 “Hello World” 示例中需要 try 和 catch 块,因为 getAgentContext 方法抛出了 NotesException。要查看哪些 Domino 方法抛出异常,请参阅 Domino Designer 帮助文件中的方法签名。Session session = getSessiono; AgentBase 类的 getSession 方法用于创建会话对象。Java Session 类类似于 LotusScript NotesSession 类。AgentContext agentContext = session.getAgentContexto; AgentContext 类用于获取到当前数据库的句柄(使用其 getCurrentDatabase 方法)。在 LotusScript 中,不需要使用这个额外的类来获取到当前数据库的句柄。/(Your code goes here) 这一行要注意的是单行注释以 “/” 开头。多行注释在开始和结尾处使用 “/*”(类似于 C+)。System.out.println(Hello World!); 这是用于输出到控制台的 Java 方法。要在 Notes 中打开 Java 控制台,从菜单中选择 Tools Show Java Debug Console。System.out.println 方法类似于 LotusScript Print 方法。 catch(Exception e) 这是与上文 try 代码块相对应的 catch 语句。e. pri ntStackTraceo; 在 catch 代码块中,可以按照自己的意愿处理异常;在本例中,我们只是将其输出到堆栈跟踪。Java 语言基础知识Java 提供了 8 种基本类型:byte、short、int、long、char、float、double 和 Boolean。 表 2 介绍了每种类型并指出了相对应的 LotusScript 的等价物(如果有)。表 2. 基本类型和 LotusScript 等价物Java 基本类型 Java 说明 LotusScript 等价物 byte正负 8 位二进制补码整数(-128 到 127)Byte相似点:8 位 不同点:无负数(0 到 255)short正负 16 位二进制补码整数(-32,768 到 32,767)Integer相似点:16 位,有正负(-32,768 到 32,767)int正负 32 位二进制补码整数(-2,147,483,648 到 2,147,483,647)Long相似点:32 位,有正负(-2,147,483,648 到 2,147,483,647)long正负 64 位二进制补码整数(-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807)N/Achar单个 16 位 Unicode 字符N/A但是, LotusScript 提供了一个 String 类型,它包含多个字符float单精度 32 位 IEEE 754 浮点Single相似点:单精度 32 位浮点double双精度 64 位 IEEE 754 浮点Double相似点:双精度 64 位浮点Booleantrue 或 false 值Boolean相似点:true 或 false 值运算符 Java 具有丰富的运算符集。表 3 只是显示了其运算符的一部分并提供了说明和 LotusScript 的等价物(如果有)。有关完整列表,请访问 Java 教程运算符页面。表 3. Java 运算符Java 算术运算符 说明 LotusScript 等价物 =赋值=加递增N/A+=加法赋值N/A-减(也是一元减运算符)-递减N/A-=减法赋值N/A*乘*=乘法赋值N/A/除/=除法赋值N/A%求余数Mod%=求余数赋值N/AJava 关系运算符 说明 LotusScript 等价物 =相等=!=不等于, 大于=大于等于=, = 小于=小于等于=, = 带有符号扩展的右移位N/A左移位N/AJava 逻辑(布尔)运算符 说明 LotusScript 等价物 &布尔与AndII布尔或Or=布尔等于Eqv!布尔非Not声明变量 Java 中声明变量的语法是类型,后面接着变量名:类型 variable_name;在 Java 中,变量名由字母、数字和下划线组成。变量名是区分大小写的并且不能以数字开头。Java LotusScript int i;Dim i as IntegerString s;Dim s as String创建函数 关于函数语法,LotusScript 和 Java 有两个主要的不同之处。首先,返回类型放在函数名前面(这与 LotusScript 相反,在 LotusScript 中返回类型放在末尾);第二,Java 使用返回关键字从函数返回值(请参见清单 1)。清单 1. 创建函数示例 return _type function_name(parameter_type 1 parameter_name 1, parameter_type2 parameter_name2) / 函数代码 . return return_type_object; Java LotusScript public int product(int x, int y) return x*y; Function product(x As Integer, y As Integer) As Integer product = x * y End Function Calling the function: int i = product(2,4); System.out.println(i); Calling the function: Dim i As Integer i = product(2, 4) Print i 创建类 Java 中创建类的语法与 LotusScript 中的类似。它们都使用带有 private/public 选项的类关键字,并且都支持类成员以及类方法。但是,需要注意 LotusScript 类构造方法使用 New 关键字,而 Java 使用无参数的类名称(请参见清单 2 和表 4)。清单 2. 创建类示例 class class_name type class_member1; type class_member2; . class _name() / 构造方法 / 构造方法代码 return _type class_method1 (parameter list) / 方法代码 return _type class_method2(parameter list) / 方法代码 . 表 4. 创建类Java LotusScript public class Person private String Name; private int Age; public Person() this.Name=; this.Age=0; public void SetName(String name) this.Name = name; public String GetName() return this.Name; public void SetAge(int age) this.Age = age; public int GetAge() return this.Age; public void AddYears(int i) this.Age = this.Age + i; Public Class Person Private PName As String Private PAge As Integer Sub New PAge = 0 PName = End Sub Public Property Set Person_Name As String PName = Person_Name End Property Public Property Get Person_Name As String Person_Name = PName End Property Public Property Set Age As Integer PAge = Age End Property Public Property Get Age As Integer Age = PAge End Property Sub AddYears (i As Integer) PAge = PAge + i End Sub End Class 创建类的实例 : Person p = new Person(); p.SetName(John Doe); p.SetAge(20); System.out.println(p.GetName() + +p.GetAge(); p.AddYears(5); System.out.println(p.GetName() + +p.GetAge(); 创建类的实例 : Dim p As New Person p.Person_Name = John Doe p.Age = 20 Messagebox p.Person_Name & & Cstr(p.Age) p.AddYears(5) Messagebox p.Person_Name & & Cstr(p.Age) 流控制语句 要控制脚本流动,Java 提供了您希望从编程语言中获得的所有标准流控制语句。表 5 列出了 Java 最常用的流控制语句及其 LotusScript 等价物。有关 Java 流控制语句的更多信息,请访问 Java 教程控制流语句页。表 5. Java 流控制语句Java 流控制语句 LotusScript 等价物 if (condition) /perform these statements If condition Then perform these statements End If if (condition) /perform these statements else /perform these statements If condition Then perform these statements Else perform these statements End If switch (expr) case c1: /perform these statements if expr = c1 break; case c2: /perform these statements if expr = c2 break; . . . default: /perform these statements if /expr != anyof cases Select Case expr Case c1 perform these statements if expr = c1 Case c2 perform these statements if expr = c2 . Case Else perform these statements if expr anyof the cases End Select while (condition) /perform these statements While condition perform these statements Wend do /perform these statements while (condition); Do While condition perform these statements Loop for (initialization; termination; increment) /perform these statements For countVar = first To last perform these statements Next LotusScript 与 Java 语言的不同之处LotusScript 与 Java 的类似之处在于它们都是面向对象的编程语言。除语法外,两种语言之间一个主要不同是 Java 是强类型的,而 LotusScript 不是。在 Java 中,必须在使用之前声明所有变量(名称和类型)。在 LotusScript 中没有这样的要求,尽管也有一些类型增强。另一个主要不同是 Java 区分大小写,而 LotusScript 不区分。编写 Java 代码时要记住这一点,因为 p 和 P 是两个不同的变量,而 setName 和 SetName 是两个不同的方法。特定于 Domino 的不同 尽管名称不同,但是大部分为 LotusScript 提供的 Domino 类在 Java 中都能找到。在 LotusScript 中,Domino 类以 “Notes” 开头;例如,用于处理数据库的类是 “NotesDatabase”,而针对文档的类是 “NotesDocument”。另一方面,在 Java 中,类名称不以 “Notes” 开头。因此,处理数据库的类就是 “Database”,而针对文档的类是 “Document”。LotusScript 与 Java Domino 类之间的主要不同是 UI 类。 LotusScript 提供了以下类,用于 UI 交互:NotesU IWorkspace、NotesU I Database、NotesU I Document 和 NotesU IView这些类使您能与 Notes 中当前打开的数据库、文档或视图进行交互。但是在 Java 中就没有等价的 UI 类。有关 Java Domino 类的完整列表,请参阅 Domino Designer 帮助文件。回页首示例我们来看一些使用 LotusScript 执行的常见任务,研究一下如何在 Java 中进行对等操作。第一个例子是发送电子邮件消息。示例 1:发送电子邮件花一分钟时间来研究一下下面清单 3 中的 LotusScript 代码:清单 3. 示例 LotusScript 发送电子邮件代码 1 Dim session As New NotesSession 2 Dim database As NotesDatabase 3 Dim email As NotesDocument 4 Dim sendto As String 5 Dim subject As String 6 Dim body As String 7 Set database = session.CurrentDatabase 8 Set email = database.CreateDocument 9 sendto = Enter _Email _Address _Here 10 subject = Email sent by LotusScript code 11 body = Text in body of email sent by LotusScript code 12 Call email.ReplaceItemValue(Form, Memo) 13 Call email.ReplaceItemValue(SendTo, sendto) 14 Call email.ReplaceItemValue(Subject, subject) 15 Call email.ReplaceItemValue(Body, body) 16 Call email.Send(False) 现在我们在 Java 中为以上示例编码,从为我们提供的 Java 模板代码开始(请参见清单 4)。清单 4. Java 模板代码 import lotus.domino. *; public class JavaAgent extends AgentBase public void NotesMain() try Session session = getSession(); AgentContext agentContext = session.getAgentContext(); / (Your code goes here) catch(Exception e) e.printStackTrace(); 在上面清单 3 中 LotusScript 示例的第 1 到 6 行,我们声明了变量 session、database、email、sendto、subject 和 body。因为模板代码已经为我们提供了 session 对象,我们来声明其余的变量(请参见 5)。清单 5. 声明其余变量 import lotus.domino. *; public class JavaAgent extends AgentBase public void NotesMain() try Session session = getSession(); AgentContext agentContext = session.getAgentContext(); / (Your code goes here) Database database; Document email; String sendto; String subject; String body; catch(Exception e) e.printStackTrace(); 在清单 3 的第 7 到 11 行,我们初始化 database、email、sendto、subject 和 body 变量(请参见清单 6)。如前面所述,必须使用 agentContext 对象而不是 session 对象来获取到当前数据库的句柄。另外,在 Java 中不需要 Set 关键字来设置变量。清单 6. 初始化变量 import lotus.domino. *; public class JavaAgent extends AgentBase public void NotesMain() try Session session = getSession(); AgentContext agentContext = session.getAgentContext(); /(Your code goes here) Database database; Document email; String sendto; String subject; String body; database = agentContext.getCurrentDatabase(); email = database.createDocument(); sendto = Enter _Email _Address _Here; subject = Email sent by Java code; body = Text in body of email sent by Java code; catch(Exception e) e.printStackTrace(); 在清单 3 的第 12 到 15 行,我们替换了 Form、SendTo、Subject 和 Body 字段的值,并在第 16 行发送了电子邮件。注意调用方法时,Java 不需要 Call 关键字(请参见清单 7)。另外,尽管 replaceItemValue 和 send 方法在 LotusScript 和 Java 中的拼写一样,您也必须记住在 Java 中要使用正确的大小写(因为 Java 区分大小写)。清单 7. 设置相应字段并发送电子邮件 import lotus.domino. *; public class JavaAgent extends AgentBase public void NotesMain() try Session session = getSession(); AgentContext agentContext = session.getAgentContext(); / (Your code goes here) Database database; Document email; String sendto; String subject; String body; database = agentContext.getCurrentDatabase(); email = database.createDocument(); sendto = Enter _Email _Address _Here; subject = Email sent by Java code; body = Text in body of email sent by Java code; email.replaceItemValue(Form, Memo); email.replaceItemValue( SendTo, sendto); email.replaceItemValue( Subject, subject); email.replaceItemValue(Body, body); email. send(false); catch(Exception e) e.printStackTrace(); LotusScript 中代码到此结束了,但是在 Java 代理中还有一些工作要做。特别是,在 Java 中,我们必须对所有 Domino 对象调用 recycle(请参见清单 8)。调用 recycle 确保分配给这些对象的内存都得以释放。有关 recycle 方法的更多信息,请参见第 4 部分的“recycle() 方法”一段。清单 8. 对 Domino 对象调用 recycle import lotus.domino. *; public class JavaAgent extends AgentBase public void NotesMain() try Session session = getSession(); AgentContext agentContext = session.getAgentContext(); /(Your code goes here) Database database; Document email; String sendto; String subject; String body; database = agentContext.getCurrentDatabase(); email = database.createDocument(); sendto = Enter_Email_Address_Here; subject = Email sent by Java code; body = Text in body of email sent by Java code; email.replaceItemValue(Form, Memo); email.replaceItemValue( SendTo, sendto); email.replaceItemValue( Subject, subject); email.replaceItemValue(Body, body); email. send(false); /recycle Java Domino objects if (session !=null) session.recycle(); if (agentContext !=null) agentContext.recycle(); if (database !=null) database.recycle(); if (email !=null) email.recycle(); catch(Exception e) e.printStackTrace(); 表 6 汇总了两种语言的比较。表 6. 示例 1 两种语言之间的比较LotusScript Java 示例 1:发送电子邮件 Dim session As New NotesSession Dim database As NotesDatabase Dim email As NotesDocument Dim sendto As String Dim subject As String Dim body As String Set database = session.CurrentDatabase Set email = database.CreateDocument sendto = Enter_Email_Address_Here subject = Email sent by LotusScript code body = Text in body of email sent byLotusScript code Call email.ReplaceItemValue(Form, Memo) Call email.ReplaceItemValue(SendTo, sendto) Call email.ReplaceItemValue(Subject, subject) Call email.ReplaceItemValue(Body, body) Call email.Send(False) 示例 1:发送电子邮件 Session session = getSession(); AgentContext agentContext =session.getAgentContext(); Database database; Document email; String sendto; String subject; String body; database = agentContext.getCurrentDatabase(); email = database.createDocument(); sendto = Enter_Email_Address_Here; subject = Email sent by Java code; body = Text in body of email sent by Javacode; email.replaceItemValue(Form, Memo); email.replaceItemValue(SendTo, sendto); email.replaceItemValue(Subject, subject); email.replaceItemValue(Body, body); email.send(false); /recycle Java Domino objects if (session !=null) session.recycle(); if (agentContext !=null) agentContext.recycle(); if (database !=null) database.recycle(); if (email !=null) email.recycle(); 示例 2:循环通过 Notes 视图第二个示例中,我们将循环通过 Notes 视图(请参见清单 9)。尽管很简单,该实例在 Java 中编码时却很重要,因为它证实了恰当地使用 recycle 方法可以防止内存异常。清单 9. 用于循环通过视图的 LotusScript 代码 1 Dim session As New NotesSession 2 Dim database As NotesDatabase 3 Dim view As NotesView 4 Dim document As NotesDocument 5 Set database = session.CurrentData
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美术项链艺术创作全解析
- 河北省鹿泉市2025年上半年公开招聘村务工作者试题含答案分析
- 河北省临西县2025年上半年事业单位公开遴选试题含答案分析
- 2025年二手房装修工程设计与施工监理、验收合同范本
- 2025年建筑项目竣工测绘服务合同
- 2025年度轻钢龙骨砌筑工程劳务承包合同
- 2025年荒山荒滩治理承包地租赁合同汇编
- 2025年充电桩安装与充电站安全保障体系合同范本
- 2025版汽车维修贷款授权委托合同
- 2025东航大客户航空保险定制服务合同
- 2025四川省公安厅招聘辅警(448人)笔试参考题库附答案解析
- 湖北省圆创高中名校联盟2026届高三第一次联合测评 语文试卷(含答案)
- 2025秋苏教版(2024)小学科学二年级上册(全册)课时练习及答案(附目录)
- 2025年中学生守则及中学生日常行为规范
- 巡察整改工作课件模板
- 医务人员职业道德准则理论试题
- 2025年城镇燃气条例竞赛题库
- GB/T 22030-2025车用乙醇汽油调合组分油
- 展厅预算装修方案(3篇)
- 肺癌的护理新进展
- 2025年煤炭矿山职业技能鉴定考试-综采考试历年参考题库含答案解析(5套100道单选题合辑)
评论
0/150
提交评论