IBM Domino开发菁华
文章平均质量分 79
对IBM Domino的体系架构深入分析,介绍客户端和浏览器开发的设计和编码理念,分享经过实践检验的原创代码。
starrow
介绍
展开
-
Domino 10发布了,是起死回生还是回光返照?
自从上次发101. Domino 10 就要来了上ibm的网站,这么久一直没有再访问过。昨晚心血来潮,上Domino的官方网页一看,前两天刚刚发布新版本。这次ibm总算让人看到一些它对Domino的认真和重视,在法兰克福首发的视频有三个多小时长,有人像、有介绍、有访谈,有一如既往的对Domino的溢美之词,还在一群体态发福的中年男人的微笑注视下推出了一块大大的纪念蛋糕,并且有Watson和协作...原创 2018-10-12 15:12:36 · 1871 阅读 · 3 评论 -
101. Domino 10 就要来了
根据IBM网站上的公告,Domino V10将于2018年10月9日发布,为此网页上方还做了一个倒计时。说实话,我最近看到这些新闻时,是颇有些讶异的。距离2013年发布V9已经过去了五年,Domino历史上从来没有间隔这么长时间才推出新版本。包括我在内的很多人的判断都是9将成为Domino最后一个版本。导致和支持这种猜测的证据很多。Domino的市场份额持续走低,XPages也没有挽回颓势,IBM...原创 2018-09-04 08:01:40 · 4636 阅读 · 0 评论 -
99. Domino开发领域的动态
本文想根据国外的状况简略谈谈Domino开发领域的变化和动态。时间上从XPages的引入开始。XPagesV8.5.0引入了全新的XPages开发。在随后的小版本中,在性能上做了许多改进。从V9.0开始,将原来社区开发的Extension Library纳入产品。Extension Library中的控件补充了标准控件的一些功能上的空白,但是在设计端的易用性和文档的完善上,远不如标准控件,所以说使用原创 2015-10-11 11:43:40 · 4031 阅读 · 0 评论 -
98. 面向对象的LotusScript(十七)之LinkedCollection
面向对象编程经常会用到作为容器的对象,使用LotusScript时因为基本上是和单一的数据对象NotesDocument打交道,用作容器的就是数据库的视图或包含搜索结果的文档集合。但有时也需要某个通用容器来容纳其他自定义的对象。此时一般可考虑用数组,或者像20. 面向对象的LotusScript(三)之NArray介绍的编写一个基于动态数组的容器类。本文给出另一种容器的实现方式,对外的接口也像NAr原创 2015-03-24 14:54:45 · 3379 阅读 · 2 评论 -
97. 在LotusScript中模拟函数式编程
本文将介绍96. 通用字段修改器用到的在LotusScript中模拟函数式编程的技巧。函数式编程函数式编程是一种优美而强大的编程范式。它源于Alonzo Church提出的λ演算(Lambda演算),而某个问题能表示成Lambda演算,按照Church–Turing论题,等价于该问题在数学上是可以有效计算的。粗略地说,用对应于Lambda演算的一门函数式程序语言可以写出任何理论上可计算问题的计算程序原创 2015-03-10 15:33:15 · 3467 阅读 · 0 评论 -
96. 通用字段修改器
问题Notes应用程序在开发和使用过程中,因为测试、准备或修正数据,时常需要修改某些文档的某些字段值。这些字段或者因为在表单上不可见或不可编辑不能以通常编辑文档的方式修改,或者因为有多个文档需修改逐个进行太费时,都要求一种更直接方便地修改数据的途径。Notes数据库不像关系型数据库,有统一的查询和修改数据的SQL语言。要做同样的事,往往是建一个临时视图筛选出目标文档,或者在现有视图里手工选择,然后建原创 2015-03-09 11:15:41 · 3704 阅读 · 4 评论 -
95. 基于Notes/Domino的文档工作流系统(七)
本文继续剖析基于Notes/Domino的文档工作流系统的设计和代码,以方便用户能应用和创建自己的工作流。原创 2015-03-06 17:39:49 · 6443 阅读 · 0 评论 -
94. 基于Notes/Domino的文档工作流系统(六)
上文分析了我们的流程配置使用三类对象,分别对应三类文档:工作流配置文档、节点配置文档和操作配置文档。本文介绍三类配置文档的内容,也可以看作本流程系统的设置教程。这些配置文档的共同点包括:处于编辑状态时,必填字段的右边会显示红色星号(这实际也是整个系统的共同设计),保存文档时会对这些字段进行校验。许多字段既能输入静态值,也可输入公式以计算动态值。输入公式时用大括号包围所写的公式,即{formulas原创 2015-02-04 11:58:35 · 9265 阅读 · 0 评论 -
93. 基于Notes/Domino的文档工作流系统(五)
确定了流程引擎包含以下功能:校验必填字段。修改流程文档的权限,包括有关的读者域、作者域、存取控制区段。添加操作记录。修改配置的业务字段。发送邮件通知相关处理人。随后就要为其建模。此过程在用不同范式的语言开发时有不同的形式和术语。在C之类的过程式语言里,包括设计数据结构和自上而下的函数层次。用面向对象的方法时,就是要设计出类图。在我们的Notes环境里,基本上奉行的是“面向界面”的开发,确定了需要几原创 2015-01-20 10:20:11 · 6182 阅读 · 0 评论 -
92. 基于Notes/Domino的文档工作流系统(四)
现在我们以演示的采购工作流来研究工作流系统的设计。本文将讨论一个通用的工作流“引擎”包含哪些功能。通过需求分析和梳理,我们已经获得如下的流程图。由此可知该流程由一组状态、与状态对应的一组用户和流程处于某种状态时当前用户所能进行的若干操作组成。 接下来逐个分析这些操作。首先看IT部门的起草人填完采购单后提交。此时流程系统须做以下工作:校验必填字段。生成采购单号。修改采购单状态为Waiting For原创 2015-01-17 10:15:06 · 6015 阅读 · 0 评论 -
91. 基于Notes/Domino的文档工作流系统(三)
如前文所说,基于Notes的工作流系统之所以在Notes应用程序里长盛不衰,就是因为Notes平台适合开发此类系统。无论是政府和企业日常办公中的请假、用车、办公用品领用、人事招聘,还是企业生产经营过程中的采购、报销、设计审批,所有这些流程都可以建模为以文档为核心主要活动为用户审批的工作流。而Notes平台正有许多便利条件开发此类系统。我们以需求——设计——编码的顺序来研究这样的一个工作流。为了方便原创 2015-01-13 15:21:20 · 6209 阅读 · 0 评论 -
90. 基于Notes/Domino的文档工作流系统(二)
XPages下的工作流演示网页外观的可能性在技术上超过Notes客户端里的表单,Web应用程序在页面设计上花费的精力和取得的效果也远远超过基本保持传统客户端应用程序界面风格的Notes。我是程序员,不是设计师。在下面的演示里,页面都以展现功能为主,基本采用XPages的默认输出。按状态分类显示采购单的视图:采购单页面:单击Flow actions…按钮弹出的对话框:流程设置先来看看这个采购系统的流原创 2015-01-09 12:13:09 · 6383 阅读 · 0 评论 -
89. 基于Notes/Domino的文档工作流系统(一)
介绍Notes/Domino作为一个数据库系统和开发平台,具有许多与众不同的特点。这些特点使得它适于开发某些类型的应用系统(同时就不是开发其他一些类型系统的适宜平台),这其中就包括工作流。这里指的并不是如工作流管理联盟(Workflow Management Coalition, WfMC)制定的工作流标准(Workflow Reference Model)那样通用的工作流,而是一类以文档为中心的原创 2015-01-08 10:49:00 · 7895 阅读 · 0 评论 -
88. Notes客户端开发中的Java
回顾一下,在Lotus Notes杂谈专栏中,我陆陆续续写的关于Notes里Java编程的文章也有不少:6. Lotus Notes中的开发语言、8. 从Lotusscript到Java、22. 为什么要在XPages中写Java?、31. 怎样在Xpages应用中写Java、42. Lotus Notes中的垃圾回收之Java等等。这篇文章继续谈谈Notes客户端开发中的Java。用Java进行原创 2014-12-20 12:30:27 · 5371 阅读 · 0 评论 -
87. 再谈变体型Variant
在85. BASIC和LotusScript中的Variant一文中,我提到了BASIC风格的语言中的变体型Variant。由于下述种种原因,在LotusScript中经常要用到变体型。1. 函数的返回类型不能声明为数组,有此需要时只能用变体型。2. 自定义对象的方法不支持重载,需要传入多种类型的参数时只能用变体型。3. 数组变量不能整体赋值,例如从Split()或d原创 2014-12-17 10:22:21 · 7043 阅读 · 0 评论 -
86. LotusScript中的数组函数
R6对LotusScript有一些改进和增强,自那之后,Notes对象的接口时有补充和更新,但语言本身没有变化。那些改进就包括增加诸如ArrayGetIndex、ArrayUnique的有用函数。但在编程实践中,还有一些对数组的操作LotusScript没有提供原生的函数,好在基本上都能自己编写。下面的函数中用到的常数都在lsconst.lss或lserr.lss里定义,在脚本前要附加%INCLU原创 2014-12-16 11:03:44 · 6925 阅读 · 2 评论 -
85. BASIC和LotusScript中的Variant
缘起最近我回看以前记的关于Notes的笔记,发现在Notes bugs类别下,两条编号间隔一的竟然是相差无几的内容。2. 'Type mismatch' occurs if an nested array e.g. when an item of ColumnValues is an array, is assigned to a variant or passed as an argument原创 2014-12-02 11:09:39 · 4284 阅读 · 1 评论 -
84. 从视图索引说Notes数据库(下)
作用和代价上文介绍了关系型数据库里的索引。Notes数据库里的索引隐藏在视图概念里(本文的讨论只针对Notes的视图索引,不包含全文索引。)。开发人员创建的视图仅仅是存放在数据库里的一条设计文档,数据库引擎会依据它创建和更新索引。关系型数据库里的索引是从记录中抽取的数据排序而组成的数据结构(主要是B树),Notes视图的索引还包括未排序的列、计算值、分类、总计等等数据(数据结构仍然是B树,如果运气原创 2014-11-01 21:52:43 · 6754 阅读 · 5 评论 -
83. 从视图索引说Notes数据库(上)
索引是数据库系统重要的feature,无论是传统的关系型数据库还是时兴的NoSQL数据库,它攸关查询性能,因而在设计数据库时需要细加考量。然而,Lotus Notes隐藏技术底层,以用户界面为导向,追求快速开发的理念,使得“索引”鲜有开发人员提及,甚至了解。大家只论及视图,而当不同的人在不同的场合说“视图”时,所指各异。普通用户如果用视图一词,指的是显示一行行信息的列表;开发人员口里的视图,是数据原创 2014-10-30 14:21:05 · 4090 阅读 · 0 评论 -
82. Notes客户端Print相同信息到状态栏的问题
这可能是个微不足道的问题,不过其他人也应该遇到过。在Notes客户端用LotusScript的Print语句输出信息到状态栏时,如果多次调用传入的参数实际相同,状态栏只会显示该信息一次。例如:Print "a"Print "a"Print "a"不会输出三行a,而只有一行。如果作为参数的变量内容相同,多次调用也只会输出一次。例如:Print view.ToplevelentrycountPrint原创 2014-10-23 14:23:04 · 4238 阅读 · 0 评论 -
81. Domino视图Web展现技术胪列
以列表形式显示大量数据是各种开发中最常见和基本的需求之一。在数据保存在关系型数据库的Web开发中,程序员要处理的是分开的两项任务,一是从数据库中查询记录,二是在视图层生成显示这些数据的HTML。如何分页是主要问题。Domino以界面为导向的开发风格和不适于动态查询的文档型数据库使得程序员面临完全不同的处境和问题。预先设计的视图不仅定义了包含的文档,也设置了外观属性,集数据层和外观层的功能于一体。在原创 2014-10-15 17:14:21 · 6295 阅读 · 0 评论 -
版本控制、Git和Domino
版本控制一提到版本控制,程序员们就会想到他们工作中用到的各种源代码控制工具,Subversion、Git、Mercurial……实际上源代码之外的许多其他文件也会有版本控制的需要。而版本的想法和对其的管理更是在计算机出现之前的印刷以至手写时代就一直存在。版本是作品生长衍变的徵象。手写和印刷时代的文字作品之还仅是记录它的修改生长。及至计算机和电子文件出现,文件大小、内容复杂程度、版本更新速度都空前增原创 2014-09-06 12:20:42 · 6852 阅读 · 0 评论 -
80. Domino Internet Password
Internet口令保存在Domino目录的个人文档的HTTPPassword域中,和文档中的用户名一起用于藉各种Internet协议访问Domino服务器时的校验,最常用的就是通过Web访问应用程序,其他例如用POP3协议接收邮件,LDAP协议校验身份时,也是采用这组身份凭据。口令以秘文保存。在R6之前,加密口令的算法由@Password公式执行。自R6起,为了更高的安全,有了新的算法,可由@H原创 2014-07-25 21:49:15 · 5713 阅读 · 0 评论 -
投奔怒海——一个Domino老程序员眼里的Java开发
这是一个以键盘鼠标为谋生工具已十多年的人初次进行专门的Java开发的体验和感受,对于Java程序员,这些也许早就习以为常,那就把这当成从一个来自不同世界的新人眼里看看他们自己的工作;对于我的Domino同行,这些体验或许将来有更多共鸣的可能。在加入到这个Java产品开发团队之前,我的Java开发经验如下:十几年前跟着一本Java入门书做练习写的几个Applet,Domino项目开发中写的几个读写数原创 2014-07-25 18:25:39 · 11506 阅读 · 14 评论 -
Java、LotusScript和JavaScript中的自定义事件编程
面向对象的LotusScript(六)之为自定义对象模拟事件和面向对象设计与事件两篇文章都提到事件是编程时对很多场景的抽象和解决模式,核心就是在两个对象之间建立一种“提醒”机制,当某件事发生时,作为发布者的对象提醒称为收听者或预订者的对象,后者执行特定的操作。在汽车火车上,一名乘客甲请讬乘务员或者另一乘客乙到某站丙时提醒自己下车,就可以作为以上事件概念在生活中很好的原型。这里汽车到达丙站就是事件,原创 2014-03-03 11:41:34 · 10024 阅读 · 5 评论 -
79. 视图里的计算属性——从ASP、JSP、JSF到XPages的“钻石”
XPage文件里的几乎所有属性都可以设置公式来计算,这确实给应用程序的视图开发带来了极大的灵活性,不过这在Lotus Domino平台以外并不新鲜。用HTML或XML这样的声明性语言来定义用户界面,再辅以某种简单的表达式语言来设置计算的属性值,以实现动态的界面。首先采用声明性语言定义界面比用命令型语言简洁高效。其次单独的界面定义文件彻底贯彻了界面和业务逻辑分离的原则。最后利用表达式语言和事件绑定既清晰地实现了视图(view)和模型(model)之间的信息传递和控制转换,又保持了两者的独立性。这种良好的架构在原创 2014-01-28 10:31:39 · 4201 阅读 · 0 评论 -
78. Domino Designer 9.0.1升级无忧!
我昨天将DominoDesigner从9.0升级到9.0.1版本。这是一个维护版本(maintenance version),主要是修复bug,但是和很多主版本之后最初的维护版本一样,也有不少What's new?,对我来说不算吸引。经过几个小时的下载安装后,最大的惊喜却来自文档里没有提到的地方。用过8.5.X和9.0的朋友都知道,每次升级后,工作集(working set)、帮助文档里的书签还有原创 2014-01-09 17:49:54 · 5361 阅读 · 2 评论 -
77. Lotus Notes中编程发送邮件(三)之XPages中用Java发送邮件
在46. LotusNotes中编程发送邮件(一)和47.Lotus Notes中编程发送邮件(二)里笔者介绍了在Lotus Notes发送邮件的几种简单场景和需求,并给出了以LotusScript编写的通用代码。本文介绍可在XPages开发时使用的一个用于发送邮件的Java类,具备LotusScript代码的所有功能,且有更友好方便的API。这个类具备如下功能:发送Notes邮件。发送HTML邮原创 2014-01-07 16:27:53 · 6792 阅读 · 4 评论 -
76. Lotus Notes编程中的命名习惯
程序里实体的命名规则和习惯在一种开发环境里编程,会用到各种实体(开发中用到的从文件类型、程序的组织单元到数据库对象的种种对象,不用对象一词以与面向对象语言里的对象区分)。实体种类的多少,与所用语言和平台的复杂程度和特点有关。例如用像JavaScript的脚本语言就只会遇到对象、函数、变量等寥寥几种实体;使用Java时就会用到接口、类等更多实体;如果用到了数据库,又会涉及到诸如数据库、表和字段等相关原创 2014-01-06 15:49:48 · 4427 阅读 · 0 评论 -
75. XPages中Java开发的一些有用方法
在用Java进行XPages开发时,有一些常见的基础性的任务。这些经常要做的事部分与在Lotus Notes客户端开发时遇到的相同,例如获得当前Session和数据库对象,但是达成的方法与用LotusScript截然不同;其它则是XPages开发环境特定的需求,比如获得当前com.ibm.xsp.designer.context.XSPContext和RequestMap对象(即RequestScope变量)。将这些频繁需要的任务以静态方法的形式写在一个工具类里是很好用的:原创 2013-12-30 12:29:49 · 4521 阅读 · 1 评论 -
74. 面向对象的LotusScript(十六)之Html报表
需求与总体思路在《37. 面向对象的LotusScript(九)之导出Excel(一)》、《38. 面向对象的LotusScript(九)之导出Excel(二)》到《39. 面向对象的LotusScript(十一)之导出Excel(三)》几篇文章里,笔者谈了将MS Excel作为目标格式创建报表。虽然大部分情况下这都是不错的选择,也有些时候“报表”用其它格式展现更方便或适宜,包括网页甚至动态的Notes表格。原创 2013-12-24 14:04:59 · 3807 阅读 · 0 评论 -
73. Rebranding Lotus Notes
Lotus Notes的官方网站和这个软件平台一样坚持着向后兼容的原则,多少年来外观上鲜有变化,在不断改头换面美化重构的网站世界里显得像化石一样古老顽固。从R8推出以来,这个特点也悄悄发生了变化。跟随着整个产品线更加重视外观,努力跟上现代软件界面水平的脚步,网站也开始现代化了。先是和IBM其他产品的站点一原创 2013-12-18 11:32:09 · 2945 阅读 · 0 评论 -
72. XPages的文档数据源
在经典的Lotus Notes应用程序开发中,表单与Notes文档密不可分,在位于表单的代码里获取当前文档几乎是后续所有操作和运算的起点。在XPages里,页面和数据虽然在架构上是分开的,但是一个用作表单的XPage的数据源通常还是一个Notes文档,只不过在SSJS里可以直接使用的document1等变量对应的是一个Java的com.ibm.xsp.model.domino.wrapped.Do原创 2013-12-16 18:35:49 · 3971 阅读 · 0 评论 -
71. 从Lotus Notes表单到XPage——兼谈程序里的二进制文件和文本文件
本文对比分析了LotusNotes平台上两种视图技术。架构和运转过程的分析特定于Lotus Notes平台,其后的关于二进制文件和文本文件的讨论则具有普遍性。(严格地说,XPages指的是IBM基于Lotus Domino和JSF的快速开发技术,XPage则指单个页面,两者的首两个字母都大写。笔者一直遵守这个拼写上的规则。)架构XPa原创 2013-12-12 15:45:13 · 3979 阅读 · 0 评论 -
70. 在XPages中展现集合数据
数据绑定机制本文说的集合简单指多个具有同样结构的数据实体的总和,比如视图的部分或所有文档,查询数据库得到的记录集,一组模型(model)对象等等。在web应用程序里通常用表格来显示这样一个集合。作为基于组件的web框架,XPages提供了几种标准控件来显示这样一个集合:Repeat、View和Data Table。View用于显示一个Notes视图;Data Table以一个表格的形式显示一个集合原创 2013-12-05 17:43:14 · 4837 阅读 · 1 评论 -
69. XPages里的Java日志器
在48. 面向对象的LotusScript(十四)之Log4Dom上和49. 面向对象的LotusScript(十五)之Log4Dom下笔者介绍了一个简单实用的日志记录模块,代码用LotusScript写成,在Lotus Notes传统的客户端和web应用程序里都可以使用。在XPages开发里,需要可在SSJS或Java里使用的日志功能。用Java开发时,有很多现成的日志框架,比如Log4J和JD原创 2013-11-29 16:02:38 · 4120 阅读 · 1 评论 -
68. XPages里的动态非空校验
在67. 表单提交与校验里,笔者提到在一个表单提交的数据就绪给业务逻辑使用前,通常会经过转换和验证的过程,在用XPages开发时也不例外。当一个编辑框的value属性被绑定到一个DominoDocument数据源的某个字段时,Domino Designer会自动根据该字段在表单上定义的数据类型为这个编辑框添加合适的转换器(converter),比如日期类型的会被添加xp:convertDateTi原创 2013-11-22 17:57:05 · 3361 阅读 · 0 评论 -
67. 表单提交与校验
表单提交绝大部分应用程序都需要从用户获得输入,其中很大部分便是以表单输入的形式。一个表单,从用户输入系统接收到数据处理,会经历几个普遍的阶段。一个完备的表单提交流程具备以下几个不同阶段的功能:限制:根据字段的数据类型,表单对输入控件所接受的字符做限制。例如,文本类型的字段限制长度,数字类型的字段就不接受输入字母字符,日期时间类型的字段如果采取直接输入也可以限制输入的字符类型和格式。转换:系统按各字原创 2013-11-21 17:43:46 · 4845 阅读 · 0 评论 -
66. 在C#里模拟LotusScript里的字符串截取函数
LotusScript里的字符串处理函数在截取子字符串方面很方便好用。笔者数年前曾经比较三种脚本语言中的这类字符串处理函数,LotusScript的最全面实用。即使在C#这样新且类库设计优良的语言里,字符串类也没有类似的方法。 Vbscript Javascript LotusScript LotusScript里函数的功能 Left slice Left 截取字符串最左边的原创 2013-11-18 18:33:24 · 4330 阅读 · 0 评论 -
65. XPages自定义控件(三)高级搜索之三
RecordView控件的两个文件的完整代码在本文末尾给出。虽说完整,仅靠这两个文件,RecordView控件还不能正常工作,因为在这两个文件里还引用了其他自定义控件,调用了作为managed bean的starrow.xsp.App的方法,即使把这些代码也都全加上,仍然不是自足的,因为在starrow.xsp.App类里,又调用了其他辅助类的代码。所以这两个文件的代码不像笔者在以前很多文章中给出原创 2013-11-14 15:36:53 · 3904 阅读 · 0 评论