免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 12048 | 回复: 17
打印 上一主题 下一主题

[Lotus] LOTUS 学习技巧 连载 [复制链接]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-03 17:23:07综合交流区版块每日发帖之星
日期:2015-08-19 06:20:00综合交流区版块每日发帖之星
日期:2015-09-15 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-03 13:56 |只看该作者 |倒序浏览
版主大人,
这个版太清凉啦~ ~~
我发些文章ZT来旺旺场,你给加精吧



LOTUS学习技巧 三


1.        我如何在页面上建立一个热点,让它打开一个文档?
答: 在页面上写一段文字,然后选上这段文字,然后点菜单”创建” –热点--操作热 点
然后选LotusScript ,举个例子,比如打开ID 为NT00000C62的文档:
Sub Click(Source As Button)
Dim uiworkspace As New notesuiworkspace
Dim curdatabase As notesuidatabase
Dim database As notesdatabase
Dim doc As notesdocument
Set curdatabase = uiworkspace.currentdatabase
Set database = curdatabase.database
Set doc = database.getdocumentbyid("00000C62"
Call uiworkspace.EditDocument(True,doc,False )
End Sub
2.        我如何实现归档,比如我如何把当前视图中所有被选中的文档归入文件夹 fold 中?
答: 用Script象如下这样实现:
Sub AddDocToFold(fold As String)
Dim uiworkspace As New notesuiworkspace
Dim uiview As notesuiview
Dim doc As NotesDocument
Dim docList As String
Set uiview = uiworkspace.currentview
For j = 1 To uiview.Documents.Count
Set doc = uiview.Documents.GetNthDocument(j)
Call doc.PutInFolder( fold )
Next
End Sub
3.        我如何实现把某文件夹视图中的被选择的文档从该文件夹中清除,但却不能删除他们?
答: 用Script 实现如下:
Sub RemoveDocFromFold( fold As String,all As Integer)
'功能:
' 把文档从某个文件夹中移走,但并不删除此文档
'参数:
' fold: 文件夹
' all : 0表示仅移走当前选择的文档,1表示移走该文件夹中所有文档
Dim uiworkspace As New notesuiworkspace
Dim uiview As notesuiview
Dim doc As NotesDocument
Dim view As notesview
Set uiview = uiworkspace.currentview
Set view = uiview.view
If all = 0 Then '移去所选文档
For j = 1 To uiview.Documents.Count
Set doc = uiview.Documents.GetNthDocument(j)
Call doc.RemoveFromFolder( fold )
Next
Else
If all=1 Then '移去全部文档
Set doc = view.GetFirstDocument
'遍列该视图的所有文档,获取所有满足条件的纪录数
While Not(doc Is Nothing)
Call doc.RemoveFromFolder( fold )
Set doc = view.GetNextDocument(doc)
Wend
End If
End If
'Evaluate("@Command([ViewRefreshFields])"
End Sub
4.        我如何把当前视图中的所有的被选择的文档的某个域的值替换掉?
答: 用Script 实现如下:
Sub SelectedDocFieldReplace( Field As String,repval As String)
'功能:
' 把所选文档中的每个 Field 域的值 改为 repval
'参数:
' Field 要更改的域的名称
' repval 修改后的域值
Dim uiworkspace As New notesuiworkspace
Dim uiview As notesuiview
Dim doc As NotesDocument
Dim order_num As String
'order_num = Inputbox$("请输入批次"
Set uiview = uiworkspace.currentview
For j = 1 To uiview.Documents.Count
Set doc = uiview.Documents.GetNthDocument(j)
On Error Goto lable1
Call doc.replaceitemvalue(Field,repval)
Call doc.save(True,False)
Next
Exit Sub
lable1:
Msgbox("错误!,所选文档没有指定的域,这个错误发生在没有给 selectedDocFieldReplace() 函数传递正确的参数"
Exit Sub
End Sub
5.        我如何创建某个程序运行结果的日志文档?
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 = faxerrdoc.ComputeWithForm( False, False )
If success Then
Call faxerrdoc.Save( True, False )
Else
Msgbox("无法写入传真日志...."
End If
'Msgbox(faxerrmsg)
Exit Sub
7.        我要从当前视图中选择一批文档,并让程序从这些文档中提取信息,在嵌入在表单中的OLE对象 Word文档中建立一张表,要求是选择了几篇文档就在这张表中画几行,这张表的每个列的信息都中文档中的域中提取,换句话说,就是要把被选文档以Word文档表格的形式表示出来,能否给我一个这方面的例子程序?
8.         
答: 可以,下面就是这样的一个例子:
Sub inputgroupplan(source As notesuidocument,doccollection As notesdocumentcollection)
'功能: 自动生成出团计划表。
' 详细描述:
' 从 文档集合 doccollection 中提取各个域值,并把提取的信息以一定
' 的表格形式送入当前文档的 body 域中的 OLE 对象--Word 文档中.
'参数:
' source: 当前文档
' doccollection :文档集(比如文档的选择集)
'编写:
' 商云方
'完成日期:
'
Dim session As New NotesSession '当前会话
Dim counter As Integer '计数器
Dim doccustom As NotesDocument 'notes 文档对象
Dim thisdoc As Variant 'Word 文档对象
Dim thisrange As Variant 'Word 开发中的 range 对象
Dim thispicture As Variant '嵌入Word 文档的图象对象
Dim thistable As Variant '嵌入Word 文档的表格对象
Dim pagehead As String '嵌入Word 标题
'获取嵌入文档的句丙
If source.EditMode Then
Set thisdoc = source.getobject("oleobject"
'插入一幅图
Set thispicture = thisdoc.shapes.Addpicture("c:\学习\cassiatb.jpg"
'设置图像属性
With thispicture.wrapformat '环绕方式
.type = wdwrappicture '类型为picture
.side = wdwrapright '文字右环绕
End With
'设置该文档的页面设置的左边距为20个单位(象素)
With thisdoc.pagesetup
.leftmargin = 20
.rightmargin = 20
End With
counter=0
pagehead = Inputbox$("请输入标题"
pagehead = Chr(10) & pagehead & Chr(10) & Chr(10) & Chr(10)
'Call source.FieldSetText ( "Namelist_Group_Num", group_num )
'groupstring = "Namelist" & " " & group_num & Chr(10)
Set thisrange = thisdoc.range(1,1)
thisrange.InsertBefore (pagehead)
Set thisrange = thisdoc.range(2,Len(pagehead))
With thisrange
.bold = True '加粗
.ParagraphFormat.Alignment = 1'wdAlignParagraphCenter 行居中
.font.size = 20 '字体大小为20
End With
Set doccustom = doccollection.GetFirstDocument
'遍列文档集的所有文档,获取所有满足条件的纪录数
While Not(doccustom Is Nothing)
counter=counter+1
Set doccustom = doccollection.GetNextDocument(doccustom)
Wend
'动态分配纪录数组
'Redim record(counter,6) As String
'插入一张表
Set thisrange = thisdoc.range(Len(pagehead)+1,Len(pagehead)+1)
Set thistable = thisdoc.tables.Add(thisrange, counter+1,
'thistable.autoformat(False)
'写表头
thistable.rows(1).cells(1).range.insertbefore("前往国家"
thistable.rows(1).cells(2).range.insertbefore("国家数"
thistable.rows(1).cells(3).range.insertbefore("天数")
thistable.rows(1).cells(4).range.insertbefore("出境城市")
thistable.rows(1).cells(5).range.insertbefore("入境城市")
thistable.rows(1).cells(6).range.insertbefore("出发日期")
thistable.rows(1).cells(7).range.insertbefore("同行价")
thistable.rows(1).cells(.range.insertbefore("市场指导价")
'恢复计数器
counter = 0
'写表内容
Set doccustom = doccollection.GetFirstDocument
While Not(doccustom Is Nothing)
counter = counter+1
thistable.rows(counter+1).cells(1).range.insertbefore(doccustom.plan_country(0))
thistable.rows(counter+1).cells(2).range.insertbefore(doccustom.plan_country_num(0))
thistable.rows(counter+1).cells(3).range.insertbefore(doccustom.plan_day(0))
thistable.rows(counter+1).cells(4).range.insertbefore(doccustom.plan_out_city(0))
thistable.rows(counter+1).cells(5).range.insertbefore(doccustom.plan_in_city(0))
thistable.rows(counter+1).cells(6).range.insertbefore(doccustom.plan_date(0))
thistable.rows(counter+1).cells(7).range.insertbefore(doccustom.plan_whole_price(0))
thistable.rows(counter+1).cells(.range.insertbefore(doccustom.plan_mart_price(0))
Set doccustom = doccollection.GetNextDocument(doccustom)
Wend
End If
End Sub
9.        如何实现表单上的内容根据用户的输入动态变化?

答: 一般可以用notes的隐藏属性功能来控制,使用当公式为真是隐藏,然后靠公式来控制具体怎样隐藏.比如可以在对话筐上放一个对话筐列表,里面放十个选项,当用户选择了其中的某几个选项时,响应的在下面的表单部分显示几行.这可以画一个表格,这个表格的属性中设置边框的线条粗细为零.然后对应十个选项分为十行,每行填入和选项响应的内容,然后选定某一行的所有文本,编辑其隐藏属性,选当公式为真时隐藏,这个公式您就可以写成当选项的被选中条目中不包含本行文字时隐藏就可以了,这样这一行就会在响应的选项被选中时才会显示.
10.        notes没有应用程序级的公共变量,那么我如果要弹出一个对话筐,并从这个对话筐中返回很多用户输入,我该怎么办?
怎样判断视图中没有文档?
dim uiw as new notesuiworkspace
dim doc as notesdocument
set doc = uiw.getfirstdocument()
if doc is nothing then
.....
end if
如何将查询结果放到一个文件夹里?
下面是将搜索结果放到名叫newfolder的文件夹中,并跳转到该文件夹上
Sub Click(Source As Button)
dim uiw as new notesuiworkspace
dim uidoc as notesuiworkspace
dim doc as notesdocument
set uidoc = uiw.currentdocument
set doc = uidoc.document
dim ss as new notessession
dim db as notesdatabase
set db = ss.currentdatabase
const newfolder = "文件夹名称"
Dim docs As notesdocumentcollection

q=doc.query(0)
Set docs = db.ftsearch(q, 0)
Call docs.PutAllInFolder( newfolder )
Call uiw.OpenDatabase( ,,newfolder)
End Sub
如何在Notes中调用ODBC数据源中的进程?
Dim session As New NotesSession
Dim con As New ODBCConnection
Dim qry As New ODBCQuery
Dim result As New ODBCResultSet
Set qry.Connection = con
Set result.Query = qry
con.ConnectTo(资料库)
qry.SQL = SELECT * FROM 资料库
result.Execute
If result.IsResultSetAvailable Then
Do
result.NextRow
id=result.GetValue(ID,id)
Loop Until result.IsEndOfData
result.Close(DB_CLOSE)
Else
Messagebox "Cannot get result set for AssetData"
Exit Sub
End If
con.Disconnect
End Sub
从后台刷新当前文档?
将当前文档先关闭后再打开
set doc=uidoc.document
......
call uidoc.save()
call uidoc.close()
set uidoc=ws.editdocument(doc)
获得当前视图中选择了的文档?
可以用 Notesdatabase 的 Unprocesseddocuments 属性。

Dim session As New notessession
Dim db As notesdatabase
Dim collection As notesdocumentcollection

Set db = session.currentdatabase
Set collection = db.UnprocessedDocuments

Unprocesseddocuments 其实很有用的
notes和Excel交换数据
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim excelApplication As Variant
Dim excelWorkbook As Variant
Dim excelSheet As Variant
Dim i As Integer

Set excelApplication = CreateObject(Excel.Application)
excelApplication.Visible = True
Set excelWorkbook = excelApplication.Workbooks.Add
Set excelSheet = excelWorkbook.Worksheets(Sheet1)
excelSheet.Cells(1,1).Value = 姓名
excelSheet.Cells(1,2).Value = 年龄

i = 1
Set db = session.CurrentDatabase
Set view = db.GetView(abc)
Set doc = view.GetFirstDocument
While Not(doc Is Nothing)
i = i + 1
excelSheet.Cells(i,1).Value = doc.ClassCategories(0)
excelSheet.Cells(i,2).Value = doc.Subject(0)
Set doc = view.GetNextDocument(doc)
Wend
excelSheet.Columns(A:B).Select
excelSheet.Columns(A:B).EntireColumn.AutoFit

excelWorkbook.SaveAs(Script 内容)
excelApplication.Quit
Set excelApplication = Nothing
在视图中怎样历遍所有的文档?
Dim db As New NotesDatabase( Ankara, current\projects.nsf )
Dim view As NotesView
Dim doc As NotesDocument
Set view = db.GetView( Open\By Due Date )
Set doc = view.GetFirstDocument
While Not ( doc Is Nothing )
....................
Set doc = view.GetNextDocument( doc )
Wend
在scipt中如何调用公式
例如我们想要取服务器名的普通名,在script中用@name() ,假设server变量以取到服务器名称
在script中用Evaluate可以运行公式,如:servername=Evaluate(@name([CN];server))
怎样用script代理取到CGI变量
Dim session As New NotesSession
Dim doc As NotesDocument
Set doc = session.DocumentContext
Messagebox User = + doc.Remote_User(0)

论坛徽章:
0
2 [报告]
发表于 2005-08-05 13:20 |只看该作者

LOTUS 学习技巧 连载

好贴,一定要up!

论坛徽章:
0
3 [报告]
发表于 2005-08-06 09:33 |只看该作者

LOTUS 学习技巧 连载

你不说也会给加精华鼓励的。

目前国内LOTUS的论坛不少,以前去走走看看,发觉都是人气不足,缺乏的就是大家的积极参与。。。

辛苦了~~~

论坛徽章:
0
4 [报告]
发表于 2005-08-06 09:54 |只看该作者

LOTUS 学习技巧 连载

LOTUS学习技巧 一

1、 notes同关系型数据库比较
关系型数据库          Lotus Notes
基于事务处理模型        基于文档型
使用结构化数据        使用半结构数据元素(丰富文本,图片,等)
提供实时访问数据        使用复制来增加或减少文档(按修改)
使用特别的queiries定位数据        使用视图定位数据
集中在一个企业内部        在企业与企业间
使用SQL来访问        使用全文检索来访问

2、什么应用不适合notes
    1.实时的数据处理
2.大于4G的数据库(R5增加到64G)
3.基于query和基于报表
4.复杂计算

3、同义名有什么用?
在表单,视图,关键字中可以用同义名,主要用途是当你想在程序中用英文,而在取名或显示给用户用中文时,你可以用同义气名,用"|"来分隔,注意:可以使用多个同义名,notes会存取最右边的一个。||

4、 如何做一个动态的windows title?
在表单中的windows title的事件中写入一个公式,如想按用户的名字变,写上@username就ok了!要想按域变,写上域名就ok.
  
5、怎样激活域帮助
在域属性的选项属性中的帮助描述写入帮助信息,就可以。当光标在该域时,状态栏会自动出现帮助描述,注意如果没有看到,在操作栏上请选 查看---域帮助

6、怎样做到关键字能自动增、减?
在关键字属性中,选用公式,然后输入公式,公式用@dbcolumn函数返回视图中的值,这时就能做到关键字能自动增、减,不过有没有用的关键字。

7、各种域类型区别介绍?
域类型        何时变化
计算型        当文档创建,存盘,刷新时计算,并保存在文档中
显示时计算        当文档打开编辑,读或刷新时计算,不保存在文档中
创建时计算        当文档被创建时,仅此计算一次,并保存在文档中。

8、主文档、答复文档、答复的答复文档介绍

  
类别        描述
文档        用来创建主文档,不依附其他的文档
答复        用来答复主文档,依靠主文档,在层次视图里有同主文档有缩进关系
答复的答复
        可以用来答复主文档,也可以答复答复的答复文档,同它的父文档有缩进关系。
   注意:答复文档无论选定的是主文档,还是答复文档,还是答复的答复文档,都是针对主文档答复的.
  
9、 如果让用户必须填一些域,否则不准保存?
  @假设该域为name;在该Name域的input  validation的事件中写入下列公式if(name="";@failure("please input your name";@success)  

10、怎样将一个数据库做成模板?
有多种方法,这里介绍一种,在工作台选中一个要做模板的数据库,然后选择文件---数据库---新建拷贝,在弹出的对话框中将.nsf改为.ntf就ok了。

11、怎样做到当光标从一个域移到另一个域,表单自动刷新?
在该域所在的表单中选择表单属性中的缺省选项中"自动刷新域。

12、怎样让用户保存文档时,域中的数值自动转化你想要的标准格式?
假设该域为name;想把它转化为大写,在该Name域的input translation的事件中写入下列公式:@UpperCase(State),就可以具体的字符串的操作公式,请看本页的字符串操作。

13、怎样在表单中控制某一个域让谁编辑?
你可以把该域放到存取控制区段里,指定该区段的编辑者就只有该编辑者才能修改改域了。

14、怎样控制区域布局中域,当使用tab时,光标的移动顺序?
假设在区域布局中有a,b,c三个域,我想要它们光标移动的顺序为a,c,b.可以这样做,选中a域,选设计----置前,选中c域,选设计----置前,选中b域,选设计----置前.

15、在视图中怎样做出主文档,答复文档,答复的答复层层缩进的效果?
在视图属性中选"缩进一个层次显示答复文档"只代表文档有答复折叠的层次,但不能在视图中显示出来,为了做到层层缩进,我们必须另外开发,在视图中的前面做一列,选定列属性"仅显示答复文档",然后在该列的公式中写上如果是答复文档的话,该列显示什么,如果是答复的答复文档显示什么,就可以了然后调整各列的宽度就可以看到有缩进的效果。        ""

16、ACL中的安全介绍
访问级别        功能
管理者        能修改ACL和复制设置,在本地加密一个数据库,删除一个数据库,能执行比它低级别的任何任务。
设计者        能修改所有的设计元素,创建全文索引,能执行比它低级别的任何任务。
编辑者        能创建文档和编辑文档
作者        能创建和编辑在作者域中有她名字的文档
读者        能读文档,但不能创建和编辑文档
存放者        能创建新文档,但不能读到任何文档,即使是他自己创建的
不能存取者        不能访问数据库

17、 公式学习:

  变量

变量有两种类型:域,临时变量,你可以在公式中使用域名作为变量如:FirstName

临时变量只能存在于公式中。它的作用范围就是它所在的公式,除了在公式中赋予给它的属性以外没有其他属性。创建一个临时变量的语法是:variableName := value

  
常量
常量类型        描述
文本型        用""标记的字符集,如:"joe.",注意:为了在文本串中用引号,用转义符"\",如:\""
数字型        数字0-9,能用(+和-),科学记数法和常量e

时间型        任何时间型的常量用([]),如:[98-2-31]

操作符

    操作符类型
      符号
             例子

      赋值
:=
Areacode:=@left(phone;3)

      计算
乘号 *                除号 /                加号 +                减号
UnitPrice*3                                      TotalPrice/qty                                   TotalPrice+Tax                                   TotalPrice-Discount


      比较
等于  =               不等于 != =! <>; >;<    小于<                 小于等于 <=           大于 >;                大于等于 >;=
SELECT Year=1996                                  SELECT Month!="January"                        SELECT Age<70                                      SELECT Year<=1990                                SELECT Age>;30                                   SELECT Age>;=21


      串联
列表 :                 文本  +
"Tricycle":"Mini-bike":"5-speed"         CompanyName+",inc."


      逻辑
否  !                  于  &                 或  |
Status="Approved"&TargetMarket!="Children"



  
  公式关键字

  
关键字语法
描述
例子

FIELD fieldname:=value

赋一个值给当前notes文档中的域,如果域不存在则创建一个,存在则覆盖该值。
FIELD CompanyName:=Company+"。inc"


REM ["remarks"]
注释
REM "12/15/95"

SELECT logicalValue

在视图,代理或复制公式中用来定义一个文档集
SELECT form="idea"


  
字符串处理函数介绍?

  
函数
描述

@propercase(string)

将字符串中的单词转换成字首大写的形式:每个单词的头一个字母大写,后面的其他字母小写。以下的样例将返回 Every Child Loves Toys. @ProperCase("every CHILD LOves toys"

@trim(strin)

从文本字符串中(或文本列表的每一个元素中)删除位于开头和结尾的空格,同时还删除多余的空格。以下的样例将返回 ROBERT SMITH。@Trim(@UpperCase("Robert Smith")

@length(string)

返回文本字符串中字符的个数.该样例返回 45。@Length("The boy crossed the wide, but gentle, stream."

@newline

在文本字符串中插入一个新行(回车)。下面公式返回                 Hi                                                        There                                     "Hi"+@NewLine+"There"

@matches(string;pattern)

用一个样本字符串去匹配一个字符串。因为样本字符串可以包含一定数量的通配符和逻辑符号,所以可以用较复杂的模式去匹配字符串。     该样例返回 0。                                       @Matches("A big test";"a?test"

@left

从左到右搜索字符串,并返回字符串中最左边的几个字符。           该样例返回"Len"。                                @Left("Lennard Wallace";3)


  
逻辑操作

  
       函数
                           操作

      @if
  @if(condition1;action1;condition2;action2;else-action)


  
如果满足条件1,则做action1,如果满足条件2,则做action2,否则做else-action.

注意: 1.该函数必须有奇数个参数。

       2.总共可以加99个条件

       3.可以嵌套


  
日期操作

  
  函数
描述

@created
返回创建此文档时的时间-日期值。

@adjust(time-date; year;month;day;hour;   month;day;hour;minute ;second)
按照指定的年、月、日、小时、分钟、秒来调整指定的时间-日期值。调整的值可正可负。

以下的样例将返回 09/2/97。 @adjust([06/30/95];2;2;2;0;0;0)

@today
返回当天的日期。

@month(time-date)
从指定的时间-日期中提取月份值        

该样例返回 1。 @Month([1/15/88])

@Weekday(time-date)
算出一周中的某一天,返回一个表示这一天的数字。

下面样例返回 5(实际是星期六)。  Weekday([9/29/88])

@tomorrow
返回明天日期的时间-日期值。


  
算术操作

  
       函数
              描述

@Max(number;number)

  给出两个数字,返回较大的那个数字。

下面样例返回 99;6;7;8
@Max(99:2:3;5:6:7:

@Max(number;number)

给定两个数字,返回较小的那一个。

以下的样例将返回 5;2;3;3
@Min(99:2:3;5:6:7:

@Round(number)
将指定的数字归整,结果为最接近它的一个数

该样例返回 1
@Round(1.499)

@Round(number;factor)

如果还指定了另外一个数字,就用它作为规整因子

如果称做 NumberOfEmployees 的域值是12338,则该样例返回12340
@Round(NumberOfEmployees;10)

@Sum(num;num;..)

在一组数字或数字列表中进行加法运算。

以下的样例将返回 3
@Sum( 1 : 2 )


  
列表操作

  
函数
描述

@Elements(list)
计算列表中文本、数字、时间-日期的个数。该函数总是返回数字以指明在列表中项目的个数。

如果 SalesForce 域中的列表是 "Rogers" : "Binney" : "Harris" : "Larson",则以下的样例将返回 4。"                               @Elements(SalesForce)

@Max(list;list)
  给出两个数字列表,返回较大的那个数字列表。

@Member(value; stringlist)
给定一个值,在文本列表中找到该值的位置。

下面样例返回 0。                                   @Member("Sales"; "Finance":"Service":"Legal""

@Subset(list;number)
从左到右搜索一个列,并返回您所指定数量的值。如果您指定了一个负数,@Subset 将从右到左搜索,但结果却是按从头到尾的次序排列。

以下的样例将返回 New Orleans;London。            @Subset("New Orleans":"London":"Frankfurt":"Tokyo"; 2)


  
数据转换

  
       函数
                         描述

@Text(value)
将任意值转换成文本字符串。 如:@text(RetailPrice)

@TexttoNumber(string)
在可能的情况下,将文本字符串转换成数字。如:                 @texttonumber("32.95"


  
特殊函数

  
     函数
                  描述

@Username
返回当前的用户名或服务器名。

如果用户名是层次结构名, @UserName 将以规范格式返回(其中包含 CN、OU、O 和 C 标识符)。 如果如果要返回缩写格式的名字(忽略标识符),请使用 @V3UserName。


@name([action];name)


用来裁剪层次结构名。可以用它将标准格式的名称进行缩写,将缩写名称扩展为它的标准格式,在名称中找到某一个部分,掉转部件的顺序以便用层次名称为一个视图分类。                                       如:@Name([CN];Author)

@AllChildren
包含父文档的所有满足选择标准的"答复"文档。

@AllDescendants
包含所有满足选择标准的父文档的答复文档以及答复的答复文档。

@IsResponseDoc
判断某个文档是否为答复文档。

@IsNewDoc
对于一个正在编辑的文档,指出该文档是否已经存盘

@IsText(value)
判断某个值是否为文本(或文本列表)。

@IsNumber(value)
判断某个值是否为一个数字(或数字列表)。

@Failure(string)
返回您给出的消息;当用于输入确认校验时,若输入的数值不符合校验条件,@Failure 将显示您给出的消息。                  

如:这个样例给出了输入校验公式。如果用户在"AreaCode"域中输入了大于 999 的数字,则返回一条错误信息"Area codes have only 3 digits"。    @If(AreaCode<999;@Success;@Failure(Area codes have only 3 digits"

@Success
返回 1(真)。在输入检查公式中将该函数与 @If 一起使用可以判断输入的值是否满足检查条件。

如:当"rice"域中的值小于100 时,以下的样例将返回 1 并允许文档保存。在输入检查公式中表示输入的数据正确。 @If(Price<100;@Success;@Failure(Price too large"


  
  作者域、读者域介绍


作者域是一个域类型为作者类型的域,它是用来控制文档的作者的。作者域不能控制到ACL编辑者以上的权限,拥有编辑者或编辑者以上权限的,不管该文档中的作者域是否有它。作者域只能控制作者或作者以下的权限。你只须将名字,角色,群组放到作者域的公式中就可以了。

读者域是一个域类型为读者类型的域,它是用来控制文档的读者的。读者域能控制到ACL的任何权限,即使它是管理者。也就是说,只要读者域里没有他,即使他是管理者也不能看到该文档。编程方法同作者域。


怎样定义一个域的宽度?


在普通表单中,没有办法控制域的宽度(在notes上);但在区域布局中你可以随意拖动域的宽度。所以你要控制域宽度,你可以把它放到区域布局中。


怎样激活表单继承属性


在form1表单的属性中的缺省选项中选择继承整个文档到RTF域,并选择继承到哪个域。然后回到视图中选定用form2创建的文档创建文档(用form1表单)。你就可以看到用form1表单创建的文档中的RTF域中继承了form2创建的文档创建文档,它可以文档链接,也可以是整个文档,这个选择表单属性就可以了。


常用保留域介绍


Notes 提供了预定义的域,可以使用它们来自动添加一些只有自己编程才能实现的功能。这些域名在 Notes 中是保留的。如果想使用不同的保留域名称或者重新定义该域,Notes 将显示错误消息。也就是说你在表单中放置同名的域,表单会自动完成一些功能,如:我加一个叫mailoptions的域,并将其值设为"1",然后在表单中创建一个sendto的域,当表单保存时,它会自动发送一个文档到sendto里的接收者。

邮递文档的保留域

保留域名称用途

MailOptions  
由用户决定是否邮递文档  

SaveOptions
控制文档在邮递时是否保存

Sign
创建者签名文档防止损害

Encrypt
加密邮件SendTo将邮件发送给本域列出的用户

CopyTo
将邮件的拷贝发送给本域列出的用户      

BlindCopyTo
将邮件的隐藏拷贝发送给本域列出的用户

DeliveryPriority
分别以"高"、"中"、"低"的优先级邮递邮件

DeliveryReport                                   
当邮件邮递给收件人时返回一个报告   

ReturnReceipt
当收件人阅读邮件时返回回执

MailFormat                                       
通过 cc:MailTM 邮递邮件

  

 

 

 

 

                                                                                                                                                                                                         
通用的保留域

保留域名称用途Categories分类文档$VersionOpt控制文档的版本跟踪FolderOptions将新文档放置到文件夹中Secret EncryptionKeys使用机密密钥加密文档,而不使用公用加密密钥



            
怎样判断某一天所在周的最后一天

@If(tdate != ""; @Adjust(tdate; 0; 0; @Modulo(8 - @Weekday(tdate); 7); 0; 0; 0); tdate)
  

怎样计算两个日期域间有几周?

diffDays := (EndDate - StartDate) / 86400 + 1;
strtDay := @Modulo(@Weekday(StartDate); 7);
endDay := @Modulo(@Weekday(EndDate); 7);
result := (diffDays - endDay + strtDay - * 5 / 7 - @Max(-2; -strtDay) - @Min(1; endDay) + 5 - strtDay + endDay
  

怎样在公式里用Dos命令

@Command([Execute]; "C:\\COMMAND.COM"; "/C DEL C:\\TEST.TXT"


怎样截取@dblookup的错误信息

TempVar := @DbLookup();
@If(@IsError(TempVar); 'perform desired error response'; 'perform desired
action on TempVar')


怎样做到当文档有答复时,用邮件通知该文档的作者

1.在主文档,答复文档,答复的答复文档创建一个域:form,缺省值:@Name([CN];@Usernam
2.在答复表单创建一个域:parentform,缺省值(用继承)form
3.在答复的答复表单,创建一个域:"parentform"缺省值(用继承)
ParentFrom:from
4.在答复和答复的答复表单增加一个隐藏,显示时计算的"announce"域,公式是:@If(@IsDocBeingSaved;@Success;@Return(0));
List := @Trim(@Replace(ParentFrom;From;""));
@If(@Elements(List) >; 0; @Success;@Return(0));
SendList := @Prompt([OKCANCELLIST]; "Mail Notify?"; "Send mail notification about your reply to ";"";List);
@If(@Elements(SendList) >; 0; @Success;@Return(0));
@MailSend(SendList; ""; ""; "Ref:" + OriginalSubject; ""; "My reply: "; [IncludeDoclink])


怎样在notes.ini里将环境变量删除

ENVIRONMENT environmental variable := ""; 或者 @SetEnvironment("environmental variable";"").
  

在答复文档里如何修改主文档的值

@SetDocField($Ref;"Field on Parent Doc";"Value")
  

怎样得到一个群组里有哪些成员

@Name([CN];@DbLookup("";@Subset(@MailDbName;1) : "Names.nsf";"Groups";"YourGroupName";
"Members"))

论坛徽章:
0
5 [报告]
发表于 2005-08-06 09:56 |只看该作者

LOTUS 学习技巧 连载

LOTUS学习技巧 二

1、lotus notes 5.0 数据库应用程序开发的合理顺序是怎样的?
答:开发 lotus notes 5.0 数据库应用程序的合理顺序是:
一、首先做好各个共享域、共享操作。
二、首先开发所有表单
三、其次开发所有视图
四、再次开发大纲
五、然后开发页面
六、然后开发框架集

2、如何在IE中显示视图的操作按纽?
答:要在IE中显示视图的操作按纽要做到三点:
一、操作必须有内容,即不能为空操作。
二、操作的公式必须正确,如果是错误的也显示不出来。
三、在视图的高级属性中必须起用小程序。

3、怎样在notes 或 IE 中显示时使用框架集?
答:要使用框架集则要做到三点:
一、首先创建框架集。
二、然后指定框架集中个框架的内容(内容可以是视图、大纲、或表单),并指定目标帧。
三、在数据库的高级属性中指定在浏览此数据库时使用框架集,并指定框架集的名字。

4、何时做大纲比较合理?
答:由于大纲是组织视图的,所以如果在作好大纲后并指定了各视图,以后你又修改了视图的名字,则大纲不能提取到所要求的某个视图,则大纲便会连所有其他内容也不显示,正常情况下,在页中嵌入一个已经存在的大纲时,会看到大纲的内容,如果大纲有错误(比如,所要求的视图名不存在了)则不会看到大纲的全部内容。所以如果你在作好大纲后有修改了视图名字,则建议把大纲删除掉,重新建立一个同名大纲。

5、为什么 有时 视图中的某些列在设置了分类属性后仍然象没有分类似的?但这些列在IE中显示分类却是正常的?
答:你的列属性设置是正常的,只是notes的设计刷新功能不健全,也就是你怎么刷新都不会把一些无用的信息去掉,这种情况下应该从新启动notes,如果还不行就要从新启动服务器,这样就肯定可以了。这种问题在notes的其他设计中也会遇到的。

6、如何在IE和Notes中都显示数据库的帧结构集?
答:这需要设置数据库的启动属性,在notes启动时设置为帧结构集,在IE中启动时也设置为帧结构集。

7、如何在IE中实现文档保存后返回视图?
答:要在IE中实现文档保存后返回视图需要作到两点:
一、在表单的“保存”操作中实现公式: @If(@Command([FileSave]);@Command([FileCloseWindow]);@Return("")
二、在表单中增加一个隐藏的保留域:$$return,其属性设置为计算文本。其值用公式实现为"[/" + @Subset(@DbName;-1)+"/"+"v_make_nowdept"+"?OpenView]" 其中v_make_nowdept是个某个视图名。这样就能返回视图v_make_nowdept了。当然可以用@subset(@ViewTitle;-1)来取得打开某个文档时视图名字。但是当我们这样做时发现:在视图的“创建”操作进入表单时@ViewTitle的值却总是不能返回,这个问题还有待于进一步解决。
8、我使用了帧结构集,并且是双帧结构,左边是大纲,右边是视图,但我在点左边的大纲项时,右边相应的大纲项没有刷新,并且在IE中的创建内容在notes中不能完全显示出来,在notes中创建的内容也不能完全在IE中显示出来,这是为什么?
答:你肯定在大纲的属性中设置了“使用java小程序”的选项,当使用“使用java小程序”选项时可以使大纲在IE中显示出和notes中一样的效果。而使用“使用HTML ”选项时,Domino将忽略大纲的“展开”图表,和大纲的背景而仅显示大纲的文本,但使用“使用java小程序”时,Domino在右边视图的刷新和“与notes保持同步”方面都不能正确处理,从而出现上述错误。所以建议目前使用大纲时其属性还是设置为“使用HTML "为好。
9、我怎样使得每次双击某个文挡时都让文挡在右面帧中显示?
答:你应该在表单的属性中设置启动时在指定的帧中显示。
10、我怎样在阅读文档时隐藏表单的“保存”“发布”操作?
答:你应该在表单操作的安全属性页中设置当公式为真时隐藏操作,其公式一般为:!@IsDocBeingEdited|status="1"
11、我怎样在按某个视图打开文档后,用户按“返回”操作能返回相应的视图?
答:当你从某个视图打开文档后,相应的视图的名字就保存在公式@viewtitle中,所以返回相应的使徒只需要让“返回”按纽“运行相应的打开视图的公式如:@Command([OpenView];@If(@ViewTitle="";"v_make_nowdept";@Subset(@ViewTitle;-1)))其中v_make_nowdept是某个视图的名字,你需要把他改成你的某个视图名字。
按理说IE和notes都支持公式,但实际上上述公式在IE中使用时没有问题,但在notes中使用时,有时会不能正确返回。
如果用javascript则只要简单的一句 history.back()即可实现返回,但javascript不被notes支持。即只能在IE中用。
如果使用公式 if(@Command([FileSave]);@Command([FileCloseWindow]);@Return("")
则可以在notes中正确实现返回,但这个公式在IE中有时不能正确返回,综上所述,要既能在IE中实现准确返回和在notes中实现准确返回则必须创建两个“返回”操作其中一个使用javascript,并在notes中隐藏。一个使用公式,并在IE中隐藏。
12、为什么我每次修改表单时,表格的相对位置都要从新调?
答:这是因为表格设置为自动后,系统在你每次修改表单是从新给出表格的大小,所以需要每修改一次表单都要从新调一下表格的相对位置。
13、我不想在IE中显示视图的名称,我该怎么办?
答:你在建立视图时,要同时赋予该视图名称和别名,在所有工作作好以后,你如果不想在IE中显示该名称,则你应该用空格来取代原来视图的名称,Domino回自动寻找别名来匹配的。如果你不去掉名称的话,在IE中浏览时Domino会自动把名称显示在视图的上方的。
14、我如何控制设计元素在IE中显示时,附加一些其他风格?
答:如果Domino允许该种元素在IE中浏览时附加其他风格,则在设计时在该种元素的属性里面会给你一个HTML属性页,你可以在该属性页里面添加其他HTML属性。
15、为什么我一点击某一大纲项,我的大纲就全没有了,取而代之的是一些没有层次的视图名称?
答:这种情况肯定是你的大纲所在帧的目标帧没有设置,你应该把他设置为你想要连接的那个帧,比如:一般情况下右边的 content 帧。
16、为什么我的RTF域在IE中浏览时看不到其中的内容?
答:有可能你把这个域放在表格中了吧!,如果放在表格中在IE中浏览时是看不到其中的内容的解决办法是把它放在表格外边即可。也有可能你在该RTF域中设置了“使用java applet "的属性,但没有设置HTML属性,因为默认的HTML属性是RTF域的长、宽都为0,这样在浏览时是看不到的,所以你应该把它的HTML属性设置一下,比如:"HEIGHT=\"120\" WIDTH=\"600\""。
17、我怎样设计表单来跟踪文档的作者?
答:你可以在表单上加一个隐藏的共享域,其名字可以为 from 运行公式为:@If(@IsNewDoc ; @UserName; From),这样这个域就记录了这片文档的作者了。
18、我怎样设计表单来跟踪文档是否已经发布?
答:你可以在表单上加一个隐藏的域,其名字可以为 status 类型为单选按纽,初试值设置为”0“。在你的表单的发布操作中加上一句 status="1"即可来表示此文挡已经发布。
19、我怎样控制文挡的操作权限?
答:对已经存在的文挡来说,权限分为编辑和阅读两种,你可以给表单增加一个”修改“操作用以修改文档,(其运行公式为: @Command([EditDocument]))并设置该操作的隐藏属性为当公式为真时隐藏,这样你就可以设置当文档已经发布、目前的用户不是本文档的作者、用户不具备发布角色等任何一个条件满足时隐藏该操作,从而实现对文档修改权限的控制。典型的公式如:@IsDocBeingEdited|!@IsMember("[发布公告]";@UserRoles)|status="1"|from!=@UserName
20、我如何在IE里面实现notes中的 对话框列表?(即可以添加新的项目的列表框)
答:在notes中这种列表框是系统自身就有的,实现起来比较容易,但这个功能不被IE所支持,要在IE中实现该功能只能是采用另一种方式来仿效这种效果。在IE中实现时,首先要把对话框列表的属性设置为不可添加新内容。(否则在IE中不能显示为列表框,而是编辑框),其次再增加一个文本编辑域。这个域用来输入新的项目,那么怎么才能让新的项目加入到列表框中去呢?这里用到一个小技巧,这个技巧首先被NOtes开发人员所使用:列表框中的项目要动态的从一个视图中提取它的一个已经分类的列,这个列实际上就是你的新输入项目所间接存取的域。
具体操作方法是:
一、对应于要在IE中实现的某个对话框列表域name,你再建一个对话框列表域web_name,但要把它的属性设置为不可添加新内容。
二、再建一个文本编辑域web_new_name。在name的属性设置中你要设置为“为选项使用公式”并把公式写为:@If(!@IsNewDoc & @IsDocBeingLoaded;@Unavailable;@DbColumn("":"nocache"; ""; "视图名字";1))
三、在name的 input translation事件中 输入公式 @If(@ClientType = "Notes";@Trim(name); if(@Trim(web_new_name)="";@Trim(Web_name);@Trim(web_new_name)))
四、在web_name的属性设置中你要设置为“为选项使用公式”并把公式写为@DbColumn("":"nocache"; ""; "v_bulletin_classsel";1)
五、在notes中隐藏web_name和web_new_name域。
21.在NOTES中建多数据库索引的方法
---- 学习NOTES的过程中,有些人在多库索引功能的实现上往往要花些工夫,两个人都
参照书中的提示做了同样的工作,但一个可以做成功,而另一个却怎么也实现不了,谁
也说不清楚。笔者经过自己实验,发现有些资料上写的步骤不够清晰和全面,故而往往
在此出问题。总结了以下几步供大家参考。

---- 1. 对要搜索的多个目的数据库
---- a. 允许跨数据库索引。这一步可以在“文件/工具/服务器管理”中选择“数据库
工具”执行,也可以通过选择数据库属性中“包含在多个数据库索引中”实现。
---- b. 对每一目的数据库建立全文索引。

---- 2. 在服务器(或工作站)上利用SRCHSITE.NTF模板数据库创建一全局搜索数据
库。

---- 3. 确认当前用户在该全局搜索数据库的存取控制列表中具有"searchsiteadmin"
的角色。

---- 4. 在全局搜索数据库配置搜索范围。选择菜单上“创建/搜索范围配置”项即
可。需要注意的是,如果要指定某几个数据库做为搜索的范围,必须对一个数据库建一
个文档。

---- 5. 对该全局搜索数据库建立全文索引。注意这一步应在搜索范围配置完成后进
行。

---- 6. 在服务器控制台键入

---- LOAD UPDALL 该全局搜索数据库名

---- 更新全局搜索数据库。

---- 7.建立个人搜索并进行查询。

---- 如果你参照上述步骤及顺序进行操作,你也可以顺利地实现多数据库索引。

22.在NOTES中利用表单实现对视图的分页打印
摘 要 本文讨论了将视图内容用表单以表格形式输出的方法并给出具体实例,为在
NOTES中实现分页打印提供了切实有效的办法。

关键词 视图,表单

随着计算机应用的不断深入和普及,利用网络进行数据交换,开发计算机文档管理系统
是目前计算机应用行业所面临的一项重要课题。1989年莲花发展公司发布的群件产品-
-LOTUS NOTES,由于它结合了企业级电子邮件、分布式文档数据库与快速应用开发等
到三位一体的强大技术、完全集成了INTERNET技术,提供给用户完整的,以网络为中心
的应用技术平台,是目前最优秀的用于管理非结构化信息的工具,被广泛应用于开发办
公自动化系统。

视图是NOTES数据库中的文档以表格形式给出的目录清单。每个视图以不同的方式选
择、排序或组织文档的清单,它是我们对文档处理的必然途径,是NOTES一个基本的组
成要素。虽然NOTES本身能够对视图进行打印,但我们在实际工作中仍感到这种打印还
远远不能满足用户多方面的需求;如不能以表格方式输出,不能分页打印,不方便用户
操作等等... 为此笔者尝试用表单来模拟实现对视图的打印。

下面给出在NOTES中实现的具体操作方法:

创建数据库:通过创建一个空白数据库来实践来例。
在NOTES工作台中,依次选择“文件”→“数据库”→“新建”;
选择本地服务器;
键入“PAGEPRINT”作为标题;
选择“空白”作为模板;(若要看服务器上的模板,可以选择“模板服务器”并从列表
中选择一个服务器。);
不选择“继承未来的设计变化”选项;
单击“确定”完成新数据库的建立。
制作表单:表单是数据库的核心,提供了数据输入和输出的“框架”。域、操作、静态
文本和区段等是表单的基本构成要素。在本例中,表单的作用主要有三个:一是用于将
视图以表格形式输出的“打印表单”;一个是用于构造视图的“基本表单”;通过对这
两个表单的设计来实现分页打印;另一个是用来保存一些中间过渡数据。
①打开“PAGEPRINT”数据库,单击菜单“创建”→“设计”→“表单”进入表单设计
区域后即可对表单进行设计了;下面分步介绍:

*“打印表单”(名为:qqqq)的设计:

域:a1、a2、a3、a4、a5(存放作者)

a1_1、a1_3、a1_5、a1_7、a1_9、a1_11(书名) page、total (分别存放分页数和总
页数)

 

操作:

第一页
script(click)
Sub Click(Source As Button)
Dim workspace As New notesuiworkspace
Dim uidoc As notesuidocument
Set uidoc=workspace.currentdocument
Dim session As New notessession
Dim db As notesdatabase
Dim doc As notesdocument
Dim view As notesview
Dim collection As notesdocumentcollection
Dim r As Integer
Dim i As Integer
Dim char As Variant
Set db=session.currentdatabase
Set view=db.getview("图书基本情况表"
Set doc=view.getfirstdocument ‘从第一个文档开始

r=0
i=1
Do Until doc Is Nothing
r=r+1 ‘计算文挡总数
Set doc=view.getnextdocument(doc)
Loop
Set doc=view.getfirstdocument

If ( r>;5) Then ‘超过一页

char=doc.getitemvalue("name"

Call uidoc.FieldSetText( "a1",Cstr(char(0)))

char=doc.getitemvalue("book"

Call uidoc.FieldSetText( "a1_1",Cstr(char(0)))

Set doc=view.getnextdocument(doc)

char=doc.getitemvalue("name"

Call uidoc.FieldSetText( "a2",Cstr(char(0)))

char=doc.getitemvalue("book"

Call uidoc.FieldSetText( "a1_3",Cstr(char(0)))

Set doc=view.getnextdocument(doc)

char=doc.getitemvalue("name"

Call uidoc.FieldSetText( "a3",Cstr(char(0)))

char=doc.getitemvalue("book"

Call uidoc.FieldSetText( "a1_5",Cstr(char(0)))

Set doc=view.getnextdocument(doc)

char=doc.getitemvalue("name"

Call uidoc.FieldSetText( "a4",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_7",Cstr(char(0)))

Set doc=view.getnextdocument(doc)

char=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a5",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_9",Cstr(char(0)))

Set doc=view.getnextdocument(doc)

char=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a6",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_11",Cstr(char(0)))

Call uidoc.fieldsettext("total",Cstr((r-1)\6+1))

Else

Set doc=view.getnthdocument(i)

char=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a1",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_1",Cstr(char(0)))

i=i+1

If (i<r+1) Then

Set doc=view.getnthdocument(i)

char=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a2",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_3",Cstr(char(0)))

i=i+1

End If

If (i<r+1) Then

Set doc=view.getnthdocument(i)

char=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a3",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_5",Cstr(char(0)))

i=i+1

End If

If (i<r+1) Then

Set doc=view.getnextdocument(doc)

char=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a4",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_7",Cstr(char(0)))

i=i+1

End If

If (i<r+1) Then

Set doc=view.getnextdocument(doc)

char=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a5",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_9",Cstr(char(0)))

i=i+1

End If

If (i<r+1) Then

Set doc=view.getnextdocument(doc)

char=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a6",Cstr(char(0)))

char=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_11",Cstr(char(0)))

End If

Call uidoc.fieldsettext("total",Cstr(1)) ‘显示总页数

End If

Call uidoc.fieldsettext("page",Cstr(1)) ‘显示分页数

uidoc.refresh

Dim db3 As NotesDatabase

Set db3 = session.CurrentDatabase

Dim view3 As notesview

Dim doc3 As notesdocument

Dim item As notesitem

Set view3=db3.GetView("ymst")

Set doc3=view3.getlastdocument

‘以下保存页码信息

Set item=doc3.replaceitemvalue("zys",Cstr((r-1)\6+1))

Set item=doc3.replaceitemvalue("fys",Cstr(1))

Set item=doc3.replaceitemvalue("number",Cstr(r))

Call doc3.save(False,True)

End Sub

上一页

script(click)

Sub Click(Source As Button)

Dim db As notesdatabase

Dim document As notesdocument

Dim workspace As New notesuiworkspace

Dim uidoc As notesuidocument

Set uidoc=workspace.currentdocument

Dim session As New notessession

Dim doc As notesdocument

Dim doc1 As notesdocument

Dim view As notesview

Dim view1 As notesview

Dim collection As notesdocumentcollection

Dim rr As Variant

Dim ii As Variant

Dim jj As Variant

Dim char2 As Variant

Dim r As Integer

Dim i As Integer

Dim j As Integer

Dim item As notesitem

Set db=session.currentdatabase

Set document= New notesdocument(db)

Set view=db.getview("图书基本情况表")

Set view1=db.getview("ymst")

Set doc=view1.getfirstdocument

rr=doc.getitemvalue("fys")

ii =doc.getitemvalue("number")

jj=doc.getitemvalue("zys")

r%=rr(0)

i%=ii(0)

j%=jj(0)

If (r>;1)Then

Set doc=view.getnthdocument((r-1)*6-5)‘上一页第一个文档

If ((r-1)*6-5>;0) Then

char2=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a1",Cstr(char2(0)))

char2=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_1",Cstr(char2(0)))

Set doc=view.getnextdocument(doc)

char2=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a2",Cstr(char2(0)))

char2=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_3",Cstr(char2(0)))

Set doc=view.getnextdocument(doc)

char2=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a3",Cstr(char2(0)))

char2=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_5",Cstr(char2(0)))

Set doc=view.getnextdocument(doc)

char2=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a4",Cstr(char2(0)))

char2=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_7",Cstr(char2(0)))

Set doc=view.getnextdocument(doc)

char2=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a5",Cstr(char2(0)))

char2=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_9",Cstr(char2(0)))

Set doc=view.getnextdocument(doc)

char2=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a6",Cstr(char2(0)))

char2=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_11",Cstr(char2(0)))

Call uidoc.fieldsettext("total",Cstr(j))

Call uidoc.fieldsettext("page",Cstr(r-1))

Else

Call uidoc.fieldsettext("total",Cstr(j))

Call uidoc.fieldsettext("page",Cstr(r-1))

End If

Dim db3 As NotesDatabase

Set db3 = session.CurrentDatabase

Dim view3 As notesview

Dim doc3 As notesdocument

Set view3=db3.GetView("ymst")

Set doc3=view3.getlastdocument

Set item=doc3.replaceitemvalue("fys",Cstr(r-1))

Call doc3.save(False,True)

Else

Messagebox("这已经是第一页了!")

End If

uidoc.refresh

End Sub

隐含条件:page="1"|page=""

下一页

script(click)

Sub Click(Source As Button)

Dim workspace As New notesuiworkspace

Dim uidoc As notesuidocument

Set uidoc=workspace.currentdocument

Dim session As New notessession

Dim db As notesdatabase

Dim doc As notesdocument

Dim doc1 As notesdocument

Dim view As notesview

Dim view1 As notesview

Dim collection As notesdocumentcollection

Dim rr As Variant

Dim ii As Variant

Dim jj As Variant

Dim char3 As Variant

Dim r As Integer

Dim i As Integer

Dim j As Integer

Dim h As Integer

Dim item As notesitem

Set db=session.currentdatabase

Set view=db.getview("图书基本情况表")

Set view1=db.getview("ymst")

Set doc=view1.getfirstdocument

rr=doc.getitemvalue("fys")

ii =doc.getitemvalue("number")

jj=doc.getitemvalue("zys")

r%=rr(0)

i%=ii(0)

j%=jj(0)

Set doc=view.getnthdocument(r*6+1) ‘下一页第一个文档

If (r<j)Then

Call uidoc.fieldsettext("total",Cstr(j))

Call uidoc.fieldsettext("page",Cstr(r+1))

h=r*6+1

Set doc=view.getnthdocument(h)

char3=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a1",Cstr(char3(0)))

char3=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_1",Cstr(char3(0)))

h=h+1

If (h<i+1) Then

Set doc=view.getnthdocument(i)

char3=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a2",Cstr(char3(0)))

char3=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_3",Cstr(char3(0)))

h=h+1

Else

Call uidoc.FieldSetText( "a2","")

Call uidoc.FieldSetText( "a1_3","")

End If

If (h<i+1) Then

Set doc=view.getnthdocument(i)

char3=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a3",Cstr(char3(0)))

char3=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_5",Cstr(char3(0)))

h=h+1

Else

Call uidoc.FieldSetText( "a3","")

Call uidoc.FieldSetText( "a1_5","")

End If

If (h<i+1) Then

Set doc=view.getnthdocument(h)

char3=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a4",Cstr(char3(0)))

char3=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_7",Cstr(char3(0)))

h=h+1

Else

Call uidoc.FieldSetText( "a4","")

Call uidoc.FieldSetText( "a1_7","")

End If

If (h<i+1) Then

Set doc=view.getnthdocument(h)

char3=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a5",Cstr(char3(0)))

char3=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_9",Cstr(char3(0)))

h=h+1

Else

Call uidoc.FieldSetText( "a5","")

Call uidoc.FieldSetText( "a1_9","")

End If

If (h<i+1) Then

Set doc=view.getnthdocument(h)

char3=doc.getitemvalue("name")

Call uidoc.FieldSetText( "a6",Cstr(char3(0)))

char3=doc.getitemvalue("book")

Call uidoc.FieldSetText( "a1_11",Cstr(char3(0)))

h=h+1

Else

Call uidoc.FieldSetText( "a6","")

Call uidoc.FieldSetText( "a1_11","")

End If

Call uidoc.fieldsettext("total",Cstr(j))

Call uidoc.fieldsettext("page",Cstr(r+1))

Dim db3 As NotesDatabase

Set db3 = session.CurrentDatabase

Dim view3 As notesview

Dim doc3 As notesdocument

Set view3=db3.GetView("ymst")

Set doc3=view3.getlastdocument

Set item=doc3.replaceitemvalue("fys",Cstr(r+1))

Call doc3.save(False,True)

Else

Messagebox("这已经是最后一页了!")

End If

uidoc.refresh

End Sub

隐含条件:total=page

打印(公式) @Command([FilePrint];"";"";"";"";"qqqq")

打印设置(公式) @Command([FilePrintSetup])

页面设置(公式) @Command([FilePageSetup])

退出(公式) @Command([FileSave]);

@PostedCommand([FileCloseWindow])

“基本表单” (名为:biaodan)的设计
域: book(存放书名); name(存放作者名)

操作:

继续登陆(公式)

@PostedCommand([FileSave]);
@PostedCommand([FileCloseWindow]);
@PostedCommand([Compose];"biaodan")

退出(公式)

@Command([FileSave]);
@PostedCommand([FileCloseWindow])

“辅助表单”(名为:ymjl)的设计
域:zys(总页数) fys(分页数) number(总文档数)

视图制作:简单地说视图就是将表单按照一定规则排列。本例子使用了两个视图:一个
是基本显示视图;另一个是辅助视图。
“基本视图”(名为:图书基本情况表)
列名:作者(域为name)书名(域为book)

视图选项:SELECT ((Form = "biaodan"))

操作按钮:@Command([Compose];"qqqq")

“辅助视图”(名为:ymst)
列域名:zys、fys、number

至此,该例设计基本完成,使用时只需打开数据库,进入“图书基本情况表”视图,左
键单击“产生表格”操作,在表单内点击相应的操作即可完成分页打印功能。本例给出
的代码及思路具有通用性只需稍加修改就可应用于具体程序中。

以上方法已在机器上调试通过,运行环境为:WINDOWS98,LOTUS NOTES CLIENT4.61,
Legend PⅡ 400,32M内存。

参考文献

1中国水利水电出版社,LOTUS NOTES函数和命令编程参考,北京义驰美迪技术开发有限
责任公司编,1997;

2中国水利水电出版社,LOTUS NOTES类库编程参考,北京义驰美迪技术开发有限责任公
司编,1997;

3中国水利水电出版社,精通LOTUS NOTES编程技术,北京义驰美迪技术开发有限责任公
司编,1997。

论坛徽章:
0
6 [报告]
发表于 2005-08-07 22:09 |只看该作者

LOTUS 学习技巧 连载

支持

论坛徽章:
0
7 [报告]
发表于 2005-08-08 15:00 |只看该作者

LOTUS 学习技巧 连载

楼主辛苦了。

论坛徽章:
0
8 [报告]
发表于 2005-08-08 21:16 |只看该作者

LOTUS 学习技巧 连载

好贴好贴,顶一下先。。。。。
这里真冷清啊。这么好贴没几个人顶捏

我先顶再说,顺便收下了。。。。嘿嘿

论坛徽章:
6
申猴
日期:2015-01-17 13:35:40金牛座
日期:2015-01-19 10:29:29双鱼座
日期:2015-01-24 13:50:182015年辞旧岁徽章
日期:2015-03-03 16:54:15NBA常规赛纪念章
日期:2015-05-04 22:32:032015亚冠之鹿岛鹿角
日期:2015-06-03 07:42:08
9 [报告]
发表于 2005-08-09 11:32 |只看该作者

LOTUS 学习技巧 连载

支持!

论坛徽章:
0
10 [报告]
发表于 2005-08-11 16:14 |只看该作者

LOTUS 学习技巧 连载

不错.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP