学习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空格:在运算符,标点和值之间可以有任意多个空格,也可以没有,必须有一个来区分关键字,文本常量中的空格也很重要。
大小写:除了在文本常量中之外,其他都没分别运算符和值:两个值之间至少有一个运算符间隔。
学习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是用来判断是否有权限进行编辑操作。