Software 版 (精华区)

发信人: checcy (老巴夺), 信区: Software
标  题: 使用Notes C API开发应用程序 
发信站: 哈工大紫丁香 (Sat Apr  4 15:55:58 1998), 转信

使用Notes C API开发应用程序 

郭蓓 
  零售业会因网络计算时代的来临而发生深刻的变化。
———JimGreen

  熟悉群件Notes的人都知道,Notes最常用的开发工具
是其内置的公式和Lotus Script语言。这两种方法简单易
学,尤其是Lotus Script与VB类似,很适合一般的客户端
开发需要。但是,如果需要完成Notes数据的引入引出,收
集统计数据,编写服务器上的“任务”(task)等与其他
系统打交道的应用,以上两种开发手段就会显得力不从心
。下面介绍一下Notes C API,这是一个底层的,功能强大
的开发工具,比较适合高水准,要求复杂的开发。

  Notes C API能做......

  Lotus Notes C API是750多个函数和数据结构的集合
。这些函数都是由C语言写成,可以在C程序里直接调用。
利用Notes C API开发的应用程序可以实现Notes用户界面
的大部分功能,也可以实现不能直接由用户界面完成的一
些操作。具体的说,Notes C API提供的最常用的功能有
以下几种:

  ●从底层创建,删除整个数据库;在两个数据库之间
,复制数据库的各种元素(宏、表单、视图、图标等等)


  ●读、写、修改一个数据库中的任何文档、一个文档
中的任何域值;对文档和域值可以做任何操作。

  ●对数据库的设计元素有强大的访问功能。可以创建
、使用数据库索引和创建使用Notes视图及索引;可以读
取视图中的文档;随心所欲地创建表单和布局区域;创建
宏,并从API程序或Notes中运行它。

  ●通过使用定时的API程序,检索和操纵数据库的信
息。

  ●可以对Domino服务器的管理特性进行访问。收集、
统计、报告Lotus Domino服务器的性能数据,设置数据库
的可访问用户名单,控制数据库特权属性,产生服务器软
件中的“事件”,取消已由你产生的“事件”。

  ●用户可以用它编写Add-ins,扩展Notes软件的能
力。Add-ins可以在Notes的工作站上运行,提供下拉菜单
让使用者选择功能;也可以在Domino服务器上编写成常用
的“任务”,并加入到Lotus Domino服务器的通用“任务
”中运行。

  Notes C API不能做......

  任何一种开发工具都有一定的缺陷,Notes C API虽
然可以算得上Notes功能最强大,效率最高的开发工具,但
仍不是十全十美。

  ●不能修改Notes本身现有的软件,也不能去除Notes
本身的工作方式。比如,Notes C API不能改变Notes编辑
器的操作,不能删去帮助菜单等等。

  ●不能直接改变数据库的复制历史,用户操作日志或
是数据库的图标。

  ●不能访问Notes工作站的安全性选项或是用户执行
控制表ECL。

  ●不能修改Notes的工作台。比如,不能从工作台增
添、删除数据库图标,不能改变工作台页面的名字,不能
创建私有视图,当用户阅读视图时不能动态选择视图中的
文档。

  Notes C API的经常应用

  使用Notes C API可以创建各种不同的应用,但最适
合,最常用的是以下几种:

  ●创建Notes的引入,引出程序。文件引出程序通常
是读一个数据库,选取一部分文档,并把它们转变成一定
的接受方兼容的格式。文件引入程序通常是读一个非Notes
的MIS数据库,然后根据MIS数据库提供的信息产生Notes
文档。

  ●定期维护数据库。例如,你可以写一个程序,定期
扫描某一类文件,一旦该文件的某一属性符合实现定好的
条件,就把它移入存档数据库。

  ●用现存的数据库里的数据创建新数据库。比如,为
公司编写一个程序,读取每个部门数据库的内容,然后产
生一个汇总全公司信息的新数据库。

  ●在程序运行过程中按照一定的标准设计数据库。例
如,可以编写一个程序,一旦接收带有数据和用户名单的
邮件后,马上创建一个新数据库,设计表单和视图显示邮
件数据,并把用户名单加入到数据库的用户存取表中。

  ●使用Notes C API的程序可以和其他使用产品API的
