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.开发工具分析
已知限制
数据库的最大大小是多少?
最大的 OS 文件大小限制 -(最大为 64GB)
文本域的最大大小是多少?
15KB(存储);15KB,显示在视图列中
RTF 文本域的最大大小是多少?
仅由可用磁盘空间限定,最大为 1GB
RTF 文本域中单个段落的最大大小是多少?
64KB
一个层次结构视图中有几级响应;每一级中有几个文档?
31 级;300,000 个文档
视图、表单等的名字最多允许包含多少个字符?
数据库标题:96 个字节
文件名:在 Windows 和 Unix 平台上的最小限制为 255 和/或由操作系统限定; 本地的 Macintosh 工作站上为 31
域名: 32
视图名: 64
表单名: 32
代理名: 32
一个数据库中可包含多少个域?
t3000(所有域名的总长度限制在 t64K)。可以启用数据库属性“允许数据库中包含多个域”以使得数据库中的唯一命名域可到达 64K。
一个表中可包含多少列? 64
一个表中可包含多少行? 255
可以向一个数据库中添加多少视图?
没有限制;不过,随着视图数目的增加,用于显示其他视图的时间也会增加
可以向一个数据库中添加多少表单?
仅受数据库大小限制。
一个视图中允许有多少列?
289 个 10 字符列;取决于 # 或每列的字符数
可以向一个视图中引入多少文档?
文档合计至少为 350K
一个数据库中可允许有多少个层叠视图? 200
可输入的页边距的最大值(以英寸计)为多少? 46
可输入的页面裁减尺寸的最大值(以英寸计)为多少? 46
可选择/打印的最大字号是多少? 250
一个视图中允许有多少文档?
一个视图索引最大可为 130MB
最多可向“制表文本”中引出多少个文档?
仅受可用磁盘空间限制
一个“存取控制列表”中最多可有多少个项目?
t50 个名字(“存取控制列表”的大小不能超过 32767 字节)
一个“存取控制列表”中最多可有多少个角色? 75 个角色
可允许的标识符最大口令长度为多少? 63 个字符
对于一个多口令标识符,最多可有多少个用户拥有授权口令? 8 个用户
全文索引引擎的保留字
Topic,AND, NOT, OR, CONTAINS, NEAR, ACCRUE, EXACTCASE, TERMWEIGHT, PARAGRAPH, FIELD, SENTENCE.
如果想要绕开此限制,可以通过添加统配符的方式. 例如,如果想搜索"Topic"这个词, 可以添加一个"*"号, 即"Topic*". 或者把这个词用双引号括起来。

  
6. Domino CGI变量
  公共网关接口CGI是外部应用与HTTP服务器进行交互的标准,当Web用户保存文档或者打开已有文档的时候Domino Web服务器就会使用CGI变量收集用户信息包括用户名称 浏览器 用户的Internet协议 IP 地址。
  为了在Web应用中收集这些信息用户可以采用以下两种选择1)使用与CGI变量相同的名称建立字段2)使用LotusScript代理
Domino所支持的CGI变量表
  Domino可以通过字段或者LotusScript代理获取以下CGI变量用户还可以通过HTTP或者HTTPS提前获取CGI变量。
