在 IBM Lotus Domino Designer 中使用 Java 构建应用程序Word格式文档下载.docx
《在 IBM Lotus Domino Designer 中使用 Java 构建应用程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《在 IBM Lotus Domino Designer 中使用 Java 构建应用程序Word格式文档下载.docx(41页珍藏版)》请在冰点文库上搜索。
AgentContextagentContext=
session.getAgentContext();
//(Yourcodegoeshere)
}catch(Exceptione){
e.printStackTrace();
}
System.out.println("
HelloWorld!
"
);
逐行详解
我们来逐行看一下这段代码:
importlotus.domino.*;
Java使用import语句以包括其他Java类。
在本例中,所有lotus.domino类对于代理代码都可用。
Java类通常包含在JAR文件中。
代理可以通过几种方式使用JAR文件。
有关JAR文件的信息,请参阅本文第4节“将外部JAR文件与Java代理一起使用”部分。
publicclassJavaAgentextendsAgentBase{
Java是一种面向对象的编程语言。
该行证明了这一点,创建Java代理时,它创建了JavaAgent类,这是在其中编写Java代码的主类。
可能还注意到了JavaAgent类扩展了AgentBase类。
因为Java是面向对象的,所以扩展AgentBase类为我们提供了进入代理的入口点,这将我们带到了下一行。
publicvoidNotesMain(){
NotesMain方法是到代理的入口点。
这里我们用自己的定义改写了AgentBase方法定义。
try{
在Java中,错误处理通过try和catch块进行处理。
Java中抛出异常的方法必须囊括在try块中,而且每一个try块都必须有一个相应的catch块。
在“HelloWorld”示例中需要try和catch块,因为getAgentContext方法抛出了NotesException。
要查看哪些Domino方法抛出异常,请参阅DominoDesigner帮助文件中的方法签名。
Sessionsession=getSessiono;
AgentBase类的getSession方法用于创建会话对象。
JavaSession类类似于LotusScriptNotesSession类。
AgentContextagentContext=session.getAgentContexto;
AgentContext类用于获取到当前数据库的句柄(使用其getCurrentDatabase方法)。
在LotusScript中,不需要使用这个额外的类来获取到当前数据库的句柄。
//(Yourcodegoeshere)
这一行要注意的是单行注释以“//”开头。
多行注释在开始和结尾处使用“/*”(类似于C++)。
System.out.println("
这是用于输出到控制台的Java方法。
要在Notes中打开Java控制台,从菜单中选择Tools>
ShowJavaDebugConsole。
System.out.println方法类似于LotusScriptPrint方法。
}catch(Exceptione){
这是与上文try代码块相对应的catch语句。
e.printStackTraceo;
在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/A
char
单个16位Unicode字符
但是,LotusScript提供了一个String类型,它包含多个字符
float
单精度32位IEEE754浮点
Single
单精度32位浮点
double
双精度64位IEEE754浮点
Double
双精度64位浮点
Boolean
true或false值
运算符
Java具有丰富的运算符集。
表3只是显示了其运算符的一部分并提供了说明和LotusScript的等价物(如果有)。
有关完整列表,请访问Java教程运算符页面。
表3.Java运算符
Java算术运算符
说明
=
赋值
~
加
~~
递增
+=
加法赋值
-
减(也是一元减运算符)
--
递减
-=
减法赋值
*
乘
*=
乘法赋值
/
除
/=
除法赋值
%
求余数
Mod
%=
求余数赋值
Java关系运算符
==
相等
!
不等于
<
>
>
大于
大于等于
=,=>
小于
小于等于
=,=<
Java逻辑(位)运算符
&
按位与
And
I
按位或
Or
A
按位异或
Xor
按位求补
Not
带有符号扩展的右移位
左移位
Java逻辑(布尔)运算符
布尔与
II
布尔或
布尔等于
Eqv
布尔非
声明变量
Java中声明变量的语法是类型,后面接着变量名:
类型variable_name;
在Java中,变量名由字母、数字和下划线组成。
变量名是区分大小写的并且不能以数字开头。
Java
LotusScript
inti;
DimiasInteger
Strings;
DimsasString
创建函数
关于函数语法,LotusScript和Java有两个主要的不同之处。
首先,返回类型放在函数名前面(这与LotusScript相反,在LotusScript中返回类型放在末尾);
第二,Java使用返回关键字从函数返回值(请参见清单1)。
清单1.创建函数示例
return_typefunction_name(parameter_type1parameter_name1,
parameter_type2parameter_name2)
{
//函数代码...
returnreturn_type_object;
publicintproduct(intx,inty)
returnx*y;
Functionproduct(xAsInteger,yAsInteger)AsInteger
product=x*y
EndFunction
Callingthefunction:
inti=product(2,4);
System.out.println(i);
DimiAsInteger
i=product(2,4)
Printi
创建类
Java中创建类的语法与LotusScript中的类似。
它们都使用带有private/public选项的类关键字,并且都支持类成员以及类方法。
但是,需要注意LotusScript类构造方法使用New关键字,而Java使用无参数的类名称(请参见清单2和表4)。
清单2.创建类示例
classclass_name
typeclass_member1;
typeclass_member2;
....
class_name()//构造方法
//构造方法代码
return_typeclass_method1(parameterlist)
//方法代码
return_typeclass_method2(parameterlist)
表4.创建类
publicclassPerson
privateStringName;
privateintAge;
publicPerson()
this.Name="
;
this.Age=0;
publicvoidSetName(Stringname)
this.Name=name;
publicStringGetName()
returnthis.Name;
publicvoidSetAge(intage)
this.Age=age;
publicintGetAge()
returnthis.Age;
publicvoidAddYears(inti)
this.Age=this.Age+i;
PublicClassPerson
PrivatePNameAsString
PrivatePAgeAsInteger
SubNew
PAge=0
PName="
EndSub
PublicPropertySetPerson_NameAsString
PName=Person_Name
EndProperty
PublicPropertyGetPerson_NameAsString
Person_Name=PName
PublicPropertySetAgeAsInteger
PAge=Age
PublicPropertyGetAgeAsInteger
Age=PAge
SubAddYears(iAsInteger)
PAge=PAge+i
EndClass
创建类的实例:
Personp=newPerson();
p.SetName("
JohnDoe"
p.SetAge(20);
System.out.println(p.GetName()+"
"
+p.GetAge());
p.AddYears(5);
DimpAsNewPerson
p.Person_Name="
p.Age=20
Messageboxp.Person_Name&
&
Cstr(p.Age)
p.AddYears(5)
流控制语句
要控制脚本流动,Java提供了您希望从编程语言中获得的所有标准流控制语句。
表5列出了Java最常用的流控制语句及其LotusScript等价物。
有关Java流控制语句的更多信息,请访问Java教程控制流语句页。
表5.Java流控制语句
Java流控制语句
if(condition){
//performthesestatements
IfconditionThen
'
performthesestatements
EndIf
else{
Else
switch(expr){
casec1:
//performthesestatementsifexpr==c1
break;
casec2:
//performthesestatementsifexpr==c2
...
default:
//performthesestatementsif
//expr!
=anyofcases
SelectCaseexpr
Casec1
performthesestatementsifexpr=c1
Casec2
performthesestatementsifexpr=c2
...
CaseElse
performthesestatementsif
expr<
anyofthecases
EndSelect
while(condition){
Whilecondition
Wend
do{
}while(condition);
DoWhilecondition
Loop
for(initialization;
termination;
increment){
ForcountVar=firstTolast
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与JavaDomino类之间的主要不同是UI类。
LotusScript提供了以下类,用于UI交互:
NotesUIWorkspace、NotesUIDatabase、NotesUIDocument和NotesUIView
这些类使您能与Notes中当前打开的数据库、文档或视图进行交互。
但是在Java中就没有等价的UI类。
有关JavaDomino类的完整列表,请参阅DominoDesigner帮助文件。
回页首
示例
我们来看一些使用LotusScript执行的常见任务,研究一下如何在Java中进行对等操作。
第一个例子是发送电子邮件消息。
示例1:
发送电子邮件
花一分钟时间来研究一下下面清单3中的LotusScript代码:
清单3.示例LotusScript发送电子邮件代码
1DimsessionAsNewNotesSession
2DimdatabaseAsNotesDatabase
3DimemailAsNotesDocument
4DimsendtoAsString