Lotus Notes程序设计随笔

 一、随处可得的文件

  这一篇是要响应某位匿名朋友的问题-何谓前端文件、后端文件、屏幕上看到的文件、内存中的文件、数据库中的文件?其实在前面几篇中,已经有谈到文件的观念,不过没有以这几个项目来做区分说明就是了,所以这部份我们就当作再次温习文件的观念吧!!再者,路哥认为这问题以一位初学朋友而言问得实在是很不错。而这问题我相信也是众多初学者的问题!!

  1.后端文件
  后端文件的产生基本上可以分成两种-透过套表产生与透过程序产生。前者当然是由使用者开启套表,并在相关字段输入数据后「储存」产生的。后者则是透过Lotus ScriptJava产生的,例如Set doc = New NotesDocument(NotesDatabase)……Call doc.Save(True, True)。您看看,这两者都有「储存」的程序喔,如果没有储存的程序,文件就不会在数据库中产生。当文件进入到数据库中时,我们就可以称它们为后端文件了。而在Lotus Script中是以NotesDocument类别来实现的。
  所以,只要是已经经过储存的文件,我们就可以统称为数据库中的文件。

  2.前端文件
  至于前端文件就很简单了,不管是新文件或是原本就已存在于数据库中的文件,只要是透过套表呈现到屏幕上的就都叫做前端文件。所以其实屏幕上看到的文件就等于前端文件,其主要的作用在与使用者达到互动。在Lotus Script中则是以NotesUIDocument类别来实现的。

  3.后端文件与前端文件的关系
  同一份文件会不会同时拥有前端文件跟后端文件呢?答案是「不一定」。
  在前面的随笔中有提过,利用套表开启一份新文件时(也就是前端文件),打开文件属性方块后是看不到什么较实际的信息的,因为还没经过储存程序,也就是说未储存的新文件就只有前端文件。
  但用套表开启一份已存在于数据库中的文件时,在屏幕上看到的就是前端文件,您在上面修修改改尚未储存的数据均可视为前端文件的部分。但此时开启文件属性方块,您可以看到此文件的相关属性与各字段数据,这部份则是属于已储存之后端文件的部份。若您在此时按下储存,前端文件的数据就会更新到后端文件中了。这就是前端文件与后端文件并存状况。
  至于在Lotus Script中怎么透过前端文件来取得后端文件呢?只要使用NotesUIDocument.Document即可,因为NotesUIDocument代表目前开启的前端文件,而Document则是指目前文件的后端文件。

  4.内存中的文件
  这部份麻,我想就跟Lotus ScriptJava程序设计有关了,我尽量解释您就尽量看看,能吸收多少算多少。
  在Lotus Script中有NotesDocumentNotesDocumentsCollection的物件。当您使用GetDocumentByKey方法取得NotesDocument对象,或是使用GetAllDocumentsByKey取得NotesDocumentsCollection的对象时,被取得之文件对象所包含的所有数据都会被储存在内存中,等待您进一步的处理。
  在前面路哥也提到过,若文件中有很多数据,则太多的文件就会造成内存的负担,所以,如果您只是很单纯的处理少数资料,就请尽量使用NotesViewEntryNotesViewEntries,因为内存只会储存文件在此视界的直栏数据,而不会储存文件的所有数据。

  5.结论
  文件是很抽象的观念,我稍微将它具体化一下,但并非一模一样。数据库就类似公文柜,视界就有点像是公文夹,文件类似现实生活中的公文。如果没有公文夹视界来将文件分门别类的保存起来,数据库就会像是一个摆放了一大堆杂乱无章文件的公文柜。
  我建议您可以再回到前面几篇温习一下,相信会有不同的感觉的。

  二、选择开启文件的套表

  回到咱们的进度上吧,在本篇随笔中,这一节算是唯一在进度上的一节。路哥好像没有谈到有进度吧,因为进度在路哥的脑袋瓜子里,呵呵。

  相信各位在看过前三篇随笔后,对文件跟套表的关系应该有一定程度的了解,所以接下来要为各位介绍的是,当您开启一份文件时Notes是如何决定要用哪一张套表来显示文件。

  不懂路哥在说什么吗?没关系,我就再稍微解释一下,Notes文件并非只能使用当初建立此文件的套表来开启,也就是说一份文件可以使用不同的套表来开启,而产生的结果就是在前端呈现的文件之排版与数据会不同。例如,有AB两张套表,A套表有两个字段-AAABBBB套表只有BBB字段。另外在数据库中有一份文件储存了AAA字段值111BBB字段值222。这时使用A套表开启甲文件时,您会看到屏幕上显示111222两个字段值。接下来再用B套表开启甲文件,此时您就只会看到222而已。也就是说同一份文件会因为套表上的排版与字段不同而有不同的显示。

  用最最最简单的实际例子来说明好了,假设路哥有两条牛仔裤,A牛仔裤的左边裤管剪了一个洞,而B牛仔裤则是在右边裤管剪了一个洞,当路哥穿A牛仔裤时就会露出左膝盖,穿B牛仔裤时则是露出右膝盖。即使你们会因为我穿不同的牛仔裤而看到不同的膝盖,但其实路哥本身还是有两个膝盖,并不会因为穿哪件牛仔裤而真的少了哪个膝盖。不过……路妈要是看到我穿这种牛仔裤,一定又会念说,你是没钱可以买裤子喔!!

  好回到正题,Notes是如何决定要用哪张套表来开启文件的。采用顺序为,套表与文件合并储存à视界的套表公式à Form字段值à数据库的预设套表。说明如下:

  1.套表与文件合并储存:这在随笔2中的第3页的倒数第三段有解说过,请自行回头参考。

  2.视界的套表公式:这个就要特别解释了,因为曾经有两位从软件公司出身的朋友同时问过我一个问题就是,如何在视界中依不同的条件来选择不同套表开启文件。其实满惊讶的,因为我觉得这是非常基础的功能,而且是必须知道的。所以在此特别说明,答案是视界的套表公式,在哪儿呢?就在写视界选择公式下面的那个「套表公式」。
