学习LotusScript
如何在Lotus Script中使用公式

公式语言是可以传值给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语句。
3.7Lotus Domino LotusScript简介

LotusScript编程简介
LotusScript是一种现代的,面向对象的语言,它的语 法类似Basic。简单易学。 它和Domino的接口是通过预定义的的Domino对象类 (Domino Object Class)实现的。 Domino前端(front-end)对象类能够实现用户界面中 的所有控制,包括数据库、视图、文档和域等。
从UIWorkspace的对象开始获取UIDocument对象,修改其中 的变量,就可以修改文档的内容
通过后端类(back-end clas )操作那些不在用户界面 中的对象。
Байду номын сангаас
从NotesSession类开始,获取NotesDatabase的对象,然后获 取NotesDocument对象来修改文档。
Lotus Domino程序设计
———LotusScript简介
1
Lotus Domino程序设计
1. 2. 3. 4. 5. 6. 7. 8. 9.
编程概述 公式语言 公式在表单、域和操作中的应用 公式在视图中的应用 公式在代理中的应用 公式的其它用途 LotusScript编程简介 Domino对象模型 使用LotusScript访问数据库 、视图和文档
4
3
LotusScript有下面一些优点
1. 2. 3. 4. 5. 6. 7. 8.
Basic的超集。容易学习,可以进行复杂的逻辑控制,具有 现代语言的所有功能。 跨平台性,用LotusScript写的程序,可以运行在所有支持 的平台上。 面向对象,您可以使用LotusSciript操作DOM。也可以自定 义类。 所有的Lotus产品都支持LotusScript。支持OLE/COM。 可以和Domino @function一起工作。 由集成开发环境支持,可以调试。 可以通过LSX进行扩展,可以用C或者C++编写DLL扩展。 可以通过LS:DO连接外部数据库,例如:DB2,SQL Server。
LOTUS学习技巧3

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程序开发经验总结

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 编程技巧

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第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 script

常用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.1 LotusScript介绍 1.2 LotusScript特点 1.3 使用位置与执行时机
数据元素
2.1 数据类型 2.2 常量和变量 2.3 数组
Domino 对象
3.1 Domino 对象介绍 3.2 Domino 对象的属性 3.3 Domino 对象的方法
语法
Domino 对象
3.1 Domino 对象的介绍 3.2 Domino 对象的属性 3.3 Domino 对象的方法
语法
4.1 常用语句 4.2 错误处理语句
数据类型
类型
数值范围
初始值
Integer(整型)
Long(长整型) Single(单精度型) Double(双精度型) Currency(货币型)
4.1 常用语句 4.2 错误处理语句
对象的介绍
Domino 对象 是一组用来表示一个Domino应用程序的class,每一个class 都有其属性和方法 主要分为两类class Back-end:NotesDatabase、NotesDocument等 Front-end:NotesUIWorkSpace、NotesUIView等
对象的介绍
Domino 对象包含模式 Domino对象包含层级是Domino对象类别分享的关系,也就 是有些类别会再包含其他类别。 示例 Domino Server -> Databases -> Notes -> items 所以若要存取Item Value,就要先存取Database与Notes
myName.The third statement display the value of myName.
%EndRem
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学习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是用来判断是否有权限进行编辑操作。