软件协同工作。比如,你可以使用API从关系性数据库中
读取数据,然后使用Notes C API把数据写入Notes数据库


  Notes C API应用举例

  Notes C API的程序格式有七种,核心代码基本相同
,开始和结束不同。每一种的具体针对的用途也不尽相同
。主要是:独立的应用,Domino服务器Add-ins, Notes工
作站菜单Add-ins, Notes工作站引入引出库,数据库外
挂驱动程序(hook driver),扩展管理器的外挂库,外部数
据库(非Notes)驱动程序。其详细的格式和说明可以查
阅相关手册,在这里不能一一说明。

  下面举的例子是一个独立的应用,运行时不需要Note
s工作站运行,已在Windows NT 4.0,Notes 4.6环境下测
试通过。它的功能是向Notes引入其他系统的文件,格式是
纯文本。运行该程序前,必须做以下准备工作:安装Note
s C API, 在notes/data目录下建一个名叫in.nsf的数据
库,在库里设计好表单simple和域subject, body。

  核心代码如下:

  Include <... > 略

  void main(int argc,char *argv[])

  { char path—name[]=″c:/notes/data/in.
nsf″;

   /* pathname of database */

  DBHANDLE db—handle; 

   /* database handle */

  NOTEHANDLE note—handle;

   /* note handle */

  STATUS error ; /* return code from API c
alls */

  FILE far * fp;

   char title[200];

   char body[10000];

  struct—finddata—t c—file;

   long hFile;

  /*初始化Notes*/

   error = NotesInitExtended (argc, argv); 

  if (error)

   printf(″%s″,″init error″); 

   C代码略

   打开某目录下的文件,读取标题和正文,分别放在
变量Title, Body中 

   /*打开Notes数据库*/ 

  if (error = NSFDbOpen (path—name, &db—handl
e))

   printf(″%s″,″dbopen error″);

   /* 用指定表单建立新Notes文档 */

  if (error = NSFNoteCreate (db—handle, &note
—handle))

  { NSFDbClose (db—handle);

   printf(″%s″,″notecreat error″);

  }

   if(error=NSFItemSetText(note—handle, 

   ″FORM″,

   ″Simple″, 

   MAXWORD))

  { NSFNoteClose (note—handle);

   NSFDbClose (db—handle);

   printf(″%s″,″set error″);

  }

  /* 为域subject , body赋值*/

   OSTranslate(OS—TRANSLATE—NATIVE—TO—LMBC
S,buf2,sizeof(buf2),title,sizeof(title));

  if (error = NSFItemSetText ( note—handle, 

   ″subject″,

   title,

   MAXWORD))

  { NSFNoteClose (note—handle);

   NSFDbClose (db—handle);

   printf(″%s″,″set title error″);

  } OSTranslate(OS—TRANSLATE—NATIVE—TO—LMBC
S,buf1,sizeof(buf1),body,sizeof(body));

   if (error = NSFItemSetText ( note—handle, 

   ″body″,

   body,

   MAXWORD))

  { NSFNoteClose (note—handle);

   NSFDbClose (db—handle);

   printf(″%s″,″set body error″);

  }

   /* 在数据库中添加新文档*/

   if (error = NSFNoteUpdate (note—handle, 0
))

  { NSFNoteClose (note—handle);

   NSFDbClose (db—handle);

   printf(″%s″,″update error″);

  }

  if (error = NSFNoteClose (note—handle))

  { NSFDbClose (db—handle);

   printf(″%s″,″close db error″);

  

  /* 关闭数据库 */

   if (error = NSFDbClose (db—handle))

   printf(″%s″,″db close error″); 

   printf(″\nProgram completed successfully.\
n″);

   NotesTerm();

   }

  OSTranslate函数的应用是一个技巧,它可以把操作
系统的字符集转变成Notes自己的字符集LMBCS。否则,文
件引入Notes后,中文可能会出现乱码。-- 
*********************************
Chengyan Che - Software Freelancer
Harbin, P.R.China
mailto: checcy@public.hr.hl.cn
ICQ: 5116726

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: checcy@public.hr.hl.]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.395毫秒