简单来说,您可以写一行程序,假设A字段值=1时就用A套表开启,否则就用B套表开启。所以当A字段值有所变动时就会使用不同的套表来开启文件。个人觉得这功能虽然很少用,但是,却是很好用的功能。

  3.Form字段值:在Notes中有个保留字段叫做Form,而此字段值就是在储存用来开启文件之套表的名称,所以强烈建议使用Lotus Script建立新文件时都要指定此字段值(语法:doc.Form=”套表名称)。

  4.数据库的预设套表:在套表的设计属性的基础卷标下有一个「预设的数据库套表」选项,若勾选此选项后,前面所说的条件若都不成立时,就会采用勾选此选项的套表来开启文件。我想应该会有朋友问说,那要是有两张套表都有勾怎办?那您就勾勾看吧,呵呵。一个数据库只能存在一张预设套表,所以后勾的赢,也就是说若A套表勾了以后,B套表又勾,那系统就会自动取消A套表的该选项。
  好,讲到这边整理一下,当您开启一份文件时,Notes会先参照文件当初储存时的那张套表是否有勾选「套表与文件合并储存」属性,若有则采用该套表开启。若没有就会参照视界的套表公式,所以若您有写套表公式时就会依照该公式的条件来开启文件。若没有写套表公式,那就会参照文件中的Form字段值,若文件中此字段值有指定套表名称,就会使用该套表来开启。若没有则会参照最后的防线-「数据库的预设套表」。若数据库中没有预设套表呢?如果路哥没有记错,系统好像会出现「找不到套表」之类的错误讯息。不过也有可能记错喔,最近脑筋不太灵光呵呵。

  三、Lotus Script超基础观念

  这是路哥突发奇想的主题,相信初学者的您在看完此节以后,一定会非常有收获唷!!Lotus Script是以对象为基础的程序语言,还谈不上是完全对象导向的语言。市面上有很多书籍在谈对象导向,好像一开始都是用车子或飞机来当例子,可是路哥总觉得缺少了什么。所以长久以来路哥一直很想找出某种生活上的实际情形来与Lotus Script中的类别对象相对照,让初学者有很清楚的概念。在某天明月高挂的夜晚,终于让路哥顿悟了,就只差没成仙而已。因为是新的想法,所以各位这次就当作是路哥的白老鼠吧,感恩不尽,若有讲错的地方还多多海函 Orz

  在开始之前,路哥先声明不把所有的类别都拿出来讲,我只用了几个比较常用的类别,其余的就交给各位自行体会了。让我们开始吧!!

  Lotus Script的特点之一,就是有很明确的对象阶层,而且大部份每一阶层对象皆会包含下一阶层对象(NotesItem是最底层对象,所以只有方法与属性)。

  例如NotesSessionà NotesDatabaseà NotesViewàNotesDocumentà NotesItem
精采的来了,我的虚拟实景是:
  1.NotesSession = 地球,因为地球是一个大环境,包容各式各样的对象与数据。
  2.NotesDatabase = 台湾,因为每个国家就像是一个数据库,有很多的文件跟视界存在。
  3.NotesView = 县市行政区,每个县市可以视为一个view都是以现式的名称来将位于各地的房子筛选出来,所以NotesDocument=房子,如下说明。
  4.NotesDocument = 房子,因为房子有很多数据,像是地址就可以比做是UNID,因为地址绝对不会重复。
  5.NotesItem = 房子的基本数据,透过GetFirstItem就可以得到类似房子有几坪、户口数、在第几层等等的信息。

  所以呢,现在如果我们想要知道路哥房子的房间数,程序可以这样写:
  Dim 地球 As New NotesSession
  Dim 台湾 As NotesDatabase
  Dim 台北县 As NotesView
  Dim 路哥的房子 As NotesDocument
  Dim 房间数 As NotesItem

  Set 台湾 = 地球.CurrentDatabase
  因为我们现在在台湾,所以就用CurrentDatabase

  Set 台北县 = 台湾.GetView(“台北县”)
  假设台北县这个View是以户长姓名为第一直栏而且有排序

  Set 路哥的房子 = 台北县.GetDocumentByKey(“路哥”)
  既然是要找路哥的房子,当然Key值就是路哥

  Set 房间数 = 路哥的房子.GetItem(“房间数”)
  因为要查路哥房子的房间数,所以就直接去找房间数这个字段,此时传回值会
  是3,因为路哥的房子是三房两厅。

  举一反三,如果要找路爸的房子呢(不是路霸喔,是路哥的老爹啦哈哈),那就把Key值改成路爸,因为路爸也住台北县啰,这样就可以找到路爸的房子数据了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值