Auth_Type
如果服务器支持用户认证并且可以保护脚本那么这个变量就是可以用于验证用户的特定于协议的认证方法
Content_Type
对于那些具有附加信息的查询例如HTTP POST和PUT这个变量就是数据的内容
Content_Length
由客户所提供的指定内容的长度
Gateway_Interface
服务器用来进行编译的CGI规范版本
HTTP_Accept
由HTTP头信息所规定的客户所能够接受的MIME类型
HTTP_Accept_language
由HTTP头信息所规定的客户所能够接受的语言
HTTP_Referer
用户用来在这里获取页面的URL
HTTPS
指出是否能够为服务器使用SSL模式
HTTPS_CLIENT_CERT_CO
x.509凭证上的公共名称
MMON_NAME
HTTPS_CLIENT_CERT_ISS x.509凭证的发出者
UER_COMMON_NAME
HTTPS_KEYSIZE SSL会话期间的会话键大小 例如40位128位
HTTP_User_Agent
客户用以发送请求的浏览器
Path_Info
由客户提供的额外路径信息相对服务器的HMTL根目录,换句话说是可以通过脚本的虚拟路径名称以及紧随其后作为PATH_INFO发送的额外信息访问脚本
Path_Info_Decoded
返回与Path_Info相同的信息但是会解码字符串例如如果URL所引用的视图名称包含了URL所不允许的字符那么就要对这个名称进行编码这个CGI变量将会解码这个字符串,Path_Info_Decoded 只能够由Domino应用使用
Path_Translated
服务器可以提供PATH_INFO的经过翻译的版本它将会获取路径并且进行虚拟与物理之间的映射
Query_String
在引用这个脚本的URL中 紧随问号之后的信息
Query_String_Decoded
返回与Query_String相同的内容只是对字符串进行解码例如如果URL所引用的视图名称包含了URL所不允许的字符那么就要对这个名称进行编码这个CGI变量将会解码这个字符串,Query_String_Decoded只能够由Domino应用使用
Remote_Addr
进行请求的远程主机的IP地址
Remote_Host
进行请求的主机名称
Remote_Ident
这个变量将会设置为从服务器所获取的远程用户的名称使用这个变量,只能够用于日志记录
Remote_User
返回经过认证的用户名称的认证方法
Request_Content
只用于代理包含随HTTP POST请求发送的数据数据通常采用URL编码由使用&符号连接的名称=值对构成例如FirstName=John&LastName=Doe,Request_Method 能够用于进行请求的方法 对于HTTP 这个方法可以是GET、HEAD或者POST等
Script_Name
正在执行的脚本的虚拟路径用于自引用URL
Server_Name
服务器的主机名称DNS别名或者IP地址它会出现在自引用URL中
Server_Protocol
这个请求使用的信息协议的名称和修订版本
Server_Port
请求所发送到的端口
Server_Software
运行CGI程序的信息服务器软件的名称和版本
Server_URL_Gateway_
服务器进行编辑的CGI规范的版本

7 出错处理
在Web开发中,公式必须用异常处理方式保护代码
@IsError,特别是涉及DBColumn和DBLookup的地方
7.1 异常处理
所有过程或函数都需要提供完整的异常处理,以便于出现错误时的排除,原则
上只有涉及到非本系统模块时需要屏蔽错误,如和RTX接口,和硬件接口等情况。
在整个代码Declarations块中声明数据库常量
Const DATABASE_NAME = “test.nsf”’ 为了防止代码的互相调用,可以添加前缀,如COMMON_DATABASE_NAME
在所有过程(或函数)的代码描述以后,直接声明一个常量,最后为异常处理代码
Const FUNCTION_NAME = "Initialize"
On Error Goto EHandle
……
Exit Sub(Function)
EHandle:
    Msgbox DATABASE_NAME + "-" + FUNCTION_NAME + "-" + Error + "-" + Cstr(Erl)
End Sub(Function)
结果示例:
test.nsf-Initialize-Object is not set-19
原则上不推荐使用Print显示异常信息,此结果只针对开发者有用,只有需要进行页面跳转时使用print
4.6 为 Web 定制“表单已处理”确认信息
  Web 用户提交文档后,Domino 使用缺省的“表单已处理”的确认信息回应用户。要重新设置缺省答复,可将计算文本域添加到表单中,给此域命名为 $$Return,并使用 HTML 作为计算值来创建定制的批准。
