LotusScript语法
- 格式:pdf
- 大小:399.69 KB
- 文档页数:9
Lotus script 技巧LotusScript 是完全面向对象的编程语言。
它通过预定义的类与 Domino 接口。
Domino 监控用户代码的编译和加载,并且自动包含 Domino 的类定义。
访问现有的对象最好使用 LotusScript,例如:根据其他文档的值来更改一个文档中的值。
LotusScript 提供了一些公式没有的功能,例如:操作数据库存取控制列表 (ACL) 的能力。
写script关键是取对象,查看对象的属性,所以你要学会看notes提供的Script帮助。
下面是我收集的一些script例子。
一般是比较技巧的程序。
怎样判断视图中没有文档?set doc = vw.getfirstdocument()if doc is nothing then.....end if如何将查询结果放到一个文件夹里?下面是将搜索结果放到名叫newfolder的文件夹中,并跳转到该文件夹上Sub Click(Source As Button)Dim docs As notesdocumentcollectionDim doc As notesdocument...........q=doc.query(0)Set docs = db.ftsearch(q, 0)Call docs.PutAllInFolder( \"newfolder\" )Call w.OpenDatabase( \"\",\"\",\"newfolder\")End Sub如何删掉数据库中所有私有视图?Dim session As New notessessionDim db As notesdatabaseDim doc As notesdocumentSet db=session.currentdatabaseForall i In db.viewsSet doc=db.getDocumentByUNID(v.universalID)\' 这个地方视图当作文档来处理,以便取到视图的一些属性。
使用LotusScript获取多值域的值原理:文档中的域值是数组形式的。
多值域的值类似于一行多列的数组,下标从0开始。
假定域名为Employee,类型为多值文本域,文档中此域的值为:james,robin,alfred。
计划使用LS的得到返回值为:jamesrobinalfred。
方法1、直接获取strEmployee = doc.Employee(0) +doc.Employee(1) +doc.Employee(2)方法2、使用Evaluate声明Dim strEmployee AsVariantConst NotesMacro$ = "@Implode(Employee)"strEmployee = Evaluate(NotesMacro$,doc)MsgBoxCStr(strEmployee(0))方法3、使用GetItemValue方法Dim tname AsVarianttname = backdoc.GetItemValue("TComm3Name")MsgBox tnameForAll o In tnameMsgBoxCStr(o)EndForAll方法4、转化为数组处理Dim i,j AsIntegeri = 0arrEmployee = doc.GetItemValue("Employee ")For j=LBound(arrEmployee) ToUBound(arrEmployee)MsgBoxCStr(arrEmployee(i))i=i+1Next------------------例子--------------Dim WebStartDb As NotesDatabase '系统启动数据库Dim LinkDoc As NotesDocument '系统启动库中的链结文档Set WebStartDb=s.Getdatabase("", "weboa\woastart.nsf")Set LinkDoc = WebStartDb.GetDocumentByUNID(backdoc.DocID(0)) '根据链结文档ID从系统启动库中取链结文档IfNot LinkDoc IsNothingThenDim arrEmployee AsVariantDim strTComm3Name AsStringDim z,j AsIntegerz = 0strTComm3Name=""arrEmployee = backdoc.GetItemValue("TComm3Name")For j=LBound(arrEmployee) ToUBound(arrEmployee)'MsgBox "111:" & CStr(arrEmployee(z))strTComm3Name= strTComm3Name + CStr(arrEmployee(z))+";"z=z+1Next'MsgBox "strTComm3Name:" & strTComm3NameEndIfLinkDoc.IsTCommm=strTComm3NameCall LinkDoc.Save(True,True)。
公式语言是可以传值给Lotus Script的,只要合理在Lotus Script中使用公式,可起到事半功成的效果,在Lotus Script中使用公式,用的就是evaluate语句。
Evaluate的格式是:Evaluate("公式")如要取得文档的唯一ID,除可以用doc.universalid得到外,还可以用doc.id=Evaluate("@TEXT(@DocumentUniqueID)")得到一般情况下,用Evaluate对于处理与文本有关的内容有较Lotus Script的相关函数处理有效率。
如:@text@userRoles@replace@replaceshustring@left@right@middle注意:当公式中包含双引号时,可以用单引号代替,也可用花括号代替如:dim tempStr as stringtempStr=Evaluate("@left('name';1)")或:tempStr=Evaluate(@left({name};1)")另外:@DBManager@DBName@DBTittle@DDEExecute@DDElnitiate@DDEpoke@DDETerminate@Command@PostedCommand@DialogBox@PickList@prompt@ViewTitle不适用于evaluate语句Evaluate语句可以使用notes公式进行计算而不必使用复杂的LotusScript语法:variant = notesSession.Evaluate( formula$, doc )计算公式:String. The formula.文档:NotesDocument. The formula context. Cannot be null.返回类型:variant例如:获取当前时间Dim nowtime As Variantnowtime=Evaluate(|@Now|,appdoc)appdoc.check_time=nowtime '2013-01-03 13:10:00公式语言是可以传值给Lotus Script的,只要合理在Lotus Script中使用公式,可起到事半功成的效果,在Lotus Script中使用公式,用的就是evaluate语句。
综合使用JavaScript、LotusScript_Agent和Formula的技巧综合使用JavaScript、LotusScript Agent和Formula的技巧一概述在使用 Designer开发B/S模式的应用时,JavaScript、LotusScript 和Formula是我们主要用到的三种开发语言。
它们在各自的位置都有着很强劲的优势。
1. JavaScript因为只能取得浏览器端的数据,不能访问Notes DOM;所以,主要用在浏览器端的数据验证、信息提示等对当前Brows窗口操作易的用性功能。
2. LotusScript能访问Notes DOM。
在Notes客户端可以取得当前文档的数据,但是,因为其无法直接在浏览器端工作;所以在B/S模式的应用中LotusScript只能在服务器端工作,我们通过编写LotusScript代理来实现其强大的文档处理能力。
3. Formula能访问后台数据,语言简洁,数据处理能力较弱,不能在浏览器端工作。
Formula主要使用在元素的显示控制以及域值的计算公式及简单的数据处理方面。
这三者使用的范围和处理能力各不相同。
在应用中将其三者综合起来使用,会使应用的各方面功能大大增强。
二由JavaScript向代理(LS\FL)通信一般情况下JavaScript向代理的通信,使用url command。
即如下格式:http://Host/Database/AgentName?OpenAgent&参数。
这类操作可以用来解决数据查询、文档删除等任务。
这类操作的特点是可以带参数,但是取不到浏览器端的当前文档,无法对浏览器端的文档进行处理。
那么,为什么要使用JavaScript向代理通信,并让代理取得浏览器端的当前文档呢?先看一个例子:在某申请系统中,用户创建新申请可以这样做:打开新的申请单,填写各项目后,点击操作按钮"提交申请",就完成了操作。
LotusScript程序开发经验总结内容:一、关于AppendItemValue试试下面这个简单的例子:Dim ws As New notesuiworkspaceDim uidoc As notesuidocumentDim doc As notesdocumentSet uidoc=ws.currentdocumentSet doc=uidoc.documentFor i=1 To 10Call doc.appenditemvalue("myitem",i)NextCall doc.save(True,True )这个程序用以对当前文档增加10个ITEM,名字都叫myitem,但值从1到10不等。
结果如何?用调试方式进行观察,发现:确实增加了10个ITEM,名字都叫myitem,但值却都是1!这与NOTES中的帮助不符。
帮助里宣称:If the document already has an item called itemName$, AppendItemValue does not replace it.Instead, it creates another item of the same name, and gives it the value you specify.^^^^^^^^^^^^^^^^^^^^从4.6到5.0结果都一样。
二、区分NOTES的前台类与后台类由于两者的使用范围不一,在写程序时应注意这一点,尤其写代理时。
如果在后台服务器运行的代理里加一句:Dim ws As New notesuiworkspace代理运行日志报错:Unkown Error.三、关于NOTES与OLE的共享域NOTES提供了一个很好的功能:共享域。
NOTES用共享域来与OLE应用程序交换彼此信息。
但除非确有必要与OLE应用程序共享信息,建议在设计表单时,选上:禁止共享域。
学习LotusScript学习LotusScriptLotusScript对象与类1.面向对象编程类是以抽象数据类型为基础的对象行为,抽象数据类型定义了以类型为基础执行所有接口为一个类而定义的所有操作称之为方法。
2.对象一般可以从两个方面来理解面向对象编程中的对象:?属性。
?对象。
3.类类是从对象中抽象出来,作为对具有相同特征的一组对象的描述。
类是一种定义,它描述该类中每个对象共有的属性和方法,类不占用计算机内存。
Notes中的类被分为前端类(front-end)和后端类(back-end)两种。
前端类主要对用户当前正在工作的对象、表示Notes客户机用户界面中的对象进行操作。
后端类可以访问和操作任何数据库中的任何文档、视图与文件夹内容、数据库ACL以及外部数据。
7个前端类?NotesUIDatabase :代表Notes工作台上打开的数据库?NotesUIDocument :用于用户访问当前文档?NotesUIView :代表当前的数据库视图?NotesUIWorkspace :帮助用户访问Notes当前的工作台?Button :代表表单或文档上的操作按钮、热点或按钮?Navigator :代表一个导航器上的对象,帮助用户操作浏览器?Field :代表表单中的一个域。
23个后端类?NotesACL :代表数据库中的所有存取控制列表,通过它用户可以访问和使用数据库中的存取控制列表?NotesACLEntry :代表存取控制列表中一个单一的ACL项目,通过它用户可以查询Notes 对象的访问属性?NotesAgent :代表一个代理,通过它用户可以运行一个代理或查询代理的属性?NotesDatabase :代表一个数据库,通过它用户可以获得一个数据库的属性和操作该数据库中的文档、视图、表单等所有与数据库相关的对象?NotesDataRange :代表Notes中的时间和日期,用于Notes中的日历和日程安排?NotesDataTime :用于Notes中的时间和日期格式的转换?NotesDbDirectory :代表Notes服务器和本地机上的所有数据库列表?NotesDocument :代表Notes数据库中的一个文档,通过它可以实现对文档的操作?NotesDocumentCollection :代表Notes中类的集合,通过它用户可以访问所有的文档?NotesEmbeddedObject :代表Notes中的嵌入对象、链接和附件,通过它用户可以操作以上的对象?NotesForm :代表Notes数据库中的一个表单,通过它用户可以访问表单的属性,还可以对表单进行一定的操作?NotesInternational :代表Notes所在操作系统的不同国家、不同的设置?NotesItem :代表文档中的域,通过它用户可以访问域的属性?NotesLog :用于创建Notes日志,记录Notes事件、操作和错误等?NotesName :代表Notes中的用户名、服务器名和访问控制列表中的名字?NotesNewLetter :代表一个概要文档,其中包括与其他文档的链接?NotesRichTextItem :代表RTF域,通过它用户可以访问RTF域?NotesRichTextStyle :用于设置RTF域的属性?NotesSession :代表用户与Notes的对话,是所有类的根类?NotesTimer :通过该类可以设定时间间隔来触发一个事件?NotesView :代表数据库中的一个视图,通过它用户可以获得数据库中所有的视图的属性和访问视图中的文档?NotesViewColumn :代表视图中的一个列,通过它用户可以获得列的属性?NotesRegistration :主要操作Notes用户名和通讯录,通过它用户可以增加用户和服务器、登记新用户、交叉验证等程序书写规则1.注释要添加注释,只要使用单引号“’”作为注释文字的开头。
LotusScript基本语法收藏LotusScript语言的基本知识一、概述LotusScript是一种和Basic相兼容的面向对象的Scripting环境,它具有强大的能够从事面向对象应用软件开发的语言范围,能够提供循环和分支的能力、数组以及访问Notes对象的能力。
判断Notes中什么时候使用LotusScript或公式语言1)任何时候当执行该任务的函数或命令存在时,使用公式。
2)对于复杂的程序控制或循环,使用LotusScript。
3)存取或操作储存的文档数据要使用LotusScript,特别对于跨文档、跨数据库的存取。
4)若公式语言不能办到,则使用LotusScript在Notes应用程序中访问和操作对象需要三步进行:1.声明对象变量DIMDIM db As NotesDatabase2.实例化一个类将其赋值给对象变量SET db = New NotesDatabase("Domestic","Sales.nsf")3.使用这个对象的方法或属性db.created '用来展现创建数据库时的日期和时间二、NotesScript中的数据元素NotesScript中的常量Null '特殊值,代表数据遗失或空Empty '相当于"",也就是空串Nothing '涉及变量的初始值,表示对象变量没有内容PI '圆周率True/False '分别为数值1和0数据类型Integer(整型) Long(长整型) Single(单精度型) Double(双精度型)Currency(货币型) String(字符串)运算符+ - * / < > <> = Not And OR &常量和变量Dim address As String '定义变量address = "100 Main Street " '变量赋值Const address = "100 Main Street" '创建字符常量address通信输入和输出Dim response as Integerresponse = Inputbox("Do you want to continue") '弹出输入框输入Messagebox(response) '弹出输出窗口输出数据注释1.单行注释:用Rem或'号2.多行注释:用%Rem和%EndRem%Rem '多行注释实例The first statement in this Script declares a variable myName.The second assign the value "Robert" to myName.The third statement display the value of myName.%EndRem数据类型转换Asc(String) 函数 '将字符串转化为ANSI字符代码CBool(expression) 函数 '将表达式转化为布尔型CByte(expression) 函数 '将表达式转化为字节型CCur(expression) 函数 '将表达式转化为货币型CDate(Strin*) 函数 '将字符串转化为日期型**bl(expression) 函数 '将表达式转化为双精度型Chr(Integer) 函数 '返回整数AscII码对象的字符,例如65表示ACInt(expression) 函数 '将表达式转化为整型CLng(expression) 函数 '将表达式转化为长整型CSng(expression) 函数 '将表达式转化为单精度型CStr(expression) 函数 '将表达式转化为字符串Hex(number) 函数 '返回十六进制Oct(number) 函数 '返回八进制三、数组管理Dim MyDays(7) as String '声明一个数组一共7个元素,下标为0~6Dim MyDay(1 to 7) as String '声明一个数组下标为1~7ReDim MyDay(1 to 3) '重新设置数组的边界和维数,这里ReDim用于定义动态数组UBound(MyDay,1) '返回数组的上界,1表示若是多维数组,返回第一维的上界LBound(MyDay) '返回数组的下界LBound(MyDay,2) '返回数组第2维的下界MyDay(1) = "Sunday" '给数组元素赋值四、语句1、IF ... End ifif balance > 100 theninterest = 0.35elseinterest = 0end if2、Select caseSelect case thisMonthcase 1Response = "January"case 2 to 10 '也可以写成case 10,20,30或case is > 10 response = "Other"case elseMessageBox(thisMonth & "is invalid value") end Select3、Do...loops和while... wendDo while/until 条件'语句组loopDo'语句组loop while/until 条件while 条件'语句组wend4、For...NextFor i = 1 to 5MyDays(i) = InputBox("Enter your work days:") Next i5、ForAllForAll m in db.managers '循环显示数组db.managers中的元素 MessageBox(m)。
第1课 LotusScript语法 1.1 LotusScript的语法: 1.1.1 语法概要: √ 语句行结束为行结束,无须特殊符号 √ 一条语句占有多行时,使用“ _”作为行结束 √ 同一行录入多条语句时,使用“:”分隔语句 √ 语法类似VB,大小写不敏感 √ 注释: • 单行:’ • 多行:%Rem …%End Rem √ 基本变量类型赋值:“=” √ 对象赋值:“Set ObjectName = ” 1.1.2 内置常量: √ NOTHING: • 为Object的默认值 • 使用Is来判断(不可使用“=”) √ NULL • 使用IsNull()来判断(不可使用“=”) √ PI • 3.1415926… √ TRUE/FALSE • LotusScript内部使用-1代表TRUE;使用0代表FALSE • 任何非0数,即为TRUE √ EMPTY • 对String类型:”” • 对数字类型:0 • 使用IsEmpty()判断(参见Notes Help) > 当对NotesItem之Variant值判断时,IsEmpty(Var(0))总返回True,即使域值为”” > 使用Var(0) = “”判断! • 该EMPTY名称不可用以赋值! 1.1.3 基本变量类型 √ 数字: • 非十进制数 > Byte(1-Byte) > 2进制:B ° 如:B10010100, %B10010100 > 8进制:O ° 如:O711423, &O711423 > 16进制:H ° 如:H459f, &H459f • 整数: > Integer(2-Byte) ° 强制符号:% > Long(4-Byte) ° 强制符号:& > 如:7, %77, &777 • 浮点数: > Single(4-Byte) ° 强制符号:! > Double(8-Byte) ° 强制符号:# > 如:7.7, !70.7, #70.7E+02 √ Currency:(8-Byte) • 强制符号:@ √ String:(2-Byte) • 强制符号:¥ • 使用符号: > “” > {} > || √ Boolean:(2-Byte) √ Variant: • 可以表示的数据类型: > 可以代表以上任何基本数据类型 > 可以代表以上任何基本数据类型的Array > 可以代表Date/Time类型 ° LotusScript没有专用的Date/Time类型的声明及赋值 ° 可以使用以下函数生成Date/Time类型 − Cdat(), DateNumber(), DateValue() − Date(), Now(), Today() − Year(), Month(), Day(), Houer(), Minute(), Second(), Weekday() > 代表Object类型 > NULL、NOTHING或Empty值 • 在同其它数据类型交换数据时,使用数组下标 > 如:tmp_strName = tmp_varFieldVal(n) • 判断Variant是否为空值 > 不可使用IsNull(), IsEmpty()方法,当Variant下标超出时,运行报错! > 使用:Ubound(), Lbound()及IsArray()方法判断 1.1.4 基本数据类型的转换 √ CBool, CByte, CCur, CDat, CDbl, CInt, CLng, CSng, CStr, Cvar √ String <-> Variant √ Implode(), Join(), Split() 1.1.5 常用数据类型的判断函数 √ IsNull(), IsEmpty, IsNumber(), IsNumberic(), IsObject(), IsUnKown(), IsDate() 1.1.6 变量的声明: √ 语法: • {Dim|Public| Private}varName1[ As dataType ], varName2 [ As dataType], ... √ 声明中的关键字: • Dim(声明Private作用域的变量) • Static(声明静态变量) • Public(声明Public作用域的变量) • Private(声明Private作用域的变量) √ 完整声明: • 如:Dim tmp_strName As String, tmp_strTitle As String √ 隐含声明: • 如:Dim tmp_strName¥, tmp_strTitle¥ • 如:在未声明时使用:myString¥ = “String Value” √ 定长字符串声明: • 如:Dim tmp_strName As String * 10 1.1.7 数组的声明 √ 语法: • {Dim|Public| Private}varName1[Length_X, Length_Y] [As dataType] • 定长数组:Dim tmp_strArray(Length) As String • 变长数组:Dim tmp_strArray() As String • 重定义数组长度:ReDim tmp_strArray(Length) > 在动态数组,未通过ReDim声明前,无法使用之! > Variant类型的变量本身,就可以是变长数组,且可以直接将列表值赋于之,而使用 √ List类型 • List为1维的数组 1.1.8 运算符号 G1-1 1.1.9 判断符号 G1-2 1.1.10 数位操作符号: G1-3 1.1.11 逻辑连接符号: G1-4 1.1.12 特殊符号的运用: √ 字符串: • 连接符: > + ° 如:”100” + “200” ‘Result: “100200” > &(强制连接) ° 如:100 + “200” ‘Result: 300 ° 如:100 & “200” ‘Result: “100200” • 匹配检验: > Like ° 语法: − stringExpr Like patternString G1-5 ° 如:挑出1 ̄100之间包含3,但不包含2的数字 − For x = 1 To 100 If CStr(x) Like "[!2]3" Then Print x Next x − 'Results: 13 33 43 53 63 73 83 93 √ Object • Is:判断Object是否相同 • IsA:判断Object的继承及派生关系 1.1.13 Function/Sub √ 参数定义: • [ByVal] paramName [() | List] [As dataType] > ByVal:使用“值传递” > 默认是“地址传递” > paramName()代表传递的参数是数组 √ Function:(有返回值) • 定义语法: > [Public | Private] [Static] Function functionName [(parameters)] [As dataType] • 返回值: > functionName = Return Value • 子程序返回: > End Return Value > End Function √ Sub:(无返回值) • 定义语法: > [Public | Private] [Static] Sub subName [(parameters)] • 子程序返回: > Exit Sub > End > End Sub √ 调用语法: • Call Sub/Function_Name() • tmp_RetVal = Sub/Function_Name() 1.1.14 程序流程控制: √ If语句: • If condition Then statements ElseIf condition Then statements ... Else statements End If √ Select语句: • Select Case selectExpr Case conditionList statements Case conditionList statements ... Case Else statements End Select √ Goto语句 • GoTo label • On expression GoTo label1, [ , label2 ]... > 当expression为1时,执行label1 > 当expression为2时,执行label2 • GoSub label • On expression GoSub label1, [ , label2 ]... 1.1.15 循环语句 √ For语句: • For countVar = first To last [Step increment] statements √ ForAll语句: • ForAll refVar In container statements End ForAll √ While语句: • While condition statements Wend √ Do While语句 • 永远循环: > Do statements Loop • 先检查条件,再循环: > Do While condition Statements Loop > Do Until condition Statements Loop • 先循环,再查条件 > Do Statements Loop While condition > Do Statements Loop Until condition √ 中途退出循环: • Exit LoopType > LoopType:For, While, Do 1.1.16 常用的Option定义: √ Option Declare • 禁止隐含声明 √ Option Compare NoCase [Case, Pitch, NoPitch] • 声明使得:“=”, Like, InStr(), StrCompare()等操作为大小写不敏感/敏感 √ Option Public • 声明在当前模块中,未指定继承属性声明的变量皆为Public类型 √ Option Base • 声明当前模块中,默认的Array的Low-Bound值 √ Use “LS-Lib-Name” √ Uselsx "*lsxodbc" 第2课 LotusScript类的继承关系 2.1 LotusScript之Notes数据对象的派生关系 G2-1 2.1.2 常用的LotusScript对象继承关系: √ 创建一个Notes Session(对话) • Dim tmp_s As NotesSession • Set tmp_s = New NotesSession • 或:Dim tmp_s As New NotesSession √ Notes Session -> Notes DB • Dim tmp_db As NotesDatabase • Set tmp_db = tmp_s.CurrentDatabase • 或:Set tmp_db = tmp_s.GetDatabase(server¥, dbfile¥) √ Notes DB -> Notes View • Dim tmp_v As NotesView • Set tmp_v = tmp_db.GetView(“View Name”) √ Notes View -> Notes Document • Dim tmp_doc As NotesDocument • Set tmp_doc = tmp_v.GetFirstDocument() • 或:Set tmp_doc = tmp_v.GetDocumentByKey(“Key-String map to the 1st sorted column in the View”) • Call tmp_doc.save(True, True) √ Notes Document -> Document Field • Dim tmp_str As String • tmp_str = tmp_doc.GetItemValue(“Field Name”) • Call tmp_doc.ReplaceItemValue(“Field Name”; “Value”) √ Notes DB -> Notes Document • Dim tmp_doc As NotesDocument • Set tmp_doc = tmp_db.Createdocument √ NotesSession->CurrentDatabase • Dim tmp_db As NotesDatabase • tmp_db = tmp_s.CurrentDatabase √ NotesDatabase->File&PathName • tmp_db.FilePath 。