在OpenView、ReadViewEntries命令中,使用RestrictToCategory参数可以只显示一个分类。

但是这个方法有一个问题:比如你指定了显示“ABC”分类,而“ABC”这个分类是空的,那么Domino会显示第一个以“ABC”开始的分类,比如“ABCD”。这有点像byKey查找中的非精确匹配。在IBM网站上有提及这个问题,并且说原本就是这样设计的,并非Bug。同样存在问题的还有嵌入视图的显示单个分类选项。

可以用如下方法绕过这个问题:在分类列值的最后追加一个“~”,这样“ABCD~”就不是以“ABC~”开头的,这个问题也就不存在了。

我们知道Compact程序可以由以下方式触发:

  • Names中的程序文档
  • 控制台输入Compact命令
  • Notes端在数据库属性页上点击压缩按钮

但是有些时候我们发现除了上述的几种发式,Compact程序会自己运行,而且频率相当高。这种情况可能是由Event4数据库中的 Event generator 文档引起的。这个文档可以在数据库使用率达到设定的值时产生一个事件,如果同时选择了自动压缩数据库就会运行Compact命令。而如果某个数据库出了问题无法压缩,这样每次检测都会导致Compact命令运行,这就是每过一格时间间隔就自动压缩数据库的原因。

我们都知道readviewentries命令可以直接把视图内容以XML的形式返回。这种方法效率不错,而且返回的XML可以让我们自由的组织。无论是重新显示成列表,还是获取其中的数据以其他方式展现,都很方便。但返回的XML文件只有文档的数据,并没有每一列宽度、排序等设计信息。使用readdesign命令就可以弥补这一点,返回数据大概是这个样子:

  <?xml version="1.0" encoding="UTF-8" ?>
<viewdesign rowlines="5" direction="0" spacing="1" columns="4" totalscolor="#0000ff" altrowcolor="#EFEFEF" extendlastcolumn="false">
<column columnnumber="0" width="109" name="$54" title="日期" sort="true" sortdescending="true" resortdescending="true" resortascending="true" resize="true" format="2" listseparator="none">
  <cfont style="r" size="9" color="#000000" face="Helvetica" />
  <hfont style="b" size="10" color="#000000" face="Helvetica" />
  <numberformat digits="0" format="general" />
  <datetimeformat show="datetime" date="yearmonthday" time="hourminutesecond" zone="never" year4digit="true" />
  </column>
</viewdesign>

XML文件中包含了几乎所有的设计信息。不过这个命令在文档中找不到的,其实像这样的东西还有很多啊。。。

notesViewEntry.ColumnValues属性有这样一个特性:当某一列的列公式是一个常量时,他的列值是不会包含在ColumnValues数组里面的。所以如果想要让他能包含在ColumnValues数组里面,就需要在公式中和某个域扯上关系,如:@If(@Text(fldCbsj)="";114;114) 就可以了。

遇到不知原因的错误信息,可以到下面的地址来找找,没准就有你想要的东西。 

http://codestore.net/errors.nsf/

下面是一条样例:

Full Error Message:

Lotus Notes Exception – Special Database Object cannot be located

Synopsis:

Usually when opening documents in the web.

Suggested Causes and Solutions:

Usually due to the database not having a defualt form and you try to open a document without a correct form in the "Form" field or no "Form" field at all. Can also be caused by URLs ending in "$help" and there being no "Using this database" document created or if the "on web launch" property is set to open the "About Database" page and this has not been created yet or you use "$DefaultView" in a URL and a default view has not been specified

无意中看到Names库中的一个用来查找服务器的视图,他把简名、带层次名、带组织结构的全名作为列表放在第一列,再将多值分开显示,这样用这三种名称中的任意一种就都可以查找到服务器。如下图:

viewforlookup.jpg

这是一个不错的思路。可能存在的一个问题是会使视图变大,但是他往往能让我们绕过代理繁琐的处理,简化处理的逻辑,一般情况也不会有更低的效率,甚至有更高的效率。在实际开发中也有了几处应用:

一是在检查日程安排时,比如开始日期是11日,结束日期是13日,就可以将这个范围分开显示成11、12、13三行,好像在这三天分别建了一条文档一样,这样就可以把跨天和不跨天的统一起来了。

二是在构建地址树时,将用户所属部门的祖先部门也做为一个值,这样就好像其祖先部门下也有这样一个用户一样,达到了包含非直属部门人员的效果。

在Domino6的时候,如果发现一个代理执行缓慢,想要定位影响速度的语句,往往是采用分段Msgbox来不断缩小范围,直到找到问题所在这种方法的。Domino7加入了代理简要表的功能,让我们可以非常方便的定位代理执行缓慢的问题所在。具体方法请往下看。

继续阅读

escape() 编码对 UTF-8 支持的不太好,我们应该用 encodeURI() 或者 encodeURIComponent() 来取代 escape() 。不过 encodeURI() 和 encodeURIComponent() 都需要 IE 5.5 以上才支持,FireFox 则完全没有问题。

        以下是 MSDN 对这三个编码函数的解释:

escape(charString)

escape 方法返回一个包含 charstring 内容的字符串值(Unicode 格式)。所有空格、标点、重音符号以及任何其他非 ASCII 字符都用 %xx 编码替换,其中 xx 等于表示该字符的十六进制数。例如,空格返回为“%20”。

字符值大于 255 的字符以 %uxxxx 格式存储。

注意 escape 方法不能用来对“统一资源标识符”(URI) 进行编码。

encodeURI(URIString)

encodeURI 方法返回一个已编码的 URI。如果将编码结果传递给 decodeURI,则将返回初始的字符串。encodeURI 不对下列字符进行编码:“:”、“/”、“;”和“?”。请使用 encodeURIComponent 对这些字符进行编码。

encodeURIComponent(encodedURIString)

encodeURIComponent 方法返回一个已编码的 URI。如果将编码结果传递给 decodeURIComponent,则将返回初始的字符串。因为 encodeURIComponent 方法将对所有字符编码,请注意,如果该字符串代表一个路径,例如 /folder1/folder2/default.html,则其中的斜杠也将被编码,这样,当该字符串作为请求发送到 Web 服务器时它将是无效的。如果字符串中包含多个 URI 组件,请使用 encodeURI 方法进行编码。