显示个人化答复
下面的 $$Return 公式返回答复“Thank you”,并附加上用户姓名:
who:= @If(@Left(From; " ") = ""; From; @Left(From; " "));
@Return("<h2>Thank you, " + who + "</h2><br><h4>
<a href=/register.nsf/Main+View?OpenView>Main View</a>");
7.2 显示定制的错误消息
  要定制显示给 Web 用户的错误消息外观,向数据库中添加定制的错误消息表单。如果发生错误条件,且其定制表单存在,则 Domino 使用定制表单来显示错误消息。否则,Domino 使用缺省错误消息表单。添加到数据库的消息表单将覆盖由管理员设置的服务器范围内的消息。
  要在表单和错误条件之间创建关联,创建拥有下列名称之一的表单。然后创建名为 MessageString 的可编辑的文本域来保存错误消息。添加要与错误消息一起显示的其他文本、链接以及其他表单对象。
$$ReturnAuthenticationFail ure 不能校验用户名称和口令。
$$ReturnAuthorizationFailu re 用户对该数据库没有足够的存取级别。
$$ReturnDocumentDeleted 成功删除文档。
$$ReturnGeneralError 出现了其他错误条件。
链接到另一页面
根据提交文档中的域值,在 HTML 中包括链接到另一页面的 URL。下面的 $$Return 公式根据用户选择的范围返回答复。例如:如果用户选择欧洲,则消息“在意大利访问我们的站点”将显示一个链接,可链接到意大利的 Web 站点(假定公式中的“stdAnswer”和“stdFooter”已预先定义。)。
@If(Region="Asia"; stdAnswer + "<h2>Visit our site in <a href="<A href='http://www.japan.lotus.com">Japanhttp://www.japan.lotus.com">Japan</a></h2>" + stdFooter;
Region="Europe"; stdAnswer + "<h2>Visit our site in <a href="<A href='http://www.lotus.com\it_ciao/it_ciao.htm">Italyhttp://www.lotus.com\it_ciao/it_ciao.htm">Italy</a></h2>" + stdFooter;stdAnswer + stdFooter);
返回另一页面
要跳转到不同的 Web 页面,可将页面的 URL 用括号括起来放入页面。当用户提交文档时,Web 客户机将显示引用的文档。例如:下面的 $$Return 公式显示 Lotus 日本站点的主页。"[http://www.japan.lotus.com]"
7.3 定制未找到文档提示消息
1)在onload事件执行如下函数即可
function delstr()
{
var obj = document.getElementsByTagName_r("h2");
for (var i = 0; i < obj.length; i++)
{
var getstr=obj.innerText;
if (getstr.indexOf("未找到文档")!=-1)
{
      getstr=getstr.replace("未找到文档","你要想换的字样")
      obj.innerText = getstr;
}
}
}
这种方法必須要在页面下载完后才能执行,如果网络太慢就不太好了.
2)在表单打用样式表
h2{display:none}
这种方法无法屏蔽表格< td>中产生的未找到文档字样
3)在标签中加一个< tr>< /tr>不完整标签
使未找文档放于< tr>未找文档< /tr>之间
这种方法会产生一条细线
4)在表单中使用@Elements(@DbColumn)公式来取得符合条件的文档数
并根据是否为0来隐藏视图或显示你定制的语句.

7.4 所有数据提交时的数据校验
强制规定校验函数必须为CheckValue(),必须在对应表单的OnSubmit中添加
Return CheckValue ();

8.安全性规则
8.1 基于ACL的安全控制
区段存取
许多文档中的数据有不同的敏感性你可能希望某些用户不能更新或阅读文档中的某些内容而另外一些用户则可以完全控制达到这个目标的一个方法就是将文档分成不同的区段并且对区段施加区段存取控制。
ACL权限分析
No Access不能存取者
根本不能够访问此数据库,根本不能进行复制;
Depositor存放者       
可以创建文档但不能够阅读编辑或删除包括自己创建的文档在内的所有文档        不能接收到变化;
Reader 读者
能够阅读文档但不能创建编辑或删除文档,能够获得变化 但不能发送变化
Author作者
创建与阅读文档自己的文档,但只能编辑复制新文档。
Editor编辑者
创建阅读与编辑所有的文档以及复制所有新的或变化了的文档
Designer 设计者
可以修改所有的数据库设计元素,可以修改复制公式并且可以创建全文索引,设计者也可以执行允许较低存取级别执行的所有任务。但它不能删除数据库或修改ACL。复制所有新的或变化了的文档,也可以复制对设计的更改设计,但不能复制对ACL的更改。
Manager管理者
可以对数据库做任何操作 可以复制任何变化。
  另外在ACL中有两种缺省的服务器组 LocalDomainServers是本地域中的服务器所形成的组,OtherDomainServers是其他域中的服务器所形成的组,它们通常是其他组织的服务器而本组织的用户可能需要去访问它们
  要防止未注册的用户访问数据库你应该设置Default为No Access 如果Default需要更高的存取权限那么应该在ACL中创建Anonymous项并且将其设置为 NoAccess。
    为了允许来自Web客户的访问,你可能仍然想让匿名用户拥有一些最小的权限来有效地使用数据库例如 你可以授予匿名用户以下权限
      Reader允许访问信息数据库;
  Author允许访问交互式数据库;
  将Default与 Anonymous存取区分开,如果在ACL中没有Anonymous匿名这一项,那么Domino将按缺省的数据库存取级别对匿名用户访问进行设置。
  而这种设置有可能超过了匿名用户访问所需要的级别,存取级别定义如下 :Default缺省 在ACL中没有定义的用户
