[转帖]LOTUS 学习技巧
LOTUS学习技巧 一<br><br>
1、 notes同关系型数据库比较<br>
关系型数据库 Lotus Notes<br>
基于事务处理模型 基于文档型<br>
使用结构化数据 使用半结构数据元素(丰富文本,图片,等)<br>
提供实时访问数据 使用复制来增加或减少文档(按修改)<br>
使用特别的queiries定位数据 使用视图定位数据<br>
集中在一个企业内部 在企业与企业间<br>
使用SQL来访问 使用全文检索来访问<br>
<br>
2、什么应用不适合notes<br>1.实时的数据处理<br>
2.大于4G的数据库(R5增加到64G)<br>
3.基于query和基于报表<br>
4.复杂计算<br>
<br>
3、同义名有什么用?<br>
在表单,视图,关键字中可以用同义名,主要用途是当你想在程序中用英文,而在取名或显示给用户用中文时,你可以用同义气名,用"|"来分隔,注意:可以使用多个同义名,notes会存取最右边的一个。|| <br>
<br>
4、 如何做一个动态的windows title? <br>
在表单中的windows title的事件中写入一个公式,如想按用户的名字变,写上@username就ok了!要想按域变,写上域名就ok.<br><br>
5、怎样激活域帮助 <br>
在域属性的选项属性中的帮助描述写入帮助信息,就可以。当光标在该域时,状态栏会自动出现帮助描述,注意如果没有看到,在操作栏上请选 查看---域帮助<br>
<br>
6、怎样做到关键字能自动增、减? <br>
在关键字属性中,选用公式,然后输入公式,公式用@dbcolumn函数返回视图中的值,这时就能做到关键字能自动增、减,不过有没有用的关键字。<br>
<br>
7、各种域类型区别介绍?<br>
域类型 何时变化<br>
计算型 当文档创建,存盘,刷新时计算,并保存在文档中<br>
显示时计算 当文档打开编辑,读或刷新时计算,不保存在文档中<br>
创建时计算 当文档被创建时,仅此计算一次,并保存在文档中。<br>
<br>
8、主文档、答复文档、答复的答复文档介绍<br>
<br><br>
类别 描述<br>
文档 用来创建主文档,不依附其他的文档<br>
答复 用来答复主文档,依靠主文档,在层次视图里有同主文档有缩进关系<br>
答复的答复<br>可以用来答复主文档,也可以答复答复的答复文档,同它的父文档有缩进关系。<br>注意:答复文档无论选定的是主文档,还是答复文档,还是答复的答复文档,都是针对主文档答复的.<br><br>
9、 如果让用户必须填一些域,否则不准保存?<br>@假设该域为name;在该Name域的input validation的事件中写入下列公式if(name="";@failure("please input your name";@success) <br>
<br>
10、怎样将一个数据库做成模板?<br>
有多种方法,这里介绍一种,在工作台选中一个要做模板的数据库,然后选择文件---数据库---新建拷贝,在弹出的对话框中将.nsf改为.ntf就ok了。<br>
<br>
11、怎样做到当光标从一个域移到另一个域,表单自动刷新?<br>
在该域所在的表单中选择表单属性中的缺省选项中"自动刷新域。<br>
<br>
12、怎样让用户保存文档时,域中的数值自动转化你想要的标准格式?<br>
假设该域为name;想把它转化为大写,在该Name域的input translation的事件中写入下列公式:@UpperCase(State),就可以具体的字符串的操作公式,请看本页的字符串操作。<br>
<br>
13、怎样在表单中控制某一个域让谁编辑?<br>
你可以把该域放到存取控制区段里,指定该区段的编辑者就只有该编辑者才能修改改域了。<br>
<br>
14、怎样控制区域布局中域,当使用tab时,光标的移动顺序?<br>
假设在区域布局中有a,b,c三个域,我想要它们光标移动的顺序为a,c,b.可以这样做,选中a域,选设计----置前,选中c域,选设计----置前,选中b域,选设计----置前.<br>
<br>
15、在视图中怎样做出主文档,答复文档,答复的答复层层缩进的效果?<br>
在视图属性中选"缩进一个层次显示答复文档"只代表文档有答复折叠的层次,但不能在视图中显示出来,为了做到层层缩进,我们必须另外开发,在视图中的前面做一列,选定列属性"仅显示答复文档",然后在该列的公式中写上如果是答复文档的话,该列显示什么,如果是答复的答复文档显示什么,就可以了然后调整各列的宽度就可以看到有缩进的效果。 ""<br>
<br>
16、ACL中的安全介绍<br>
访问级别 功能<br>
管理者 能修改ACL和复制设置,在本地加密一个数据库,删除一个数据库,能执行比它低级别的任何任务。<br>
设计者 能修改所有的设计元素,创建全文索引,能执行比它低级别的任何任务。<br>
编辑者 能创建文档和编辑文档<br>
作者 能创建和编辑在作者域中有她名字的文档<br>
读者 能读文档,但不能创建和编辑文档<br>
存放者 能创建新文档,但不能读到任何文档,即使是他自己创建的<br>
不能存取者 不能访问数据库<br>
<br>
17、 公式学习:<br>
<br>变量<br>
<br>
变量有两种类型:域,临时变量,你可以在公式中使用域名作为变量如:FirstName<br>
<br>
临时变量只能存在于公式中。它的作用范围就是它所在的公式,除了在公式中赋予给它的属性以外没有其他属性。创建一个临时变量的语法是:variableName := value<br>
<br><br>
常量 <br>
常量类型 描述<br>
文本型 用""标记的字符集,如:"joe.",注意:为了在文本串中用引号,用转义符"\",如:\""<br>
数字型 数字0-9,能用(+和-),科学记数法和常量e<br>
<br>
时间型 任何时间型的常量用([]),如:<br>
<br>
操作符<br>
<br>操作符类型<br>符号<br>例子<br>
<br>赋值<br>
:=<br>
Areacode:=@left(phone;3)<br>
<br>计算<br>
乘号 * 除号 / 加号 + 减号<br>
UnitPrice*3 TotalPrice/qty TotalPrice+Tax TotalPrice-Discount<br>
<br>
<br>比较<br>
等于 = 不等于 != =! <>; >;< 小于< 小于等于 <= 大于 >; 大于等于 >;=<br>
SELECT Year=1996 SELECT Month!="January" SELECT Age<70 SELECT Year<=1990 SELECT Age>;30 SELECT Age>;=21<br>
<br>
<br>串联<br>
列表 : 文本 +<br>
"Tricycle":"Mini-bike":"5-speed" CompanyName+",inc."<br>
<br>
<br>逻辑<br>
否 ! 于 & 或 |<br>
Status="Approved"&TargetMarket!="Children"<br>
<br>
<br>
<br><br>公式关键字<br>
<br><br>
关键字语法<br>
描述<br>
例子<br>
<br>
FIELD fieldname:=value<br>
<br>
赋一个值给当前notes文档中的域,如果域不存在则创建一个,存在则覆盖该值。<br>
FIELD CompanyName:=Company+"。inc"<br>
<br>
<br>
REM ["remarks"]<br>
注释<br>
REM "12/15/95"<br>
<br>
SELECT logicalValue<br>
<br>
在视图,代理或复制公式中用来定义一个文档集<br>
SELECT form="idea"<br>
<br>
<br><br>
字符串处理函数介绍?<br>
<br><br>
函数<br>
描述<br>
<br>
@propercase(string)<br>
<br>
将字符串中的单词转换成字首大写的形式:每个单词的头一个字母大写,后面的其他字母小写。以下的样例将返回 Every Child Loves Toys. @ProperCase("every CHILD LOves toys"<br>
<br>
@trim(strin)<br>
<br>
从文本字符串中(或文本列表的每一个元素中)删除位于开头和结尾的空格,同时还删除多余的空格。以下的样例将返回 ROBERT SMITH。@Trim(@UpperCase("Robert Smith")<br>
<br>
@length(string)<br>
<br>
返回文本字符串中字符的个数.该样例返回 45。@Length("The boy crossed the wide, but gentle, stream."<br>
<br>
@newline<br>
<br>
在文本字符串中插入一个新行(回车)。下面公式返回 Hi There "Hi"+@NewLine+"There"<br>
<br>
@matches(string;pattern)<br>
<br>
用一个样本字符串去匹配一个字符串。因为样本字符串可以包含一定数量的通配符和逻辑符号,所以可以用较复杂的模式去匹配字符串。 该样例返回 0。 @Matches("A big test";"a?test"<br>
<br>
@left<br>
<br>
从左到右搜索字符串,并返回字符串中最左边的几个字符。 该样例返回"Len"。 @Left("Lennard Wallace";3)<br>
<br>
<br><br>
逻辑操作<br>
<br><br>函数<br>操作<br>
<br>@if<br>@if(condition1;action1;condition2;action2;else-action)<br>
<br>
<br><br>
如果满足条件1,则做action1,如果满足条件2,则做action2,否则做else-action.<br>
<br>
注意: 1.该函数必须有奇数个参数。<br>
<br>2.总共可以加99个条件<br>
<br>3.可以嵌套<br>
<br>
<br><br>
日期操作<br>
<br><br>函数<br>
描述<br>
<br>
@created<br>
返回创建此文档时的时间-日期值。<br>
<br>
@adjust(time-date; year;month;day;hour; month;day;hour;minute ;second)<br>
按照指定的年、月、日、小时、分钟、秒来调整指定的时间-日期值。调整的值可正可负。<br>
<br>
以下的样例将返回 09/2/97。 @adjust(;2;2;2;0;0;0)<br>
<br>
@today<br>
返回当天的日期。<br>
<br>
@month(time-date)<br>
从指定的时间-日期中提取月份值 <br>
<br>
该样例返回 1。 @Month()<br>
<br>
@Weekday(time-date)<br>
算出一周中的某一天,返回一个表示这一天的数字。<br>
<br>
下面样例返回 5(实际是星期六)。 Weekday()<br>
<br>
@tomorrow<br>
返回明天日期的时间-日期值。<br>
<br>
<br><br>
算术操作<br>
<br><br>函数<br>描述<br>
<br>
@Max(number;number)<br>
<br>给出两个数字,返回较大的那个数字。<br>
<br>
下面样例返回 99;6;7;8<br>
@Max(99:2:3;5:6:7:<br>
<br>
@Max(number;number)<br>
<br>
给定两个数字,返回较小的那一个。<br>
<br>
以下的样例将返回 5;2;3;3<br>
@Min(99:2:3;5:6:7:<br>
<br>
@Round(number)<br>
将指定的数字归整,结果为最接近它的一个数<br>
<br>
该样例返回 1<br>
@Round(1.499)<br>
<br>
@Round(number;factor)<br>
<br>
如果还指定了另外一个数字,就用它作为规整因子<br>
<br>
如果称做 NumberOfEmployees 的域值是12338,则该样例返回12340<br>
@Round(NumberOfEmployees;10)<br>
<br>
@Sum(num;num;..)<br>
<br>
在一组数字或数字列表中进行加法运算。<br>
<br>
以下的样例将返回 3<br>
@Sum( 1 : 2 )<br>
<br>
<br><br>
列表操作<br>
<br><br>
函数<br>
描述<br>
<br>
@Elements(list)<br>
计算列表中文本、数字、时间-日期的个数。该函数总是返回数字以指明在列表中项目的个数。<br>
<br>
如果 SalesForce 域中的列表是 "Rogers" : "Binney" : "Harris" : "Larson",则以下的样例将返回 4。" @Elements(SalesForce)<br>
<br>
@Max(list;list)<br>给出两个数字列表,返回较大的那个数字列表。<br>
<br>
@Member(value; stringlist)<br>
给定一个值,在文本列表中找到该值的位置。<br>
<br>
下面样例返回 0。 @Member("Sales"; "Finance":"Service":"Legal""<br>
<br>
@Subset(list;number)<br>
从左到右搜索一个列,并返回您所指定数量的值。如果您指定了一个负数,@Subset 将从右到左搜索,但结果却是按从头到尾的次序排列。<br>
<br>
以下的样例将返回 New Orleans;London。 @Subset("New Orleans":"London":"Frankfurt":"Tokyo"; 2)<br>
<br>
<br><br>
数据转换<br>
<br><br>函数<br>描述<br>
<br>
@Text(value)<br>
将任意值转换成文本字符串。 如:@text(RetailPrice)<br>
<br>
@TexttoNumber(string)<br>
在可能的情况下,将文本字符串转换成数字。如: @texttonumber("32.95"<br>
<br>
<br><br>
特殊函数<br>
<br><br>函数<br>描述<br>
<br>
@Username<br>
返回当前的用户名或服务器名。<br>
<br>
如果用户名是层次结构名, @UserName 将以规范格式返回(其中包含 CN、OU、O 和 C 标识符)。 如果如果要返回缩写格式的名字(忽略标识符),请使用 @V3UserName。<br>
<br>
<br>
@name(;name)<br>
<br>
<br>
用来裁剪层次结构名。可以用它将标准格式的名称进行缩写,将缩写名称扩展为它的标准格式,在名称中找到某一个部分,掉转部件的顺序以便用层次名称为一个视图分类。 如:@Name(;Author)<br>
<br>
@AllChildren<br>
包含父文档的所有满足选择标准的"答复"文档。<br>
<br>
@AllDescendants<br>
包含所有满足选择标准的父文档的答复文档以及答复的答复文档。<br>
<br>
@IsResponseDoc<br>
判断某个文档是否为答复文档。<br>
<br>
@IsNewDoc<br>
对于一个正在编辑的文档,指出该文档是否已经存盘<br>
<br>
@IsText(value)<br>
判断某个值是否为文本(或文本列表)。<br>
<br>
@IsNumber(value)<br>
判断某个值是否为一个数字(或数字列表)。<br>
<br>
@Failure(string)<br>
返回您给出的消息;当用于输入确认校验时,若输入的数值不符合校验条件,@Failure 将显示您给出的消息。 <br>
<br>
如:这个样例给出了输入校验公式。如果用户在"AreaCode"域中输入了大于 999 的数字,则返回一条错误信息"Area codes have only 3 digits"。 @If(AreaCode<999;@Success;@Failure(Area codes have only 3 digits"<br>
<br>
@Success<br>
返回 1(真)。在输入检查公式中将该函数与 @If 一起使用可以判断输入的值是否满足检查条件。<br>
<br>
如:当"rice"域中的值小于100 时,以下的样例将返回 1 并允许文档保存。在输入检查公式中表示输入的数据正确。 @If(Price<100;@Success;@Failure(Price too large"<br>
<br>
<br><br>作者域、读者域介绍<br>
<br>
<br>
作者域是一个域类型为作者类型的域,它是用来控制文档的作者的。作者域不能控制到ACL编辑者以上的权限,拥有编辑者或编辑者以上权限的,不管该文档中的作者域是否有它。作者域只能控制作者或作者以下的权限。你只须将名字,角色,群组放到作者域的公式中就可以了。<br>
<br>
读者域是一个域类型为读者类型的域,它是用来控制文档的读者的。读者域能控制到ACL的任何权限,即使它是管理者。也就是说,只要读者域里没有他,即使他是管理者也不能看到该文档。编程方法同作者域。<br>
<br>
<br>
怎样定义一个域的宽度?<br>
<br>
<br>
在普通表单中,没有办法控制域的宽度(在notes上);但在区域布局中你可以随意拖动域的宽度。所以你要控制域宽度,你可以把它放到区域布局中。<br>
<br>
<br>
怎样激活表单继承属性<br>
<br>
<br>
在form1表单的属性中的缺省选项中选择继承整个文档到RTF域,并选择继承到哪个域。然后回到视图中选定用form2创建的文档创建文档(用form1表单)。你就可以看到用form1表单创建的文档中的RTF域中继承了form2创建的文档创建文档,它可以文档链接,也可以是整个文档,这个选择表单属性就可以了。<br>
<br>
<br>
常用保留域介绍<br>
<br>
<br>
Notes 提供了预定义的域,可以使用它们来自动添加一些只有自己编程才能实现的功能。这些域名在 Notes 中是保留的。如果想使用不同的保留域名称或者重新定义该域,Notes 将显示错误消息。也就是说你在表单中放置同名的域,表单会自动完成一些功能,如:我加一个叫mailoptions的域,并将其值设为"1",然后在表单中创建一个sendto的域,当表单保存时,它会自动发送一个文档到sendto里的接收者。<br>
<br>
邮递文档的保留域<br>
<br>
保留域名称用途<br>
<br>
MailOptions <br>
由用户决定是否邮递文档 <br>
<br>
SaveOptions <br>
控制文档在邮递时是否保存<br>
<br>
Sign<br>
创建者签名文档防止损害<br>
<br>
Encrypt <br>
加密邮件SendTo将邮件发送给本域列出的用户<br>
<br>
CopyTo<br>
将邮件的拷贝发送给本域列出的用户 <br>
<br>
BlindCopyTo<br>
将邮件的隐藏拷贝发送给本域列出的用户<br>
<br>
DeliveryPriority<br>
分别以"高"、"中"、"低"的优先级邮递邮件 <br>
<br>
DeliveryReport <br>
当邮件邮递给收件人时返回一个报告 <br>
<br>
ReturnReceipt<br>
当收件人阅读邮件时返回回执<br>
<br>
MailFormat <br>
通过 cc:MailTM 邮递邮件<br>
<br><br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br><br>
通用的保留域<br>
<br>
保留域名称用途Categories分类文档$VersionOpt控制文档的版本跟踪FolderOptions将新文档放置到文件夹中Secret EncryptionKeys使用机密密钥加密文档,而不使用公用加密密钥<br>
<br>
<br>
<br><br>
怎样判断某一天所在周的最后一天 <br>
<br>
@If(tdate != ""; @Adjust(tdate; 0; 0; @Modulo(8 - @Weekday(tdate); 7); 0; 0; 0); tdate)<br><br>
<br>
怎样计算两个日期域间有几周? <br>
<br>
diffDays := (EndDate - StartDate) / 86400 + 1;<br>
strtDay := @Modulo(@Weekday(StartDate); 7);<br>
endDay := @Modulo(@Weekday(EndDate); 7);<br>
result := (diffDays - endDay + strtDay - * 5 / 7 - @Max(-2; -strtDay) - @Min(1; endDay) + 5 - strtDay + endDay<br><br>
<br>
怎样在公式里用Dos命令 <br>
<br>
@Command(; "C:\\COMMAND.COM"; "/C DEL C:\\TEST.TXT"<br>
<br>
<br>
怎样截取@dblookup的错误信息 <br>
<br>
TempVar := @DbLookup();<br>
@If(@IsError(TempVar); 'perform desired error response'; 'perform desired<br>
action on TempVar')<br>
<br>
<br>
怎样做到当文档有答复时,用邮件通知该文档的作者 <br>
<br>
1.在主文档,答复文档,答复的答复文档创建一个域:form,缺省值:@Name(;@Usernam<br>
2.在答复表单创建一个域:parentform,缺省值(用继承)form<br>
3.在答复的答复表单,创建一个域:"parentform"缺省值(用继承)<br>
ParentFrom:from<br>
4.在答复和答复的答复表单增加一个隐藏,显示时计算的"announce"域,公式是:@If(@IsDocBeingSaved;@Success;@Return(0));<br>
List := @Trim(@Replace(ParentFrom;From;""));<br>
@If(@Elements(List) >; 0; @Success;@Return(0));<br>
SendList := @Prompt(; "Mail Notify?"; "Send mail notification about your reply to ";"";List);<br>
@If(@Elements(SendList) >; 0; @Success;@Return(0));<br>
@MailSend(SendList; ""; ""; "Ref:" + OriginalSubject; ""; "My reply: "; )<br>
<br>
<br>
怎样在notes.ini里将环境变量删除 <br>
<br>
ENVIRONMENT environmental variable := ""; 或者 @SetEnvironment("environmental variable";"").<br><br>
<br>
在答复文档里如何修改主文档的值 <br>
<br>
@SetDocField($Ref;"Field on Parent Doc";"Value")<br><br>
<br>
怎样得到一个群组里有哪些成员 <br>
<br>
@Name(;@DbLookup("";@Subset(@MailDbName;1) : "Names.nsf";"Groups";"YourGroupName";<br>
"Members")) <br>
<br>
re:LOTUS学习技巧 二1、lot...
LOTUS学习技巧 二<br><br>
1、lotus notes 5.0 数据库应用程序开发的合理顺序是怎样的?<br>
答:开发 lotus notes 5.0 数据库应用程序的合理顺序是:<br>
一、首先做好各个共享域、共享操作。<br>
二、首先开发所有表单<br>
三、其次开发所有视图<br>
四、再次开发大纲<br>
五、然后开发页面<br>
六、然后开发框架集<br>
<br>
2、如何在IE中显示视图的操作按纽?<br>
答:要在IE中显示视图的操作按纽要做到三点:<br>
一、操作必须有内容,即不能为空操作。<br>
二、操作的公式必须正确,如果是错误的也显示不出来。<br>
三、在视图的高级属性中必须起用小程序。<br>
<br>
3、怎样在notes 或 IE 中显示时使用框架集?<br>
答:要使用框架集则要做到三点:<br>
一、首先创建框架集。<br>
二、然后指定框架集中个框架的内容(内容可以是视图、大纲、或表单),并指定目标帧。<br>
三、在数据库的高级属性中指定在浏览此数据库时使用框架集,并指定框架集的名字。<br>
<br>
4、何时做大纲比较合理?<br>
答:由于大纲是组织视图的,所以如果在作好大纲后并指定了各视图,以后你又修改了视图的名字,则大纲不能提取到所要求的某个视图,则大纲便会连所有其他内容也不显示,正常情况下,在页中嵌入一个已经存在的大纲时,会看到大纲的内容,如果大纲有错误(比如,所要求的视图名不存在了)则不会看到大纲的全部内容。所以如果你在作好大纲后有修改了视图名字,则建议把大纲删除掉,重新建立一个同名大纲。<br>
<br>
5、为什么 有时 视图中的某些列在设置了分类属性后仍然象没有分类似的?但这些列在IE中显示分类却是正常的?<br>
答:你的列属性设置是正常的,只是notes的设计刷新功能不健全,也就是你怎么刷新都不会把一些无用的信息去掉,这种情况下应该从新启动notes,如果还不行就要从新启动服务器,这样就肯定可以了。这种问题在notes的其他设计中也会遇到的。<br>
<br>
6、如何在IE和Notes中都显示数据库的帧结构集?<br>
答:这需要设置数据库的启动属性,在notes启动时设置为帧结构集,在IE中启动时也设置为帧结构集。<br>
<br>
7、如何在IE中实现文档保存后返回视图?<br>
答:要在IE中实现文档保存后返回视图需要作到两点:<br>
一、在表单的“保存”操作中实现公式: @If(@Command();@Command();@Return("")<br>
二、在表单中增加一个隐藏的保留域:$$return,其属性设置为计算文本。其值用公式实现为"[/" + @Subset(@DbName;-1)+"/"+"v_make_nowdept"+"?OpenView]" 其中v_make_nowdept是个某个视图名。这样就能返回视图v_make_nowdept了。当然可以用@subset(@ViewTitle;-1)来取得打开某个文档时视图名字。但是当我们这样做时发现:在视图的“创建”操作进入表单时@ViewTitle的值却总是不能返回,这个问题还有待于进一步解决。<br>
8、我使用了帧结构集,并且是双帧结构,左边是大纲,右边是视图,但我在点左边的大纲项时,右边相应的大纲项没有刷新,并且在IE中的创建内容在notes中不能完全显示出来,在notes中创建的内容也不能完全在IE中显示出来,这是为什么?<br>
答:你肯定在大纲的属性中设置了“使用java小程序”的选项,当使用“使用java小程序”选项时可以使大纲在IE中显示出和notes中一样的效果。而使用“使用HTML ”选项时,Domino将忽略大纲的“展开”图表,和大纲的背景而仅显示大纲的文本,但使用“使用java小程序”时,Domino在右边视图的刷新和“与notes保持同步”方面都不能正确处理,从而出现上述错误。所以建议目前使用大纲时其属性还是设置为“使用HTML "为好。<br>
9、我怎样使得每次双击某个文挡时都让文挡在右面帧中显示?<br>
答:你应该在表单的属性中设置启动时在指定的帧中显示。<br>
10、我怎样在阅读文档时隐藏表单的“保存”“发布”操作?<br>
答:你应该在表单操作的安全属性页中设置当公式为真时隐藏操作,其公式一般为:!@IsDocBeingEdited|status="1"<br>
11、我怎样在按某个视图打开文档后,用户按“返回”操作能返回相应的视图?<br>
答:当你从某个视图打开文档后,相应的视图的名字就保存在公式@viewtitle中,所以返回相应的使徒只需要让“返回”按纽“运行相应的打开视图的公式如:@Command(;@If(@ViewTitle="";"v_make_nowdept";@Subset(@ViewTitle;-1)))其中v_make_nowdept是某个视图的名字,你需要把他改成你的某个视图名字。<br>
按理说IE和notes都支持公式,但实际上上述公式在IE中使用时没有问题,但在notes中使用时,有时会不能正确返回。<br>
如果用javascript则只要简单的一句 history.back()即可实现返回,但javascript不被notes支持。即只能在IE中用。<br>
如果使用公式 if(@Command();@Command();@Return("")<br>
则可以在notes中正确实现返回,但这个公式在IE中有时不能正确返回,综上所述,要既能在IE中实现准确返回和在notes中实现准确返回则必须创建两个“返回”操作其中一个使用javascript,并在notes中隐藏。一个使用公式,并在IE中隐藏。<br>
12、为什么我每次修改表单时,表格的相对位置都要从新调?<br>
答:这是因为表格设置为自动后,系统在你每次修改表单是从新给出表格的大小,所以需要每修改一次表单都要从新调一下表格的相对位置。<br>
13、我不想在IE中显示视图的名称,我该怎么办?<br>
答:你在建立视图时,要同时赋予该视图名称和别名,在所有工作作好以后,你如果不想在IE中显示该名称,则你应该用空格来取代原来视图的名称,Domino回自动寻找别名来匹配的。如果你不去掉名称的话,在IE中浏览时Domino会自动把名称显示在视图的上方的。<br>
14、我如何控制设计元素在IE中显示时,附加一些其他风格?<br>
答:如果Domino允许该种元素在IE中浏览时附加其他风格,则在设计时在该种元素的属性里面会给你一个HTML属性页,你可以在该属性页里面添加其他HTML属性。<br>
15、为什么我一点击某一大纲项,我的大纲就全没有了,取而代之的是一些没有层次的视图名称?<br>
答:这种情况肯定是你的大纲所在帧的目标帧没有设置,你应该把他设置为你想要连接的那个帧,比如:一般情况下右边的 content 帧。<br>
16、为什么我的RTF域在IE中浏览时看不到其中的内容?<br>
答:有可能你把这个域放在表格中了吧!,如果放在表格中在IE中浏览时是看不到其中的内容的解决办法是把它放在表格外边即可。也有可能你在该RTF域中设置了“使用java applet "的属性,但没有设置HTML属性,因为默认的HTML属性是RTF域的长、宽都为0,这样在浏览时是看不到的,所以你应该把它的HTML属性设置一下,比如:"HEIGHT=\"120\" WIDTH=\"600\""。<br>
17、我怎样设计表单来跟踪文档的作者?<br>
答:你可以在表单上加一个隐藏的共享域,其名字可以为 from 运行公式为:@If(@IsNewDoc ; @UserName; From),这样这个域就记录了这片文档的作者了。<br>
18、我怎样设计表单来跟踪文档是否已经发布?<br>
答:你可以在表单上加一个隐藏的域,其名字可以为 status 类型为单选按纽,初试值设置为”0“。在你的表单的发布操作中加上一句 status="1"即可来表示此文挡已经发布。<br>
19、我怎样控制文挡的操作权限?<br>
答:对已经存在的文挡来说,权限分为编辑和阅读两种,你可以给表单增加一个”修改“操作用以修改文档,(其运行公式为: @Command())并设置该操作的隐藏属性为当公式为真时隐藏,这样你就可以设置当文档已经发布、目前的用户不是本文档的作者、用户不具备发布角色等任何一个条件满足时隐藏该操作,从而实现对文档修改权限的控制。典型的公式如:@IsDocBeingEdited|!@IsMember("[发布公告]";@UserRoles)|status="1"|from!=@UserName<br>
20、我如何在IE里面实现notes中的 对话框列表?(即可以添加新的项目的列表框)<br>
答:在notes中这种列表框是系统自身就有的,实现起来比较容易,但这个功能不被IE所支持,要在IE中实现该功能只能是采用另一种方式来仿效这种效果。在IE中实现时,首先要把对话框列表的属性设置为不可添加新内容。(否则在IE中不能显示为列表框,而是编辑框),其次再增加一个文本编辑域。这个域用来输入新的项目,那么怎么才能让新的项目加入到列表框中去呢?这里用到一个小技巧,这个技巧首先被NOtes开发人员所使用:列表框中的项目要动态的从一个视图中提取它的一个已经分类的列,这个列实际上就是你的新输入项目所间接存取的域。<br>
具体操作方法是:<br>
一、对应于要在IE中实现的某个对话框列表域name,你再建一个对话框列表域web_name,但要把它的属性设置为不可添加新内容。<br>
二、再建一个文本编辑域web_new_name。在name的属性设置中你要设置为“为选项使用公式”并把公式写为:@If(!@IsNewDoc & @IsDocBeingLoaded;@Unavailable;@DbColumn("":"nocache"; ""; "视图名字";1))<br>
三、在name的 input translation事件中 输入公式 @If(@ClientType = "Notes";@Trim(name); if(@Trim(web_new_name)="";@Trim(Web_name);@Trim(web_new_name)))<br>
四、在web_name的属性设置中你要设置为“为选项使用公式”并把公式写为@DbColumn("":"nocache"; ""; "v_bulletin_classsel";1)<br>
五、在notes中隐藏web_name和web_new_name域。<br>
21.在NOTES中建多数据库索引的方法<br>
---- 学习NOTES的过程中,有些人在多库索引功能的实现上往往要花些工夫,两个人都<br>
参照书中的提示做了同样的工作,但一个可以做成功,而另一个却怎么也实现不了,谁<br>
也说不清楚。笔者经过自己实验,发现有些资料上写的步骤不够清晰和全面,故而往往<br>
在此出问题。总结了以下几步供大家参考。<br>
<br>
---- 1. 对要搜索的多个目的数据库<br>
---- a. 允许跨数据库索引。这一步可以在“文件/工具/服务器管理”中选择“数据库<br>
工具”执行,也可以通过选择数据库属性中“包含在多个数据库索引中”实现。<br>
---- b. 对每一目的数据库建立全文索引。<br>
<br>
---- 2. 在服务器(或工作站)上利用SRCHSITE.NTF模板数据库创建一全局搜索数据<br>
库。<br>
<br>
---- 3. 确认当前用户在该全局搜索数据库的存取控制列表中具有"searchsiteadmin"<br>
的角色。<br>
<br>
---- 4. 在全局搜索数据库配置搜索范围。选择菜单上“创建/搜索范围配置”项即<br>
可。需要注意的是,如果要指定某几个数据库做为搜索的范围,必须对一个数据库建一<br>
个文档。<br>
<br>
---- 5. 对该全局搜索数据库建立全文索引。注意这一步应在搜索范围配置完成后进<br>
行。<br>
<br>
---- 6. 在服务器控制台键入<br>
<br>
---- LOAD UPDALL 该全局搜索数据库名<br>
<br>
---- 更新全局搜索数据库。<br>
<br>
---- 7.建立个人搜索并进行查询。<br>
<br>
---- 如果你参照上述步骤及顺序进行操作,你也可以顺利地实现多数据库索引。<br>
<br>
22.在NOTES中利用表单实现对视图的分页打印<br>
摘 要 本文讨论了将视图内容用表单以表格形式输出的方法并给出具体实例,为在<br>
NOTES中实现分页打印提供了切实有效的办法。<br>
<br>
关键词 视图,表单<br>
<br>
随着计算机应用的不断深入和普及,利用网络进行数据交换,开发计算机文档管理系统<br>
是目前计算机应用行业所面临的一项重要课题。1989年莲花发展公司发布的群件产品-<br>
-LOTUS NOTES,由于它结合了企业级电子邮件、分布式文档数据库与快速应用开发等<br>
到三位一体的强大技术、完全集成了INTERNET技术,提供给用户完整的,以网络为中心<br>
的应用技术平台,是目前最优秀的用于管理非结构化信息的工具,被广泛应用于开发办<br>
公自动化系统。<br>
<br>
视图是NOTES数据库中的文档以表格形式给出的目录清单。每个视图以不同的方式选<br>
择、排序或组织文档的清单,它是我们对文档处理的必然途径,是NOTES一个基本的组<br>
成要素。虽然NOTES本身能够对视图进行打印,但我们在实际工作中仍感到这种打印还<br>
远远不能满足用户多方面的需求;如不能以表格方式输出,不能分页打印,不方便用户<br>
操作等等... 为此笔者尝试用表单来模拟实现对视图的打印。<br>
<br>
下面给出在NOTES中实现的具体操作方法:<br>
<br>
创建数据库:通过创建一个空白数据库来实践来例。<br>
在NOTES工作台中,依次选择“文件”→“数据库”→“新建”;<br>
选择本地服务器;<br>
键入“PAGEPRINT”作为标题;<br>
选择“空白”作为模板;(若要看服务器上的模板,可以选择“模板服务器”并从列表<br>
中选择一个服务器。);<br>
不选择“继承未来的设计变化”选项;<br>
单击“确定”完成新数据库的建立。<br>
制作表单:表单是数据库的核心,提供了数据输入和输出的“框架”。域、操作、静态<br>
文本和区段等是表单的基本构成要素。在本例中,表单的作用主要有三个:一是用于将<br>
视图以表格形式输出的“打印表单”;一个是用于构造视图的“基本表单”;通过对这<br>
两个表单的设计来实现分页打印;另一个是用来保存一些中间过渡数据。<br>
①打开“PAGEPRINT”数据库,单击菜单“创建”→“设计”→“表单”进入表单设计<br>
区域后即可对表单进行设计了;下面分步介绍:<br>
<br>
*“打印表单”(名为:qqqq)的设计:<br>
<br>
域:a1、a2、a3、a4、a5(存放作者)<br>
<br>
a1_1、a1_3、a1_5、a1_7、a1_9、a1_11(书名) page、total (分别存放分页数和总<br>
页数)<br>
<br>
<br>
<br>
操作:<br>
<br>
第一页<br>
script(click)<br>
Sub Click(Source As Button)<br>
Dim workspace As New notesuiworkspace<br>
Dim uidoc As notesuidocument<br>
Set uidoc=workspace.currentdocument<br>
Dim session As New notessession<br>
Dim db As notesdatabase<br>
Dim doc As notesdocument<br>
Dim view As notesview<br>
Dim collection As notesdocumentcollection<br>
Dim r As Integer<br>
Dim i As Integer<br>
Dim char As Variant<br>
Set db=session.currentdatabase<br>
Set view=db.getview("图书基本情况表"<br>
Set doc=view.getfirstdocument ‘从第一个文档开始<br>
<br>
r=0<br>
i=1<br>
Do Until doc Is Nothing<br>
r=r+1 ‘计算文挡总数<br>
Set doc=view.getnextdocument(doc)<br>
Loop<br>
Set doc=view.getfirstdocument<br>
<br>
If ( r>;5) Then ‘超过一页<br>
<br>
char=doc.getitemvalue("name"<br>
<br>
Call uidoc.FieldSetText( "a1",Cstr(char(0)))<br>
<br>
char=doc.getitemvalue("book"<br>
<br>
Call uidoc.FieldSetText( "a1_1",Cstr(char(0)))<br>
<br>
Set doc=view.getnextdocument(doc)<br>
<br>
char=doc.getitemvalue("name"<br>
<br>
Call uidoc.FieldSetText( "a2",Cstr(char(0)))<br>
<br>
char=doc.getitemvalue("book"<br>
<br>
Call uidoc.FieldSetText( "a1_3",Cstr(char(0)))<br>
<br>
Set doc=view.getnextdocument(doc)<br>
<br>
char=doc.getitemvalue("name"<br>
<br>
Call uidoc.FieldSetText( "a3",Cstr(char(0)))<br>
<br>
char=doc.getitemvalue("book"<br>
<br>
Call uidoc.FieldSetText( "a1_5",Cstr(char(0)))<br>
<br>
Set doc=view.getnextdocument(doc)<br>
<br>
char=doc.getitemvalue("name"<br>
<br>
Call uidoc.FieldSetText( "a4",Cstr(char(0)))<br>
<br>
char=doc.getitemvalue("book")<br>
<br>
Call uidoc.FieldSetText( "a1_7",Cstr(char(0)))<br>
<br>
Set doc=view.getnextdocument(doc)<br>
<br>
char=doc.getitemvalue("name")<br>
<br>
Call uidoc.FieldSetText( "a5",Cstr(char(0)))<br>
<br>
char=doc.getitemvalue("book")<br>
<br>
Call uidoc.FieldSetText( "a1_9",Cstr(char(0)))<br>
<br>
Set doc=view.getnextdocument(doc)<br>
<br>
char=doc.getitemvalue("name")<br>
<br>
Call uidoc.FieldSetText( "a6",Cstr(char(0)))<br>
<br>
char=doc.getitemvalue("book")<br>
<br>
Call uidoc.FieldSetText( "a1_11",Cstr(char(0)))<br>
<br>
Call uidoc.fieldsettext("total",Cstr((r-1)\6+1))<br>
<br>
Else<br>
<br>
Set doc=view.getnthdocument(i)<br>
<br>
char=doc.getitemvalue("name")<br>
<br>
Call uidoc.FieldSetText( "a1",Cstr(char(0)))<br>
<br>
char=doc.getitemvalue("book")<br>
<br>
Call uidoc.FieldSetText( "a1_1",Cstr(char(0)))<br>
<br>
i=i+1<br>
<br>
If (i<r+1) Then<br>
<br>
Set doc=view.getnthdocument(i)<br>
<br>
char=doc.getitemvalue("name")<br>
<br>
Call uidoc.FieldSetText( "a2",Cstr(char(0)))<br>
<br>
char=doc.getitemvalue("book")<br>
<br>
Call uidoc.FieldSetText( "a1_3",Cstr(char(0)))<br>
<br>
i=i+1<br>
<br>
End If<br>
<br>
If (i<r+1) Then<br>
<br>
Set doc=view.getnthdocument(i)<br>
<br>
char=doc.getitemvalue("name")<br>
<br>
Call uidoc.FieldSetText( "a3",Cstr(char(0)))<br>
<br>
char=doc.getitemvalue("book")<br>
<br>
Call uidoc.FieldSetText( "a1_5",Cstr(char(0)))<br>
<br>
i=i+1<br>
<br>
End If<br>
<br>
If (i<r+1) Then<br>
<br>
Set doc=view.getnextdocument(doc)<br>
<br>
char=doc.getitemvalue("name")<br>
<br>
Call uidoc.FieldSetText( "a4",Cstr(char(0)))<br>
<br>
char=doc.getitemvalue("book")<br>
<br>
Call uidoc.FieldSetText( "a1_7",Cstr(char(0)))<br>
<br>
i=i+1<br>
<br>
End If<br>
<br>
If (i<r+1) Then<br>
<br>
Set doc=view.getnextdocument(doc)<br>
<br>
char=doc.getitemvalue("name")<br>
<br>
Call uidoc.FieldSetText( "a5",Cstr(char(0)))<br>
<br>
char=doc.getitemvalue("book")<br>
<br>
Call uidoc.FieldSetText( "a1_9",Cstr(char(0)))<br>
<br>
i=i+1<br>
<br>
End If<br>
<br>
If (i<r+1) Then<br>
<br>
Set doc=view.getnextdocument(doc)<br>
<br>
char=doc.getitemvalue("name")<br>
<br>
Call uidoc.FieldSetText( "a6",Cstr(char(0)))<br>
<br>
char=doc.getitemvalue("book")<br>
<br>
Call uidoc.FieldSetText( "a1_11",Cstr(char(0)))<br>
<br>
End If<br>
<br>
Call uidoc.fieldsettext("total",Cstr(1)) ‘显示总页数<br>
<br>
End If<br>
<br>
Call uidoc.fieldsettext("page",Cstr(1)) ‘显示分页数<br>
<br>
uidoc.refresh<br>
<br>
Dim db3 As NotesDatabase<br>
<br>
Set db3 = session.CurrentDatabase<br>
<br>
Dim view3 As notesview<br>
<br>
Dim doc3 As notesdocument<br>
<br>
Dim item As notesitem<br>
<br>
Set view3=db3.GetView("ymst")<br>
<br>
Set doc3=view3.getlastdocument<br>
<br>
‘以下保存页码信息<br>
<br>
Set item=doc3.replaceitemvalue("zys",Cstr((r-1)\6+1))<br>
<br>
Set item=doc3.replaceitemvalue("fys",Cstr(1))<br>
<br>
Set item=doc3.replaceitemvalue("number",Cstr(r))<br>
<br>
Call doc3.save(False,True)<br>
<br>
End Sub<br>
<br>
上一页<br>
<br>
re:好长啊,楼主是否可以考虑出篇专题文章啊,...
好长啊,楼主是否可以考虑出篇专题文章啊,也好让我们慢慢看啊re:顶!
顶! 顶 好帖子不能沉hao ,谢谢楼主
:) 顶 这么复杂看不懂啊!
页:
[1]