Domino代理可以设定以web用户身份执行或者以签名者身份运行。但有时也会有这样的情况:代理需要以web用户的身份来处理一些东西,但是其中又有部分代码web用户的权限可能不够,需要以签名者身份执行。比如在myview的翻页修正处理中,需要以web用户身份来获取有权限查看的文档,又可能需要创建视图,而普通的用户是无法创建视图的。

最后采用这种方案:代理A还是以web用户身份运行,将创建视图的代码写到另外一个代理B中,代理B以签名者身份运行;然后在代理A中调用代理B,完成创建视图的操作。具体实现是使用notesAgent的run方法:

status = notesAgent.Run( [ noteID$ ] )
Parameter
noteID$
String. Optional. The note ID of a document. The value is passed to the ParameterDocID property of the called agent.

调用之前先将参数写到一个文档中,然后将这个文档的noteID传给代理B,代理B使用ParameterDocID属性获得noteID,获得参数、执行完操作、删除临时的参数文档,再返回代理A继续执行。

如果在Domino的页面中使用了@username公式(还有@UserRoles),会发现即使每次使用不同的用户来访问这个页面,公式计算的结果一直是之前的某个人。不知道是Domino对页面作了缓存还是什么其它的原因。目前我的解决方法是,在某处加一个@now的公式,每次访问的时候Domino好像就会重新计算了。

有时我们常常在客户端上打开不是位于数据目录下(LOTUSNOTESDATA)的数据库,往往所使用的通常的方法是:菜单“文件- 数据库 -打开”,再使用浏览的方法找到所需的数据库文件,那么,有时我们打开的数据库比较多,并且常使用的数据库都在同一个目录下,使用如上的方法就显得比较繁琐,现在提供一个更快捷、更好的方法。

  • 先在数据目录(LOTUSNOTESDATA)下创建一个文本文件,并以.dir为后缀名,例如叫做 MyFav.dir。
  • 编辑此文件,文件内容为所需指向的目录的路径,内容只有一行,然后保存该文件。例如:C:mycollectionnsf.
  • 再选择菜单“文件- 数据库-打开”。
  • 在数据库列表中就会发现一个叫做MyFav的文件夹。
  • 双击打开此文件夹后就是位于C:mycollectionnsf下的数据库列表。

    引用自Oaunion,经测试可用,是个不错的方法哟

  • 现象:做字符串比较、包含相关的操作无法得到正确的结果。

    解决方法:

    • 检查当前操作系统的语言设置
      • 使用locale命令来查询当前的语言环境
    • 设置Language Pack的语言环境。
      • 前面安装Domino的过程我就不说了。安装完Domino之后,还需要安装Language Pack。在LP的readme.txt文件中,注明了各种操作系统下面需要使用的语言和字符集,以Linux为例,需要设置为zh_CN.GB2312。
      • 操作如下:

    LANG=zh_CN.GB2312
    LC_ALL=zh_CN.GB2312
    export LANG
    export LC_ALL

    • 安装Language Pack
      • 运行install来进行安装,在安装过程中注意选择中文。
    • 设置notes用户的语言环境
      • Domino不能用root账号来启动,必须使用notes(安装Domino时候设置的账号)来进行启动。由于我们设置了当前的语言为中文,采用GB2312的字符集。所以该notes用户的语言环境也需要设置为zh_CN.GB2312
    • 修改profile文件
      • 到domino运行账号(notes)的home目录下去(/home/notes),然后编辑.bash_profile文件,添加如下行

    LANG=zh_CN.GB2312
    LC_ALL=zh_CN.GB2312
    export LANG
    export LC_ALL
    然后重新使用该账号登录系统,启动domino即可!

    我们一般使用“date -s”命令来修改系统时间。比如将系统时间设定成1996年6月10日的命令如下。

    #date -s 06/10/96
    将系统时间设定成下午1点12分0秒的命令如下。
    #date -s 13:12:00

    注意,这里说的是系统时间,是linux由操作系统维护的。
    在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS时间的一致性,Linux每隔一段时间会将系统时间写入CMOS。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date -s后,如果马上重起机器,修改时间就有可能没有被写入CMOS,这就是问题的原因。如果要确保修改生效可以执行如下命令。

    #clock -w

    这个命令强制把系统时间写入CMOS

    在国华项目中曾经遇到这样一个问题:

    需要将OA系统中完整的发文处理单导入到档案系统中。考虑到OA系统中的处理单并不是独立存在的,而是文档的数据+表单的样式,决定将样式写死在代理中,然后用文档数据填充。

    这样难点就在于怎样把其中的手写批示图片文件传输过去,经过分析发现MS的MHT格式恰好能满足这个要求,他将网页相关的所有文件都存在一个文件里,其中图片等二进制文件采用Base64编码存储。
    我们使用Ls将手写批示图片剥离到服务器的临时目录,再进行Base64编码,与处理单的HTML保存在一个MHT文件中。至此,问题得到了解决。

    此处有一个高性能的实现,处理大文件每秒几MB。

    浏览器的请求的地址在交给服务器前会对其进行编码,像空格、%、汉字都会被编码成%XX的格式,我们在服务器端如果要取得原来的字符就要进行解码。

    Domino提供了一个query_string_decoded域用来获得解码过的字符,但是在使用中发现有些字符通过这个域无法获得(我遇到的是“砚”字,听说还有其他字也获取不到)。

    解决方法是用query_string获得未解码的字符,在用一个函数自己来解码。下面就是一个解码函数,在国华项目中使用没有问题。

    继续阅读