学习LotusScript
- 格式:doc
- 大小:36.50 KB
- 文档页数:7
公式语言是可以传值给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语句。
LOTUS学习技巧三1.我如何在页面上建立一个热点,让它打开一个文档?答: 在页面上写一段文字,然后选上这段文字,然后点菜单”创建” –热点--操作热 点 然后选LotusScript ,举个例子,比如打开ID 为NT00000C62的文档:Sub Click(Source As Button)Dim uiworkspace As New notesuiworkspaceDim curdatabase As notesuidatabaseDim database As notesdatabaseDim doc As notesdocumentSet curdatabase = uiworkspace.currentdatabaseSet database = curdatabase.databaseSet doc = database.getdocumentbyid("00000C62")Call uiworkspace.EditDocument(True,doc,False )End Sub2.我如何实现归档,比如我如何把当前视图中所有被选中的文档归入文件夹 fold 中?答: 用Script象如下这样实现:Sub AddDocToFold(fold As String)Dim uiworkspace As New notesuiworkspaceDim uiview As notesuiviewDim doc As NotesDocumentDim docList As StringSet uiview = uiworkspace.currentviewFor j = 1 To uiview.Documents.CountSet doc = uiview.Documents.GetNthDocument(j)Call doc.PutInFolder( fold )NextEnd Sub3.我如何实现把某文件夹视图中的被选择的文档从该文件夹中清除,但却不能删除他们?答: 用Script 实现如下:Sub RemoveDocFromFold( fold As String,all As Integer)'功能:' 把文档从某个文件夹中移走,但并不删除此文档'参数:' fold: 文件夹' all : 0表示仅移走当前选择的文档,1表示移走该文件夹中所有文档Dim uiworkspace As New notesuiworkspaceDim uiview As notesuiviewDim doc As NotesDocumentDim view As notesviewSet uiview = uiworkspace.currentviewSet view = uiview.viewIf all = 0 Then '移去所选文档For j = 1 To uiview.Documents.CountSet doc = uiview.Documents.GetNthDocument(j)Call doc.RemoveFromFolder( fold )NextElseIf all=1 Then '移去全部文档Set doc = view.GetFirstDocument'遍列该视图的所有文档,获取所有满足条件的纪录数While Not(doc Is Nothing)Call doc.RemoveFromFolder( fold )Set doc = view.GetNextDocument(doc)WendEnd IfEnd If'Evaluate("@Command([ViewRefreshFields])")End Sub4.我如何把当前视图中的所有的被选择的文档的某个域的值替换掉?答: 用Script 实现如下:Sub SelectedDocFieldReplace( Field As String,repval As String) '功能:' 把所选文档中的每个 Field 域的值 改为 repval'参数:' Field 要更改的域的名称' repval 修改后的域值Dim uiworkspace As New notesuiworkspaceDim uiview As notesuiviewDim doc As NotesDocumentDim order_num As String'order_num = Inputbox$("请输入批次")Set uiview = uiworkspace.currentviewFor j = 1 To uiview.Documents.CountSet doc = uiview.Documents.GetNthDocument(j)On Error Goto lable1Call doc.replaceitemvalue(Field,repval)Call doc.save(True,False)NextExit Sublable1:Msgbox("错误!,所选文档没有指定的域,这个错误发生在没有给selectedDocFieldReplace() 函数传递正确的参数")Exit SubEnd Sub5.我如何创建某个程序运行结果的日志文档?6.答: 首先新建一个日志文档的表单,并把该表单设置成数据库的默认表单,然后 就用Script 创建文档,并填写该文档中某些域的值,最后存盘,例子程序片段如下:'写传真日志Dim faxerdoc as notesdocument‘faxerr_receiver,faxerr_docnum,faxerr_content是表单form_faxerr的三个域名‘Set faxerrdoc = New NotesDocument( db )faxerrdoc.Form = "form_faxerr"Call faxerrdoc.replaceitemvalue("faxerr_receiver",Cstr(peoplecount) )Call faxerrdoc.replaceitemvalue("faxerr_docnum",strsucssnding )Call faxerrdoc.replaceitemvalue("faxerr_content",faxerrmsg )success = puteWithForm( False, False )If success ThenCall faxerrdoc.Save( True, False )ElseMsgbox("无法写入传真日志....")End If'Msgbox(faxerrmsg)Exit Sub7.我要从当前视图中选择一批文档,并让程序从这些文档中提取信息,在嵌入在表单中的OLE对象 Word文档中建立一张表,要求是选择了几篇文档就在这张表中画几行,这张表的每个列的信息都中文档中的域中提取,换句话说,就是要把被选文档以Word文档表格的形式表示出来,能否给我一个这方面的例子程序?8.答: 可以,下面就是这样的一个例子:Sub inputgroupplan(source As notesuidocument,doccollection Asnotesdocumentcollection)'功能: 自动生成出团计划表。
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 是完全面向对象的编程语言。
它通过预定义的类与 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)\' 这个地方视图当作文档来处理,以便取到视图的一些属性。
第10章在Web中使用LotusScript第10章在Web中使用LotusScript (1)10.1 使用LotusScript的Web代理 (1)10.2 激活一个代理的URL (2)10.3 编写WebQueryOpen代理 (3)10.4 编写WebQuerySave代理 (6)10.5 在代理中使用CGI变量 (7)10.5.1 删除文档 (8)10.6 在Web工作流中使用LotusScript (11)本章主要说明在Domino的Web开发中使用LotusScript的方法,关于LotusScript的程序设计知识请参考第三章和IBM 公司提供的帮助文档。
10.1 使用LotusScript的Web代理LotusScript在Web上的唯一使用方法就是编写代理,完成比较复杂的程序逻辑,或者是只有通过操作Domino后端对象才能完成的功能。
在Web上运行一个LotusScript代理有两种方法:●使用@URLOpen调用它的URL,例如,http://server/db/agentname?OpenAgent●使用公式ToolsRunMacro和RunAgent调用代理。
当使用ToolsRunMacro调用代理时,有两种特殊的应用场合,即在文档的WebQueryOpen和WebQuerySave事件中调用代理。
当你在Web上运行一个LotusScript代理时,代理可以访问由浏览器和Domino提供的信息,即CGI 变量,如果使用第二种方式运行代理,还可以访问当前文档中的域的值,这些信息都包含在NotesSession 中的DocumentContext属性中。
DocumentContext属性是一个特别的N o t e s D o c u m e n t对象,它包含了关于当前环境的信息。
这个文档内容类似于N o t e s U I D o c u m e n t对象,你可以使用它在表单保存前从表单中得到值。
常用lotus script2010-04-10 15:36保存并关闭窗口@Command([FileSave]);@Command([FileCloseWindow])取消保存并关闭窗口REM {Notes only};FIELD SaveOptions := 0;@Command([FileCloseWindow])或 window.close()新建讨论主题viewname := @Subset(@ViewTitle; -1);@SetProfileField("tmpProfile"; "viewtitle"; viewname); @PostedCommand([Compose];"MainTopic")新建主文档的答复REM {notes only};@Command([Compose]; "Response")新建答复viewname := @Subset(@ViewTitle; -1);@SetProfileField("tmpProfile"; "viewtitle"; viewname);@PostedCommand([Compose];"Response")新建答复的答复@PostedCommand([Compose];"ResponseToResponse")父文档预览REM {notes only};@Command([ShowHideParentPreview])搜索REM {Web only};@Command([ViewShowSearchBar])转发@Command([MailForward])作为书签转发@Command([Compose]; @MailDbName; "Bookmark")移至废纸篓@Command([MoveToTrash])清空废纸篓@Command([EmptyTrash])新建文件夹@Command([CreateFolder])或var pathname = (window.location.pathname);window.open(pathname.substring(0,(stIndexOf('.nsf')+5))+'F olderCreate?OpenForm','Folder','scrollbars,screenX=150,screenY=200,wi dth=500,height=280');删除文件夹var pathname = (window.location.pathname);window.open(pathname.substring(0,(stIndexOf('.nsf')+5))+'F olderRemove?OpenForm','Folder','scrollbars,screenX=150,screenY=200,wi dth=500,height=250');移入文件夹@If(!@IsAvailable(form); @Return(@Prompt([Ok]; "警告"; "您必须先选择一个文档。
LotusScript 及公式的学习1.LotusScript及公式是Lotus Notes提供的一个完整的编程接口,是一种与BASIC兼容的程序设计语言。
可以根据需要在NOTES的任意对象中附加LotusScript语句和公式。
LotusScript是一个完全面向对象的程序设计语言,具有丰富的类,方法和属性,包含有集成的对象浏览器和程序开发环境。
NOTES公式语言包含一整套的语法规则,提供丰富的命令和函数,可以对常量和变量进行计算,进行简单的逻辑控制。
2.公式基础:(1)输入公式的方式(两种)公式窗口设计窗口(2)公式语言的语法结构词法元素:公式有一个或多个语句构成,一个语句可以有变量,常量,运算符,函数,关键字等构成如:CTX:=@CreatedCTX是变量,:=是运算符,@Created是一个无参数的函数语句含义:把文档的创建时间赋给变量CTX如:@Trim(name)@Trim是函数,参数name是一个域名语句含义:把name值的多余空格去掉如:@Promp([OK];"问候!";"您好! ")@Promp是一个带三个参数的函数,参数[OK]是一个关键字,后面两个是文本常量语句含义:显示一个对话框如:LastName+", "+FirstNameLastName, FirstName是一个变量,+是一个运算符,", "是一个常量语句含义:将LastName,一个逗号和空格号, FirstName合并在一起通用语法规则(必须遵循)语句分隔符:使用分号分隔多哥语句如:FIELD txtmap:=txtmc;FIELD txtmc:=@DeleteField空格:在运算符,标点和值之间可以有任意多个空格,也可以没有,必须有一个来区分关键字,文本常量中的空格也很重要。
大小写:除了在文本常量中之外,其他都没分别运算符和值:两个值之间至少有一个运算符间隔。
Office 文档集数据库是以嵌入对象的方法嵌入word文档的,该文档在body域中,发送传真时,页眉、页脚发不出来,其他格式能正常发出来.而且可以做到不发传真封面,另外,这种方式也可以避免附件方式那样发出来还会出现一个附件图标,故现在的任务是如何往该文档中写内容了。
往该文档中写内容,有两种方式:一种是用VB写一个DLL,有关word文档的操作,包括插入一个表格、插入一个字符串、插页眉等等。
这些函数都放在Dll中,然后被lotus script调用。
另一种方式是用lotusscript 直接操纵该嵌入文档,但操纵嵌入文档的lotusscript语法与VB语法差异很大。
所能获得的例子代码和帮助都是VB语法,只能从lotusscript提取的ole对象库中去察看个函数的语法,至于个函数中的参数的意义只能从msdn中获得,而msdn中对参数的讲解也不是很详细,所有VB常量在lotusscript中没有定义,只能半猜半试的直接使用数值。
下面的例子是lotus script 操纵word文档:'获取嵌入文档的句丙Set thisdoc = source.getobject("oleobject"'设置该文档的页面设置的左边距为20个单位(象素)With thisdoc.pagesetup.leftmargin = 20End With'插入页眉(由于真正的页眉在传真时无法显示,这里的页眉是模拟的)'插入一幅图Set thispicture = thisdoc.shapes.Addpicture("d:\学习\cassiatb.jpg"'设置文字的插入点thisrangeSet thisrange = thisdoc.range(1,1)pageheadstring = "CAISSA Touristic GmbH" & Chr(10) & "HAMBURG·BEIJING·SHANGHAI·BARCELONA" & Chr(10) &Chr(10) & Chr(10)'插入一段文字:pageheadstringthisrange.insertbefore (pageheadstring)'获取一段文字:从字符1到24Set thisrange = thisdoc.range(1,24)'设置该段文字的属性:With thisrange.bold = True '加粗.ParagraphFormat.Alignment = 1'wdAlignParagraphCenter 行居中.font.size = 20 '字体大小为20End WithSet thisrange = thisdoc.range(25,59)With thisrange.bold = True.ParagraphFormat.Alignment = 1'wdAlignParagraphCenter.font.size = 16End With'thispicture.wrapformat.side = wdwrapright'设置图像属性With thispicture.wrapformat '环绕方式.type = wdwrappicture '类型为picture.side = wdwrapright '文字右环绕End With。
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 assi gn the value "Robert"to myName.The third statement display the value of my%End Rem数据类型转换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 to7) as String '声明⼀个数组下标为1~7ReDim MyDay(1 to3) '重新设置数组的边界和维数,这⾥ReDim⽤于定义动态数组UBound(MyDay,1) '返回数组的上界,1表⽰若是多维数组,返回第⼀维的上界LBound(MyDay) '返回数组的下界LBound(MyDay,2) '返回数组第2维的下界MyDay(1) = "Sunday"'给数组元素赋值四、语句1、IF ... End ifif balance > 100 theninterest = 0.35elseinterest = 0endif2、Select caseSelectcase thisMonthcase1Response = "January"case2 to10 '也可以写成case10,20,30或caseis> 10 response = "Other"caseelseMessageBox(thisMonth &"is invalid value") endSelect3、Do...loops和while... wendDowhile/until条件'语句组loopDoloopwhile/until条件while条件'语句组wend4、For...NextFor i = 1 to5MyDays(i) = InputBox("Enter your work days:")Next i5、ForAllForAll m in db.managers '循环显⽰数组db.managers中的元素MessageBox(m)End ForAll[JavaScript]将Excel⽂件中的数据导⼊到表单2009-03-24 17:50:31标签:导⼊Excel休闲职场JavaScript版权声明:原创作品,如需转载,请与作者联系。
综合使用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向代理通信,并让代理取得浏览器端的当前文档呢?先看一个例子:在某申请系统中,用户创建新申请可以这样做:打开新的申请单,填写各项目后,点击操作按钮―提交申请‖,就完成了操作。
对设计者而言触发―提交‖操作必定运行一个代理或一段公式(此处我们先假定提交操作运行的是代理,后面将介绍提交操作运行公式的情况)。
首页-->LOTUS文章-->LOTUS Scrpit编码指南编写公式的方法一个公式中含有一条或多条按顺序执行的语句。
根据与公式相关联的对象和其他标准的不同,公式可以在所选的文档上运行一次或多次(每个文档运行一次)。
除了从公式返回以外,公式中没有循环和控制跳转的语句。
公式中对条件执行路径也有限制。
代理公式将在选定的文档上多次地、有条件地执行。
您可以:编写可得出计算结果的公式以下公式都应该有最后结果:复制公式必须得出结果为真 (1) 或假 (0),并且可以应用到数据库的每个文档上。
表单公式必须得出表单名称。
选择公式必须得出结果为真 (1) 或假 (0),并且可以应用到视图中的每个文档上。
列公式必须得出一个可以转换成文本字符串的值。
显示操作公式必须得出真 (1) 或假 (0)。
弹出式公式必须得出一个文本串。
窗口标题公式必须得出一个文本或数字值,除非公式由一个任意类型的单独的域组成。
区段存取公式必须得出一个姓名或姓名列表。
插入子表单公式必须得出一个子表单的名称的文本值。
区段标题公式必须得出一个文本或数字值,除非公式由一个任意类型的单独的域组成。
段落隐藏公式必须得出真 (1) 或者假 (0)。
缺省值公式必须得出一个可以存放在当前域中的值。
输入转换公式必须得出一个可以存放在当前域中的值。
缺省校验公式必须得出是成功 (1) 还是失败 (0)。
计算域公式必须得出一个可以存放在当前域中的值。
关键字公式必须得出一个可以存放在当前域中的值或值的列表。
这些公式可以简单到只有一个域、常量或者函数,也可以包含很多语句、使用临时变量、更改域的内容或者产生一些附加效果。
但不论如何,其最后一个语句必须是一个合适的值。
如果关键字 SELECT 没有显式指定的话,它会加在一个逻辑语句之前,这个逻辑语句用来终止复制或选择公式。
这些公式运行于数据库(复制公式)或视图(选择公式)的每一个文档上,以确定复制和查看过程中包括或不包括哪些文档。
LotusS cript是完全面向对象的编程语言。
它通过预定义的类与 Domino接口。
Domino监控用户代码的编译和加载,并且自动包含 Domino的类定义。
访问现有的对象最好使用 LotusS cript,例如:根据其他文档的值来更改一个文档中的值。
LotusS cript提供了一些公式没有的功能,例如:操作数据库存取控制列表 (ACL) 的能力。
写script关键是取对象,查看对象的属性,所以你要学会看note s提供的S cript帮助。
下面是我收集的一些sc ript例子。
一般是比较技巧的程序,要学习一般s cript编写,请下载lot usScr ipt学习库!LotusS cript是完全面向对象的编程语言。
它通过预定义的类与 Domino接口。
Domino监控用户代码的编译和加载,并且自动包含 Domino的类定义。
访问现有的对象最好使用 LotusS cript,例如:根据其他文档的值来更改一个文档中的值。
LotusS cript提供了一些公式没有的功能,例如:操作数据库存取控制列表 (ACL) 的能力。
写script关键是取对象,查看对象的属性,所以你要学会看note s提供的S cript帮助。
下面是我收集的一些sc ript例子。
一般是比较技巧的程序,要学习一般s cript编写,请下载lot usScr ipt学习库!怎样判断视图中没有文档?set doc = vw.getfir stdoc ument()if doc is nothin g thenend if如何将查询结果放到一个文件夹里?下面是将搜索结果放到名叫newfolder的文件夹中,并跳转到该文件夹上Sub Click(Source As Button)Dim docs As notesd ocume ntcol lecti onDim doc As notesd ocume nt...........q=doc.query(0)Set docs = db.ftsear ch(q, 0)Call docs.PutAll InFol der( "newfol der" )Call w.OpenDa tabas e( "","","newfol der")End Sub如何删掉数据库中所有私有视图Dim sessio n As New notess essio nDim db As notesd ataba seDim doc As notesd ocume ntSet db=sessio n.curren tdata baseForall i In db.viewsSet doc=db.getDoc ument ByUNI D(v.univer salID)' 这个地方视图当作文档来处理,以便取到视图的一些属性。
学习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.注释要添加注释,只要使用单引号“’”作为注释文字的开头。
该符号告诉程序忽略这一行单引号后面的内容,不对其进行编译。
可以使用Rem语句和%Rem、%End Rem命令来写注释,Rem语句之后的所有字符都被看做注释。
对于%Rem命令,夹在%Rem和%End Rem之间的所有代码都被当作注释。
2.断行当一条Script语句很长时,会给阅读者带来不便。
在这种情况下,可以使用续行符“-”(一个空格紧跟一条下划线)将长语句分成多行。
可以在一行中写多个语句,语句之间用“:”隔开,也可以存在许多空白的行。
标识符标识符是指那些LotusScript中的类、常量、变量、子程序的名称。
1.命名规则最长不超过40个字符,字符可以是字母、数字和下划线。
第一个字符必须是字母。
有6种后缀符号,加在标识符后面区别数据类型。
2.作用范围?类或类型范围内的标识符只在类或类的定义中才有效。
?过程范围的标识符在子程序、函数中等有效。
?模块级的标识符只要模块被加载,在所有范围内都有效。
3.数据类型%:整数&:长整型!:单精度#:双精度@:货币$:字符串还有一种特殊的数据类型即变体(variant),该数据类型是随着分配给它的数值的数据类型而改变的。
子程序1.子程序语句在LotusScript的设计窗格中输入Sub以及子程序名,可以创建一个新的子程序。
Sub End Sub 的语法是:[ Private | Public | Friend ] [ Static ] Sub name [ ( arglist ) ][ statements ][ Exit Sub ][ statements ]End Sub2.函数语句函数的作用是计算并返回一个值。
Function语句的语法如下:[ Public | Private | Friend ] [ Static ] Function name [ ( ParamList ) ][ As returntype ][ statements ][ Exit Function ]End Function3.事件处理程序? Sub Initialize语法:Sub Initizlize[ Statements ]End Sub? Sub Terminate语法:Sub Terminate[ Statements ]End Sub4.Property Get/Set语句LotusDomino中添加编辑操作(mzj-oa)修改要求:OA的学习园地模块中的管理员能对各主题及回复内容进行编辑操作。
思路:添加“编辑”按钮。
根据文档的UID唯一性,点击某一篇“编辑”按钮就连接到该篇文档。
编辑好保存后,将显示在列表上。
注意点:附件的上传或修改问题具体修改过程:在添加“编辑”按钮时,由于该表单将业务主表单与显示列表合在一起,通过是否为新文档来判断显示业务主表单还是显示列表。
在列表中无法加“编辑”按钮,只能找列表的视图,在视图中发现了一列,用来产生连接,具体代码如下:s1:=" <TABLE cellSpacing=1 cellPadding=4 width=100% align=center bgColor=#b0b094 border=0> <TBODY><TR><TD colSpan=2><TABLE cellSpacing=0 cellPadding=0width=100%border=0> <TBODY><TR><TD color=#ffffff><IMG src=\"/bbs/";s2:="\" border=0 >文章主题:";s3:="</TD><TD width=800 height=28><IMG style=\"CURSOR: hand\" align=right width=62height=23 src=\"/bbs/bj.gif\"onclick=\"WebEditDocs('"+@Text(@DocumentUniqueID)+"');\" ></TD> <TD><IMG style=\"CURSOR: hand\" align=right width=62height=23 src=\"/bbs/sc.gif\"onclick=\"WebDeleteCheckRight('"+@Text(@DocumentUniqueID+ "');\"></TD></TR></TBODY></TABLE></TD></TR><TR vAlign=middle bgColor=#dedec0><TD vAlign=middle align=\"center\" width=200 bgColor=#dedec0 rowSpan=2>";s4:=" </TD><TD vAlign=top width=85% bgColor=#e9e9df warp=\"virtuslly\">";s5:=" <BR><HR width=\"100%\" SIZE=1>";s6:=" </TD> </TR> </TBODY> </TABLE> ";v:=@Explode (@AttachmentNames;",");@For(i := 0;i <= @Elements(v);i := i + 1;s8:="<img src=\"" + @Text(@DocumentUniqueID) + "/$file/"+ v[i] + "\">";s9:="<font style=\"font-size:11pt\">"+" <img align=middle src=\"/icons/vwicn005.gif\"> <a href=\"" + @Text(@DocumentUniqueID) + "/$file/" + v[i]+ "\" target=\"_blank\">"+v[i] +"</a>";" "+"</font>";@If (@Right (v[i];3)="jpg"; s10:=s8;@Right (v[i];3)="bmp"; s10:=s8;@Right (v[i];3)="tif";s10:=s8;@Right (v[i];3)="gif";s10:=s8;s10:=s9);s7:=s7+"<br>"+s10);s1+stat+s2+subject+s3+AuthorChName+s4+@Text(@Created;"D0T0")+s5+BodyText+@If(!@Attachme nts; ""; "<br><br>附件:"+s7)+s6因为这里的编辑按钮是图片,在onclick事件时触发WebEditDocs函数,该函数在主题表单MainTopic 的JS Header中添加如下代码:function WebEditDocs(str_unid){var pathname = (window.location.pathname);if (document.forms[0].IfManager.value=="1"){if (document.forms[0].MainID.value==str_unid){window.open(pathname.substring(0,(stIndexOf('.nsf')+5))+'MainTopic/all/'+str_unid+"?O penDocument&1");return false;}else{window.open(pathname.substring(0,(stIndexOf('.nsf')+5))+'all/'+str_unid+"?OpenDocum ent&1");return false;}}else{window.alert("您无权编辑此文档!");return false;}}1).代码中的IfManager是用来判断是否有权限进行编辑操作。