Anonymous匿名 组织中没有有效Notes标识的用户
8.2 基于文档存取的安全控制
  文档的创建者通过在文档属性对话框的安全设置能够决定谁可以阅读这个文档,可以选择让那些具有读者或更高权限的用户来阅读文档或者只让有限的用户阅读文档。
  文档继承用来创建它的表单的读权限,任何被允许编辑文档的人都可以更改文档的读访问属性
8.3 基于域的安全控制
  每一个文档都有一些特殊的域用来控制对它的访问,这些域是读者域 reader fields、作者域author fields与签名域 signed fields。
读者域
  读者域可以在表单中创建来设置对文档的读访问限制,一个读者域将列出所有允许对文档进行读访问的名字它可以用来替代或者与表单/文档安全读存取列表一起工作,如果读访问列表与读者域同时存在那么谁能够阅读文档就由它俩共同决定,读者域不允许对数据库没有读访问权限的用户进行访问。不过它能够让那些在数据库ACL中可以正常阅读文档的某些用户不能够进行读访问。
  将一个域设计成读者域并且使它可编辑将允许文档作者看到名字列表列出的名字,可以从地址对话框数据库ACL视图对话框或作者手工输入中获得,有效使用读者域的方法是创建这个域然后列出用户与组来作者可以从中选择。
作者域
  可以在表单中创建作者域来给那些不是文档作者的人以作者的权力从而能够编辑文档,作者域也是要包含一个名字列表并且创建方法与读者域相同,作者域只对那些对数据库有作者权限的用户有效。
签名域
  在表单中创建签名域将允许文档在保存或邮寄时能够附带上数字签名。数字签名能够保证作者的真实性并且保证文档中的数据没有改变,用户标识符中的私有密钥能够生成签名,Notes通过比较数字签名与公用通讯录中的公开密钥来进行合法性验证。
8.4 基于代理的安全控制
1、作为WEB用户运行
  默认情况下,Web用户以代理创建者的权限运行代理。然而在Design选项卡的代理属性中选择“作为WEB用户运行代理”时,可以指定WEB用户代表自己(自己指创建者)运行代理。如果选定这个选项,系统会提示用户输入相关用户名和密码(已登录则不用)。
  然后根据用户名检查数据库ACL中的权限。仅仅通过Notes客户(不是WEB用户)就可以创建代理。只有共享代理才能运行在WEB客户上。WEB无调度机制,因此运行在WEB上的代理无法在预定义的时间运行。如果在代理创建过程中有设置代理何时运行,则该代理只适用于从Notes客户运行的代理。代理操作对象选项则对所有代理有效。并且代表session.currentusername的不同。
WEB不支持以下四个选项:
*视图中所有未读文档 *视图中所有文档 *已选定的文档    *粘贴的文档
在具体应用上比如设置了自动回复邮件,如果不是作为WEB用户运行,那么回复邮件就会标明发信者是代理签名者而不是真实用户。
2、设置运行时安全性等级 3、查看和运行此代理的缺省权限
以上两项一般设置选择第二安全等级
4、允许有公共权限的用户查看和运行此代理(只要可以访问此数据库的用户都可以查看和运行此代理)

你可能感兴趣的:(dom)