|
十一、自我提升
当我写下这个标题时感觉有点心虚,因为好像在灌水,呵呵。不过相信接下來Louis所說的,绝对是让各位初学者非常受用的。
一般刚开始开发Notes AP时,相信大部分使用者提出的需求都是主管去谈的,而您绝对是伤透脑筋在想功能写程序的那个人。虽然这是很一般的程序,但对于您的未來其实不見得是好处。虽然可以写出一支令使用者满意的AP绝对是一件很了不起的事,但是当您完成这支AP以后除了学到很多程序技巧与成就感以外,您还获得了什么?这是非常值得思考的一件事。
Notes的精髓在于签核流程的开发,而签核流程的精髓则是各产业的Domain Know How,也就是各产业的专业知識。所以当您接下主管交付的需求后,并非一味的埋头苦思程序该怎写、功能该怎开发,更重要的是去了解此系统的真正目的是什么、流程为什么要这么跑、使用者在签核底下的作业是什么。所以您应该再找机会去跟提出需求的使用者了解他们的作业程序,进而从他们的脑袋裡学习他们領域的专业知識。
其实,我常常在跟使用者谈需求的时候,即使懂也装不懂,很有禮貌的请使用者重头讲一次,反正被骂笨也无所谓,因为目的已经达到,大不了晚上抱着枕头哭一下就好了,隔天又是好汉一条,哈哈。
当您在各产业待过以后,这些知識就会逐月逐年累积成为您的宝藏。而这些宝藏将会在以后成为您闯荡江湖的宝刀。因为往后当您在与使用者谈需求时,由于您的宝藏取之不绝用之不尽,频频点头称是的将不再是您而会是使用者。
我相信应该很少朋友希望自己永远靠写程序维生,尤其到了一定年纪以后,写程序反而是一种负担。所以接下來赖以维生的将会是您的Domain Know How,帮您赚钱的绝对是您的脑袋与口才,而不是写程序的技术。这时应该要很高兴您不是修计算机的信息人员,而是写Notes的人员。所以,趁现在赶快累积您未來的财富吧!!加油!! 加油!! Go!! Go!! Go!!
十二、视界
在随笔(二)中,Louis跟各位讨論到文件与套表的关系,所以接下來,我们就來谈谈视界吧。
视界这个设计组件,很多人都会把它拿來跟RDB(关聯式资料库)的table作比较。其实是有那么点像,所以在ND7才会改良出SQL Query视界这玩意儿。不过,撇开视界与table的比较,视界的主要功能是为了有系统的整理资料库中的一大堆文件,将这些文件中的关键信息分门别類的「显示」出來,好让使用者可以快速找到他们所需要的信息。所以您要說视界是由一大堆文件所组成也不为过。但因为是给使用者使用的,所以在设计一个视界的时候,最好可以先与使用者讨論清楚,否则被要求重排视界的可能性非常的大。
不过,若从设计面來看,视界应该說是由直欄所组成,毕竟没有直欄的视界是没有任何用处的。在前面,我曾经把「显示」这兩个字特别标出來的原因是,直欄除了可以直接显示文件的欄位值以外,您也可以透过直欄公式來处理多个欄位值后再将其显示出來。也就是說,处理过后的直欄值并非储存在文件中,而仅供「显示」。优点在于,您不用在文件中放一大堆计算欄位來储存一些只为了「显示」用的數值。但缺点是,若直欄中有太多的计算公式,则视界的负担就会加重,因为它必须要计算每份文件的欄位值。当文件數量很多时,其负担是可想而知的。
我想大部份的初学朋友都知道「视界选择」这玩意儿吧,这玩意儿讲明白一点就是透过您指定的条件來筛选要显示在此视界的文件。最不严谨的条件当属【select @all】,因为它会将资料库中所有的文件通通显示在此视界中。最常看到的条件应该是【select form=”套表名”】,视界会根据您所指定的套表名來搜寻并显示使用此套表建立的文件。当然您也可以搭配更多的条件设定來更进一步筛选文件,像是某个欄位等于、大于,或小于某个值。
有人可能会发现在「视界选择」下面有个「套表公式」,Louis曾经遇到一位我觉得还不错的程序设计师,但他却从來没用过「套表公式」。这真的是很重要的功能,但我要在此卖个关子,之后会搭配其它功能來說明。
另外,如果您已经熟悉公式与Lotus Script的话,相信您一定常用到@DBLookup、@DBColumn、GetDocumentByKey、GetEntryByKey…等等搜寻類函式与方法。使用这類程序的第一要件当然就是要把视界中的第一直欄设定为排序。不过,Louis要讲的重点不是这个,我要讲的是当您在设计视界时,请尽量将程序用的视界与使用者用的视界分开,因为当资料库中有很多视界时,若您共享这兩种视界又没特别注明的话,哪天使用者要求您重排视界,结果运气不好的您移动到程序用视界的第一直欄,那就糗大了,因为一定会有程序找不到符合的关键词资料,而这很有可能让您花上大半天去找虫虫何在。至于要怎标示,把视界名称括号起來就好了,要不就在视界属性的注明欄位注明。不过Louis偏好前者,因为前者可以把视界隐藏起來,也就是說,当使用者按下【检视】??【移至】也看不到那个视界,除非他们知道按下Ctrl + Shift +【检视】??【移至】。
既然刚刚提到GetDocumentByKey与GetEntryByKey这兩个method,就顺便提一下这兩者的差别。如果您曾使用侦错器观察的话,就会发现前者是传回文件对象,所以理所当然会把文件中的所有欄位值还有一堆属性通通抓出來,而后者就只会抓到视界中直欄值。这有什么影响吗?当然有影响啰!使用GetDocumentByKey与GetEntryByKey可能还察觉不出來,当您使用GetAllDocumentsByKey与GetAllEntriesByKey來传回上百笔的资料,相信您就可以察觉到Server Loading的不同了。
十三、资料夹
既然谈到视界,就不得不來谈资料夹。这裡的资料夹当然不是指Windows的资料夹,Louis要說的是Notes的设计组件之一的那个资料夹。资料夹跟视界非常之像,我们可以說它们是龍凤胎也不为过,因为最明显的差别在于”视界选择”。ㄜ..没有「视界选择」那怎筛选文件啊!?既然没有「视界选择」当然就是有其它的方法可以筛选啰。资料夹筛选文件的方式可以透过程序或使用者手动筛选(复制或剪下,然后贴上)。换句话說,资料夹内的文件主要是由程序或使用者手动置入的。
资料夹应用的最彻底的当属邮件资料库了,收件匣各位应该很熟悉吧,它老兄就是资料夹而不是视界,从R5 的邮件资料库可能还看不太出來哪些是资料夹,哪些是视界,但从R6的邮件资料库就比较容易分辨了,因为它多了一个「视界」的展开项目,在裡面的全部都是视界。不过在「视界」的展开项目以外还是有视界的。若要真正去辨别的话,还是要从Notes Designer比较明确一点。
先来解释「手动」放文件到数据夹的观念吧。假设A视界与B视界的视界选择条件一样,其所筛选出來的文件其实都是同一份文件。但是,当您在C资料夹与D资料夹中各看到一份几乎是一模一样的文件,在资料库中它们『可能』不是同一份文件,而是兩份文件,原因在于资料夹是独立的个体,所以手动个别贴上的话就会是两份文件。简单來說,资料夹的文件是被「放」进去的,视界的文件是被「筛选」出來的。这样您应该就懂了吧,再不懂,那就请您去邮件资料库多玩几次复制或剪下,然后到处贴上的游戏啰。好吧,再鸡婆举例說明一下:
1.当您从A视界中复制一份文件,然后贴到C资料夹,此时C资料夹有一份文件,D资料夹会是空的,A视界则变成兩份文件。
2.再到D资料夹贴上那份文件,这时C资料夹还是只有一份文件,D资料夹当然也只有一份文件。但是,回过头來看原來的A视界,您会发现A视界中会变成三份文件。
3.这三份文件=原來的文件+C资料夹的文件+D资料夹的文件。其实从文件属性中可以看到这三份文件的UNID其实是通通不一样的。
以上都是手动放文件到数据夹的观念,接下来就是「程序」放文件到数据夹的观念了,使用NotesDocumentCollection.PutAllInFolder将文件放到数据夹中时,文件并没有增加,因为PutAllInFolder并不是「复制->贴上」文件,而是帮助数据夹「筛选」出符合条件的文件再「显示」出来。所以来源视界与数据库中的文件是不会增加的。
资料夹有一个很好用的功能-排序。当您使用GetAllDocumentsByKey从视界取得某些文件时(NotesDocumentCollection),这些文件并不会按照原视界的排序一份份排好,所以如果当您的需求是要「依照某种顺序」來处理这些文件的话,您可以先建立一个资料夹,并将此资料夹的排序设定成您想要的,再用PutAllInFolder方法把文件通通「显示」到里面进去,这样您的文件就会照顺序排了。不过请记得,处理完请务必记得再使用RemoveAllFromFolder把那些文件从资料夹删除。否则这资料夹中的文件会一直增加,这样就会造成之后所处理的文件不是当次放进去的文件,而是累积已久杂七杂八的文件。
|