domino新手指南.docx
《domino新手指南.docx》由会员分享,可在线阅读,更多相关《domino新手指南.docx(31页珍藏版)》请在冰豆网上搜索。
![domino新手指南.docx](https://file1.bdocx.com/fileroot1/2023-1/5/17ede86b-fe57-4aab-834e-464f6998fb35/17ede86b-fe57-4aab-834e-464f6998fb351.gif)
domino新手指南
1.前言
DOMINO是一个以电子邮件为基础发展起来的标准群件平台,从1982年开始发布第一个版本,至今已经有数十年的历史,正式注册用户过亿。
它最大的优点就是提供了大量内置的如SMTP、POP、LDAP、HTTP、HTTPS等集成的系统服务,所以使用户快速构建跨平台的解决方案成为可能。
整个平台由DOMINOSERVER(DOMINO服务器)、ADMINISTRATOR(DOMINO管理工具)、DESIGNER(DOMINO开发设计工具)、NOTES(DOMINO客户端)组成,在一些针对性应用方面还有LOTUS-WORKFLOW(DOMINO工作流设计系统)、LOTUS-DOMINO.DOC(DOMINO文档管理系统)、LOTUS-QUICKPLACE(DOMINO协作平台)、LOTUS-LEI(DOMINO数据交互系统)、LOTUS-LEARNINGSPACE(DOMINO培训系统)等强有力支持。
本帖隐藏的内容需要回复才可以浏览
2.开发工具分析
2.1帧结构集
帧结构类似于HTML开发中的框架设计,帧结构集是帧结构的集合。
帧结构是较大帧结构集的一个区段或窗格,并且可以独立滚动。
通过使用帧结构集,设计者可以在帧结构之间创建链接使彼此相互关联。
帧结构集可以在用户转向或链接到其他页面或数据库是仍然保持某个页面的显示状态。
帧结构一般不采用3-D边框,边框宽度设为0。
2.2页面
页面是用来显示信息的设计元素。
与收集信息的表单不同,页面主要用来向用户展示信息,因此用户不能在页面上创建任何字段或者子表单,但可以创建HTML控件。
因此页面可以用所见即所得的HTML制作工具来进行开发设计。
页面适用于静态信息或者作为其他元素的容器。
可以使用页面作为用户应用的开始界面或者作为提交文件后的提示界面。
2.3主表单
表单是用于在数据库中输入和查看信息的载体。
表单可以包含
1)存储数据的字段2)标注字段或者提供指示的文本
3)存储用户想要在多个表单上使用的表单元素集合的子表单
4)可以结合图形和字段的布局区域它们所采用的方法可以提供更大的设计灵活性
5)可以使表单更容易理解的图形6)汇总或者组织信息的表格
7)对象OLE预定Notes/FX(TM)字段文件附件URL以及可以扩展Notes
文档范围的链接
8)可以自动执行函数的动作按钮
9)可以强化文档外观的背景颜色和图形
10)在表单中包含其他设计元素的嵌入式元素
在应用上细分DOMINO系统中表单一般分为主表单和子表单,而主表单又分为数据存放表单和数据展现表单。
其中数据存放表单一般的设计处理方式是数据字段设计在该主表单中,公共控制信息(如流转控制)设计成子表单(component)。
再将该子表单加入到主表单中。
确保整体设计结构清晰,在内容上主要包含的内容有:
数据信息、按钮操作、用户界面、功能子表单等。
而数据显示表单的设计处理方式是用于在浏览器中进行数据浏览的表单,为了保证界面的友好性,一般采用CSS定义整体风格。
2.4视图
视图是访问数据库中文档的入口,每一个数据库至少必须包含一个视图,基于所选择的准则,视图可以显示数据库的文档子集或者所有的文档。
基于文档的内容,也可以对文档进行分组和排序。
在创建视图的之前一定要:
*视图有一个中文名称和一个英文别名,在代码中始终引用英文别名
*视图的列样式、列头字体、颜色、大小在同一个数据库内应该统一
*视图标题栏高度,行间距应该统一设定好,一般设定为1和11/4
*如果视图需要分类折叠显示,要出现可折叠标记
*视图上的操作应该出现在操作栏的左侧
*视图应该行数应该使用交替颜色显示
*视图列的最后一列应该扩展到窗口宽度
*用户不直接查看的视图应定义为隐藏视图
*如果视图要嵌入到页面,用于Web访问,则应该选定“在浏览器中使用小程序”
2.5文件夹
文件夹是用来存储文档的容器。
文件夹与视图具有相同的外观,而且其设计方法也与视图大致相同。
其区别仅在于应用的时候视图具有可以自动选择并显示文档的文档选择公式,而文件夹则不是,它是通过用户手动的添加来显示文档的。
所以在设计的时候,其设计知道方法可以大致跟视图相类似。
2.6共享代码
2.6.1代理
代理Agent可以让用户在Domino中自动执行许多任务。
它们是可以在数据库中为用户执行特定任务的独立程序。
例如可以归档文档、改变字段值、发送邮件消息、删除文档或者执行与外部应用进行交互这样的功能更为强大的动作。
代理还能够进行设置在服务器上基于安排或者在出现特定事件时自行运行。
2.6.2WEB服务
Web服务和Domino
Domino6是一个理想的应用程序,用于宿主或使用Web服务。
由于Web服务主要是由XML数据组成。
因为DOMINO目前有更多被设计用来特殊处理XML的LotusScript类,因此DOMINO对WEB服务有天生的好支持。
也有一些有用的工具可提供对Domino里Web服务的附加的支持,它们是:
对LotusScript的SOAPConnect-这个工具包含了一个LotusScript库它允许您使用和宿主Web服务。
MSSOAP工具包-由Microsoft提供的允许Domino在Windows平台上使用或
宿主Web服务
.NET-来自Microsoft的一个工具集让您使用和宿主Web服务这个工具集可
由LotusNotes/Domino经由CommonObjectModel(COM)接口访问。
以下的段落接着描述WEB服务的本质。
Web服务可以被定义为一个应用程序它提供了一个API,以便将自己与其他应用程序集成在一起。
Web服务的主要功能是提供过程到过程的交互作用而不需要用户界面,也就是说您可以通过与API接口远程调用这个应用程序,调用这个服务的应用程序被称为客户机程序。
XML位于Web服务的核心并为描述远程过程调用RemoteProcedureCallWeb服务以及Web服务目录提供了一种公共的语言。
Web服务这个短语有时可能会容易误解好像它意味着使用Web浏览器,然而并不总是这种情况,有许多不同的调用Web服务的方法例如一个HTTP请求或者来自另一个应用程序的一个电子邮件是其中的一些方法。
调用一个Web服务的最常用的方法之一是通过发送一个HTTPGet请求到API。
经由Internet访问API有许多优点,API可以被任何具有Web服务地址的全球客户机访问,Web服务应用程序里的一个修改只需要在数据源完成,Web服务可以以任何语言和在任何平台上书写,只要那些Web服务根据Web服务标准可访问,
为了使协同性有效,Web服务平台必须提供一个标准系统,该系统将与使用不同的平台和/或编程语言的系统有接口。
一个Web服务平台需要描述此Web服务并提供其他应用程序为了调用这个Web服务所需要的信息。
构成Web服务平台的主要技术如下:
XML-这是用于在Web服务平台上表示数据的基本格式;
SOAP-简单对象访问协议(SimpleObjectAccessProtocol)Web服务的远程过程调用(RPC)工具SOAP是一个传输协议,它使用HTTPPOST请求来传输。
方法所返回的响应是一个XML文档。
WDSLWeb服务描述语言WebServiceDescriptionLanguage-是一个基于XML的文法,它用于描述Web服务及其函数参数和返回值。
UDDI-通用描述发现和集成(UniversalDescription,Discovery,andIntegration)
一个基于XML的目录它表示一种技术规范用于发布和发现业务和Web服务。
2.6.3大纲
每个数据库都需要一种方法进行导航。
可以利用大纲设计起来创建大纲,给用户提供一个自动链接,具有个人风格的站点导航图。
大纲可以包含背景图形、定制图标、链接或者操作。
所以在设计大纲的时候,对大纲采用的大纲项图标,以及大纲项所采用的字体,字号,颜色,mouseover的颜色等都要事先定制,颜色,图标采用不一定要相同,但是应该在保证风格统一,并且与整体界面没有冲突的前提下,体现出各自的特点。
大纲项与大纲都应该采用别名的形式,在程序调用中调用英文别名
2.6.4子表单
子表单subform是用户可以在多个表单中使用的表单片段。
例如用户可以在子表单中建立公司的信头,然后在各种商业表单中使用这个子表单。
子表单能够包含与常规表单相同的元素,可以基于公式在表单上加载子表单。
2.6.5共享域
共享域类似于字段,但是可以在不同的表单中使用,如果用户改变共享域的属性,那么这些改变就会应用于所有出现这个字段的场合,他的主要作用是域进行一次定义而后重复使用。
便于设计改动时的工作。
2.6.6自动化组件
向应用程序中添加自动功能可以加速执行重复任务、路有文档、更新信息、执行计算、运行程序以及检查错误的自动化组件:
*操作按钮
通过点击它们,可以使某些任务得以自动完成。
特别是对于Web浏览器用户,需要使用操作来模拟Notes菜单项。
*热点
热点是用户单击后可执行操作、运行公式或Script以及转向链接的文本或图片。
热点是可以到另一个Web站点、数据库或数据库元素的链接,还可以是按钮、弹出式文本或公式以及操作。
2.6.7共享操作
共享操作是在表单或视图中设置用户激活的任务。
共享操作的设计位置虽然与操作不同,但是设计方法两者没有什么区别,对操作设计的一些规定,在此同样适用。
2.6.8SCRIPT库
脚本库是集中存放共享代码的位置具体可包含LotusScript、JavaScript以及Java库。
2.6.9导航器
导航器是用户能够包含可以用于导航的可编程区域和热点的图形。
热点通常可以指示用户前往数据库或者Web站点的另外部分。
但是总的来讲,导航器是NOTES4.X版本的产物,是一项过时的技术,所以在开发的时候不再建议开发人员使用导航器,而去使用页面嵌入大纲来对应用进行导航。
2.6.10层
层layer这种设计元素不能在数据库级别建立,而是要在页面表单或者子表单中建立。
层可以让用户在页面表单或者子表单上放置重叠的内容块,因为用户能够控制信息的位置大小和内容。
所以层能够让用户进行灵活的设计,用户能够建立和堆砌多个层使其彼此交错。
透明层可以展现其下的层不透明的层可以隐藏其下的层。
层的内容要依赖于用户要在页面还是表单上建立层,当用户在页面上建立层的时候层就可以包含与页面包含内容相同的元素,例如用户能够增加文本和图形等内容;当用户在表单上建立层的时候层就能够包含与表单包含内容相同的元素例如用户能够增加文本和图形以及受控的访问部分字段和子表单
2.6.11DXL
Domino数据的XMLExtensibleMarkupZarauage可扩展标记语言表示称为DXL。
DXL可以描述特定于Domino的数据以及嵌入式视图表单和文档这样的设计元素。
随着XML成为交换信息的标准基础,DXL也为将数据的XML表示导入和导出到
Domino应用提供了基础。
利用DXL实用工具用户就能够查看和导出用户的Domino设计元素,用户还可以使用转换器Transformer实用工具和XSL样式表单文件将其转换为另外的格式,XSL文件包含了针对XML数据的格式
3.开发要点编码语言以及代码优化分析
3.1编码语言的选择
在具体的开发过程中,根据需求性质,DOMINO可以有多种编码语言的选择。
主要有公式、lotusscript、java、javascript语言,比较起来,特别简单的功能和逻辑,用公式实现比较快;复杂的功能和逻辑,用lotusscript比较快。
java语言可以实现多线程,完全面向对象,处理大量文档时,如果程序利用
到多线程,比不能利用多线程的lotusscript快。
另外针对于底层开发,LOTUS还有专门的Toolkits支持:
按Lotus产品系列来分,Lotus提供下列产品的工具包:
Notes/Domino、Sametime、QuickPlace、DiscoveryServer、Other。
其中,Notes/Domino和Sametime的工具包比较多,C、C++、Java语言的都有,其他产品的则很少。
从这个角度,也可以看出文档数据处理、协同工作是Lotus系列产品的核心价值所在。
其中,Notes/Domino的工具包有:
LotusCAPItoolkitLotusC++APItoolkit
LotusDominoToolkitforJava/CORBALotusandNotesToolkitforCOM
LotusDominoDriverforJDBC(简称LDDJ)NotesSQL
LotusXMLToolkit(简称DXL)CustomTagConverionkit(简称DCT)
LotusScriptExtensionstoolkit(简称LSX)
在Domino/Notes的Toolkit中,CAPI的功能最为强大:
可以操纵notes数据库中几乎所有的数据对象:
数据库及ACL、文档和域、表单、视图和文件夹、代理、可以为Notes客户端的增加附加菜单、可以用来创建附加的Domino服务任务、可以用来扩展Domino/Notes的事件管理。
而其主要限制如下:
不能修改已有的Domino/Notes软件,不能去除其已有的功能、特性,或者改变其工作机理、不能修改安全特性、不能修改用户活动记录
支持的操作系统:
WindowsNT/2000,Linux,SolarisSPARC/Intel,HP-UX,MacOS,AIX,AS/400,S/390等。
3.2编码优化原则
1)公式语言优化
1.使用@ClientType代替@UserRoles来检查客户端类型
从R4.6开始,不必使用@UserRoles中的$$WebClient来检查客户端是否使用浏览器,直接使用@ClientType比较快
2.使用简单的公式隐藏条件比较快
以下三种写隐藏的选择,性能递减。
可以利用第一个,不要写判断@ClientType的公式;可以利用编辑模式,不要写判断@isdocbeingedited的公式
a.根据客户端程序类型b.根据编辑模式c.根据公式隐藏
3.在@dblookup和@dbcolumn公式中使用列号比使用域名快
使用域名需要在域列表中对比,但直接使用列号会带来维护的困难。
4.打开@dblookup和@dbcolumn的cache开关
cache不但可以使这个公式执行更加快,而且可以使‘同一个数据库’中,‘同样公式’的另一个lookup运行更快。
cache是基于数据库的,不同数据库的相同lookup不能利用相同的cache。
注意:
无论是否打开cache,lotusscript调用evaluate的lookup都不能利用cache。
5.根据4,如果公式和lotusscript都要利用相同的lookup结果,可以将信息放到profile文档中。
6.要lookup一个包含很多文档的视图时,创建一个隐藏视图,仅包含必要的列。
视图越小,越快。
7.如果要取视图中的几个列,分别取的话,每个lookup都要花时间。
将几个列组合成一个列,用特别的字符分隔,一次取出来,然后分析出几个域。
8.一段公式中,数次利用同一个结果集,用临时变量保存,而不是每次重新取
9.使用不同的搜索方法,如果处理的文档集较小(例如少于数据库中所有文档的15%),使用lotusscript比公式快,如使用getview,search,ftsearch等方法。
10.使用‘显示时计算’域来避免不必要的重复计算。
下表是使用各种类型域时,不同事件引发的计算情况:
FieldCreateOpenOpenShowSaveRefresh
Type(empty)(data)Dialog
EditDVIT,IVITIV
(normal)
EditDVKFKFIT,IVITIV
(K-UF-DB)
EditKF,DVKFKFIT,IVITIV
(K-UF-NotDB)
ComputedVVV
Computedfor
displayVVVVV
Computedfor
composedV
上面缩写的解释
normal----Normaleditfield(notoneofthetwospecialonesthatfollow)
K-UF-DB---Keyword,Useformulaforchoices,dialogbox
K-UF-NotDB---Keyword,Useformulaforchoices,checkboxesorradiobuttons
DV-----Defaultvalueformulaexecutes
IT-----Inputtranslationformulaexecutes
IV-----Inputvalidationformulaexecutes
KF-----Keywordformulaexecutes
V-----Valueformulaexecutes
Create----Fieldisbeingcreated(eitherbecausethedocumentisbeingcreated
oranexistingdocumentisopenedthatdoesnotcontainthefield)
Open-----Openinganexistingdocument—ineitherReadorEditmode
Empty---Fieldisempty(existsindocumentbuthasnocontents)
data-----Fieldhasdata
ShowDialog---Userpressestheicontodisplaythedialogbox
注意两点:
1.使用checkbox和radiobox,一打开文档,公式总要计算,即使仅仅打算阅读而不是修改文档,看起来是合理的,因为需要计算出各个项目供阅读嘛
2.已经有数据的,使用对话框格式的编辑域,打开时候也要重新计算,这个就不太合理了。
当使用复杂的@dblookup时,性能有很大影响。
隐藏公式域没有作用,因为仍然会发生计算。
按照下面方法解决
1)创建一个隐藏的多值‘显示时计算’域:
kwDataHidden,计算公式是原来的@dblookup公式,但仍然要做如下处理,值公式写成这样:
rem"Donotrunformuladuringdocsave";
@if(@IsDocBeingSaved;@Return("");"");
rem"Onlyrunifdocisineditmode";
@if(@IsDocBeingEdited;@DBColumn(............);"")
2)在表单的PostModeChange中,写:
@If(@IsDocBeingEdited;@Command([ViewRefreshFields]);""),(实际上,如果觉得公式的值的修改频率不是太快的话,这里也可以不写)
3)真正操作那个域的公式写:
kwDataHidden;并且该域属性选择‘刷新文档时刷新选项’。
2)脚本语言优化
1.使用Forloop,不使用Doloop或者whileloop的循环
前者比后者快60%(不计算循环内部时间的情况下)
2.引用数组元素的时候,使用Forall比for快
一维数组,前者快75%,二维以上,也可以快50%
3.简化if语句
lotusscript不会象c那样进行逻辑语句优化,所以
Ifa=xandb=ythen
应该写成
Ifa=xthen
ifb=ythen
后者快40%
4.避免混合变量类型(计算)(也就是不要隐式造型)
dimaassingle
dimzaslong
z=3
a=1.0
z=z+a
上面这一段使用了impliedcasting,z=z+(long)a会比较快
1.对整数结果,使用整数除法:
z&=x&\y&比z&=x&/y&快60%
2.仅在有必要的时候才使用variant类型,lotus使用更多的时间处理variant
3.读取文件的时候,一次读取一块,而不是一行,下面的例子A比B快接近5倍!
而且读取的文件越大,越明显。
exampleA
OpenfName$forinputas#fNum
buff$=Input$(Lof(fNum),fNum)
stPos=1
lineNo=1
eoFile=false
WhileNoteoFile
nlPos=Instr(stPos,buff$,Chr$(13))
If(nlPos)>0)then
fData$(lineNo)=Mid$(buff$,stPos,nlPos-stPos)
stPos=nlPos+1
else
fData$(lineNo)=Mid$(buff$,stPos)
eoFile=true
endif
lineNo=LineNo+1
wend
close#fNum
exampleB
OpenfName$forInputas#fNum
lineNo=1
whileNotEof(fNum)
LineInput#fNum,fData$(lineNo)
lineNo=lineNo+1
wend
close#fNum
注意,R4.6以及之前的版本,string变量有64k的限制,所以一上例子a需要再增加一些东西(不能一次读取,而是要分次读取文件),但块读取的好处仍然是显而易见的。
R5开始,string变量可以最大达到2G,足够读取非常大的文件了。
例子A虽然增加了代码量,但是可以大大加快速度,某些场合非常有用
5.避免无谓地使用数组,下面例子A比例子B快两倍
ExampleA
Fori=1to100
sum=sum+x(i)
Next
t
(1)=sum
ExampleB
Fori=1to100
t
(1)=t
(1)+x(i)
Next
DominoR5引入了新的数组处理函数:
ArrayAppend,ArrayGetIndex,ArrayReplace,FullTrim,使用这些函数比自己写相同的功能快
6.有一个不使用字符串数组的替代方法
把所有数组中的字符串元素构造成一个字符串