




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Notes程序设计随笔 文章作者 李建壹Lotus Notes程序设计随笔(一)文章作者:李建壹发布时间:文章来源:Lotus爱好者论坛一、前言许多初学Lotus Notes(Lotus Notes以下简称Notes)的朋友常常会因为Notes学习范围太广、教育训练课程太贵、中文资料太少?等等因素,而不知该从何开始入门学习。不过因为这些因素而放弃的话,其实是非常之可惜的,毕竟Notes的功能及其整合性在群组软件领域中,仍然是领先其它群组软件的佼佼者。Louis为了让许多初学Notes的朋友可以快速上手,所以决定着手撰写此系列的文章,希望以最浅显易懂的白话文来为初学者建立Notes程序设计最基本的观念(但会不会中断不敢保证:p)。不过既然是随笔,所以一些顺序的编排就不会那么的有系统。另外,在章文中虽然偶尔会提到一些技术观念,但并不属于高深的技术文件,纯粹只是观念养成的文章。若您想进一步了解文中提及的观念时,Louis强烈建议直接参考Notes程序设计说明资料库。当然,本系列文章中若有讹误还请各位前辈高手多多指教。二、Notes学习方向Notes的学习方向主要分为程序设计与系统管理两部份,一般通称为Notes AD(Application Development)与SA(System Administration),而这也是IBM官方的说法。不过,有时候AD也有人称为AP,而SA则常会与IT界常用的系统分析(System Analysis)搞混,所以在与其它朋友交流时可千万不要鸡同鸭讲。但不论是Notes AD还是SA的知识,这两者并无明确界线,而且两者其实是相辅相成的。以ACL的设定来讲,就无法明确归纳至AD或SA任一范畴,因为不管是在开发应用程序(应用程序以下简称AP)或是管理Domino系统,ACL的设定都是必须的常识。另外,在开发Web AP时,为了让浏览器使用者可以正常浏览存取Web AP的内容与资料,也须要先在服务器上做一些设定,而这也是开发人员所须要了解的。所以就Louis个人的观点而言,千万不要将自己的角色局限在程序设计师或系统管理员而排斥学习任何一方面的知识。因为如此只会让您在执行一些任务时捉襟见肘罢了。接下来就让我们进入的正题吧!三、Notes资料库的分类与基础结构在学习Notes AP开发的第一步骤,就是要先对Notes资料库有所了解,如此才不会因为观念不足或是错误而导致在开发过程中产生阻碍。所以Louis先整理一些观念让您稍微了解:(一)Notes资料库的分类以目前市场上的资料库产品而言,就资料型态、功能性或配置方式分成好几类,例如最常听到的就是关联式资料库(Relational Database),通常简称为RDBMS或是RDB,而最具代表性的就是Oracle、DB2、Informix、SQL?等等,不过这都是要付授权费,如果是免费的,目前最红的该属MySQL了(Notes都可以跟这些资料库整合喔)。就资料型态而言,Notes属于文件式资料库而非关联式资料库。很多初学Notes的朋友对文件式资料库这名词通常都会很疑惑,一是因为网路上很难找到相关信息,二是对Notes还不是很了解。不过在之后的内容中Louis会陆续说明文件的观念。就资料库的配置方式而言,Notes则被归类在分布式资料库,为什么呢?因为Notes的资料库可以藉由抄写机制,将各资料库抄本分置到各服务器与客户端中。分布式资料库的理论在网路上有很多资料,若有兴趣的话可以到各大搜寻引擎网站找找。(二)Notes资料库的结构每一个Notes资料库在windows OS下是以档案格式存在的,其扩展名通常是NSF,也就是Notes Storage Facility的简写,翻译成中文就是Notes储存设备。至于扩展名NTF也是Notes范本资料库,全名是Notes Template Facility,是用来产生一般资料库的范本。也就是说,您可以利用模板资料库来新建一个资料库,而此资料库中的设计是与模板资料库的设计一模一样的。按照官方的说法,每个Notes资料库是由四个基本组件所组成:1.ACL:就是Access Control List,一般翻译成存取控制清单,或是权限控制清单,顾名思义就是让资料库管理员可以指定使用者对该资料库执行何种动作。2.设计组件:是指套表、视界、外框、图文框、领航员?等等组件,而这些都是Notes资料库最最基础的组件,也是用来让资料库可以与使用者互动的基本组件,没有这些组件,资料库即无法运作。3.所谓逻辑:是指程序设计师在资料库中所撰写的程序语言,Lotus Script、公式、代理程序都是。主要是要运算处理资料库中的资料,或者达成某些自动化的作业。4.资料:是指储存在文件中的文字、数字、日期时间、附加档案?等等信息。四、资料的安全控管若要简单描述Domino对资料的安全控管,基本上由外而内可以分成几关:服务器资料库文件隐藏公式。以服务器这一关来说,是在服务器文件中控管的,例如允许或不允许哪些使用者存取此服务器、允许或不允许哪些使用者可以在服务器上建立或删除资料库等等。若是使用者被赋予存取服务器的权限,就会进入到资料库安全控管这关,而这关的安全控管就是由资料库ACL来决定的。再来是文件的安全性控管,这是经由套表属性之安全卷标下的选项,以及读者与作者栏位来处理的。最后就是隐藏公式,其实,隐藏公式根本就不算是安全性控管的方法,这只能说是开发技巧。因为即使透过隐藏公式把套表中的特定栏位隐藏起来,使用者仍然可以透过文件属性方块看到各栏位中的资料。五、ACL既然我们在前面多次谈到ACL,不稍微跟他交个朋友好像说不过去,所以在这儿就为大伙儿引荐他吧,呵呵。在ACL中主要有几种组件设定:使用者类型、权限类型、执行动作。设定使用者类型是为了避免ID被误用。举例来说,通常服务器在资料库ACL中都是管理员权限,假设服务器ID被有心人士盗用,可能就会造成极大的破坏。所以为了防范有心人士进行这种破坏行动,就必须在ACL中正确设定为服务器类型,如此该人士即使拿到服务器ID也没办法使用Notes client来对资料库执行任何活动。因为,服务器不是人,所以不会使用Notes client(不过在系统管理中,Louis强烈建议把服务器当作是人,这样有助于管理概念的建立)。但相对的,如果未设定适当的类型,也会导致某些动作无法执行。再来是权限类型,依权限低高依序有七层-没有权限、储存者、读者、作者、编辑者、设计师、管理员。【没有权限】当然就不能对资料库执行任何动作,因为连进去的权利都没有。Louis常戏称【储存者】为工读生权限,储存者仅能输入资料到资料库中,输入完毕后,就无法再看到这些资料。感觉就像找了一位工读生来key in大量资料到资料库中,但又不想让工读生记起这些资料或是看到其它资料。先假设文件或套表中没有读者栏位,当使用者被赋予【读者】权限时,使用者就只能阅读文件,而不能编辑文件,当然更不可能建立文件(可执行动作之建立文件选项被强制disable了)。不过,一但文件中有读者栏位,若使用者的名称未在读者栏位的名称清单之中,则即使有再高的ACL权限还是无法阅读该文件。至于【作者】权限就必须跟【作者】栏位配合使用才具效用,当使用者被赋予【作者】权限,但作者栏位中的使用者名称却是别位使用者时,这时即使该份文件是目前使用者所建立,但因为其名称未列于作者栏位中,所以无法编辑该文件,仅能阅读而已。顺带一提,如果使用者被赋予【编辑者】(含)以上权限,但文件中的作者栏位中并没有这位使用者名称,使用者还是可以编辑文件,因为【作者】权限必须跟【作者】栏位配合使用才具效用,也就是说【编辑者】(含)以上权限不受作者栏位的约束。至于【设计师】权限就是多了使用Domino Designer来开发AP的权限。而管理员则是多了修改ACL的权限。兹概略整理下表以供参考:管理者设计者编辑者作者读者储存者没有权利ACL设定V建立修改设计组件V V编辑所有文件V VV编辑自已文件V VV V增加新文件V VV VV读取所有文件V VV VV在资料库建立时,会在ACL的使用者清单中看到-Default-这笔项目。-Default-的作用是,当使用者在ACL中找不到适用于自己的权限时,就套用-Default-的权限。也就是说,凡名称未明列在ACL中或未包含在ACL的群组中,就套用-Default-的权限。在开发AP时若无特殊需求,-Default-通常都设定为编辑者。您还会看到LocalDomainServers群组与OtherDomainServers群组。顾名思义,只要是与目前资料库的所在服务器位在同一Domino网域的服务器都会自动包含在LocalDomainServers群组中,除非您去names.nsf中更改此群组文件,那又另当别论了Orz。所以此群组预设权限是管理员,主要是为了让相同网域内的服务器可以进行抄写作业。至于OtherDomainServers群组就是跟LocalDomainServers相反了,因为此群组的成员均为不同网域外的Domino服务器,而且预设是无权限。有些集团企业因为有一个以上的Domino网域,所以可能会利用此群组来达到某些跨网域存取的需求。不过,在达成此类需求时,请先手动把那些位于不同网域的服务器名称加到names.nsf中的OtherDomainServers群组文件喔。最后要谈到Anonymous这个特殊项目,这是要手动新增给Web AP使用的。也就是当未透过Web ID&Password登入的使用者,均会被视为匿名者并套用Anonymous项目的权限。若Web AP未设定此项目时,当您使用浏览器开启资料库时,系统就会给您一个警告,要求您到ACL中新增此一项目喔。请特别注意,在开发Web AP时若无特殊需求,请将此项目设为无权限,否则您资料库中的资料可能就会在网路上趴趴造了。Lotus Notes程序设计随笔(二)文章作者:李建壹发布时间:2008年3月25日文章来源:Lotus爱好者论坛七、Notes应用系统在进入开发组件的正题之前,我们先来聊聊什么是Notes应用系统。通常Notes应用系统也称为Notes应用程序、Notes AP等等。尽管这些名词都不同,但其实都是指使用Domino Designer这个设计接口所开发出来的系统,像是请假系统、加班申报系统、请采购系统、文具申购系统、ISO文件管理系统,甚至是ECN系统、NBR系统等等都属之。我想稍微列出这些系统名称,应该就可以稍微明了Notes不是只能用来当作电子邮件系统了吧。一般初学者在还没开始真正了解Notes应用系统时,通常会认为一个资料库就是一支Notes应用系统。其实不尽然如此,绝大部分的Notes应用系统都是由一个以上的资料库所组成。举例来说好了,就Louis的经验,建议刚导入Notes而且要开始开发系统时,第一优先开发的应该是人员组织资料库,这个资料库主要在储存企业人员组织信息,像是部门文件与人员文件。为什么要先开发建置这资料库呢?因为使用者在许多系统的窗体中,都有申请人的姓名、部门、工号等等基本信息栏位,而这些栏位值强烈建议不要让使用者输入,而是由程序去人员组织资料库中自动搜寻并带出的(通常是利用UserName取得的Notes名称来当作关键值)。所以,拿请假系统来说好了,既然请假系统会跨资料库到人员组织资料库取值,这就算是由两个资料库来组成一个请假系统了。当然,上述的例子是比较小型的例子,若要说又大型又比较有名的例子就属Lotus Workflow了,因为其每一支系统都至少要有三个资料库所组成-应用程序资料库、人员组织资料库、过程定义资料库、设计储存资料库(选择性)。所以总结来说,一支Notes应用系统可以由一个或一个以上的Notes资料库所组成。注:若您对人员组织资料库没有什么观念的话,可以参考DominoClub网站的SnowMan专栏中的简易员工资料库。虽然SnowMan兄谦虚的说那是简易员工资料库,不过其实该有的基本组件都已经有了,可说是麻雀虽小五脏俱全。各位只要依据各公司自己的需求再添加栏位就可以很完整了。网址如下:八、栏位-Item与Field应该会有朋友觉得奇怪,为何Louis不是先介绍文件或是套表,反而是先介绍栏位呢?其实我在下笔时也有考虑过这问题,之后一方面认为如果先讲文件与套表,可能要花比较多的时间与篇幅写;另一方面觉得栏位是最基础的观念,而且在说明栏位观念时也会稍微补充套表与文件的观念,所以决定先说明栏位。Item与Field的中文翻译通常都是栏位,所以常被搞混,但两者其实是完全不同的。严格来说,Item是要透过文件属性方块才可以看到的后端栏位;Field则是在套表上才能看到的前端栏位。以下是针对两者的特性期之间的关连性加以说明:(一)Item Notes资料在储存上最基本的容器就是item。它可以储存文字、数字、日期时间、附加档案?等等资料。也由于是储存容器,所以要在文件储存后才会产生,若文件还没储存是不会有Item存在的,您可以试着开启一份新文件,然后打开文件属性方块看看就知道了。所以简而言之,文件其实就是由item所组成的。Item本身也有其属性,例如储存在item中的资料长度、资料类型?等等。而这些也可以从文件属性方块看到。(二)Field至于Field,简单来说,在新文件上是要让使用者输入资料;而在已存在的文件上,则是用来显示及编辑已储存于Item中的资料,所以称之为前端栏位,也就是说Field是用来与使用者互动的一个设计组件。既然是与使用者互动的设计组件,那就一定有某些方法可以达成此目的,就是透过field的程序,像是默认值公式、转译公式、验证公式、数个事件都可以让程序设计师撰写程序以达到上述的互动目的。(三)Item与Field的连结既然item是后端栏位,field是前端栏位,那就一定有方法将两者连结起来。举例来说,在一般状况下,若在套表上有一个名为X1的field,当文件储存时,在此栏位中的数值就会储存到名为X1的item中。再假设一种状况,假设套表上有一个名为X1的field,在文件中另有一个名为Y1的item,若要将Y1的数值显示在X1 field的话,只要在X1 field的默认值公式或是计算公式填入Y1这个item名称即可。(四)LotusScript的Item与Field因为这种前后端结构的观念,所以在LotusScript中的NotesDocument类别下提供几个方法来操作处理item,像是GetFirstItem、GetItemValue等等。如果程序设计师想要进一步处理item,则可以使用NotesItem的类别。这类后端的类别与方法通常是用来处理item中的数值。至于操作处理Field的相关方法则被放在NotesUIDocument前端类别中,像是FieldGetText、FieldSetText?等等。这类前端的类别与方法通常是用来与使用者达到互动。九、套表就官方的定义而言,套表是用来显示动态信息的。既然是显示动态信息,就表示其中的信息是要让使用者可以看的到,更深入一点,就是让使用者可以透过套表来跟资料库中的资料作互动。所以套表在Notes中真的占有很重要的地位,而且应用层面甚广,例如,单纯显示文件中的信息、让使用者输入资料以建立文件、编辑文件中的资料以更新信息、在套表事件或是其它组件加入程序以运算处理文件中的资料等等。在ND6中则可以直接查询RDB中的资料。ND7开始更可以和DB2资料库做资料交易。但是,回到原点,没有任何其它设计组件存在的空套表是没有实质意义的。所以当套表中存在field、按钮、动作按钮、小节、焦点信息、有程序的事件等等设计组件,才能发挥出套表的功效。相对于文件是许多item的容器,套表则是许多设计组件的容器。例如在Web上可以在套表中嵌入视界来美化视界在Web上的呈现。再回到套表最主要的功能-建立与编辑文件。就建立新文件而言,当使用者在各field中输入数值并储存以后就会产生一份文件,而field中的数值则会储存到该文件中的各item中。另一方面,当使用者利用套表开启已经存在的文件时,套表的field通常就是用来显示或编辑item的数值。十、文件其实在上述中差不多已经把栏位、套表、文件的关系解释的差不多了。所以在这儿我们就只稍做补充。由于Item无法自行存在,而是必须存在于文件中,所以换言之,Notes文件可以说是包含一个以上Item的集合,这可说是一个抽象的观念。其实有些人会认为视界有显示出来或是套表可以打开的才算是文件,但其实不然,因为文件也有可能是隐藏在资料库中而不显示的。这就是常有人会看到工作区的资料库显示有未阅读文件,但又在视界中找不到的原因。另外,也有些人会认为文件跟套表是一体的,事实上也不然,套表与文件是分开的,就如同先前曾经提到,套表是为了让使用者可以新增、编辑、显示文件的。但也有例外,如果在套表属性中有勾选文件与套表一起储存的属性时,文件与套表就会储存在一起,但通常不建议如此做。因为把套表中的所有设计组件与文件合并储存在一起,就会让文件的体积变大,进而占用硬盘空间。就像是本来只有55公斤的Louis穿上几件衣服后,可能就增加到57公斤了。另外,在Notes中还有一种特殊文件,就是设计文件,也就是开发者开发出来的设计组件,像是套表、视界等等,也是以文件型态存在的,这些文件统称为Design Notes,不过当然也可以称为Design Document。在Domino Designer的设计组件清单中,使用滑鼠右键单击任一组件,都可以看到该设计组件的文件属性。顺带一提,在早期Notes文件并不称为Document,而是称为note,所以才有Lotus Notes这名字出现。但是把话说回来,因为Notes文件的资料并无法像关联式资料库可以利用key值把各资料做互相关联,所以产生一些资料处理上的不便。不过这类问题通常还是可以经由技术上来解决的。而且也因为如此,Notes才能成为各种关联式资料库的整合接口,不是吗?Lotus Notes程序设计随笔(三)作者?建壹Louis Lee(小?哥)文章作者:李建壹发布时间:2008年3月25日文章来源:Lotus爱好者论坛十一、自我提升当我写下这个标题时感觉有点心虚,因为好像在灌水,呵呵。?过相信接下?Louis所?的,绝对是让各位初学者非常受用的。一般刚开始开发Notes AP时,相信大部分使用者提出的需求都是主管去谈的,而您绝对是伤透脑筋在想功能写程序的那个人。虽然这是很一般的程序,但对于您的未?其实?得是好处。虽然可以写出一支?使用者满意的AP绝对是一件很?起的事,但是当您完成这支AP以后除?学到很多程序技巧与成就感以外,您还获得?么?这是非常值得思考的一件事。Notes的精髓在于签核?程的开发,而签核?程的精髓则是各产业的Domain Know How,也就是各产业的专业知?。所以当您接下主管交付的需求后,并非一味的埋头苦思程序该怎写、功能该怎开发,?重要的是去了解此系统的真正目的是?么、?程为?么要这么跑、使用者在签核底下的作业是?么。所以您应该再找机会去跟提出需求的使用者了解他们的作业程序,进而从他们的脑袋?学习他们?域的专业知?。其实,我常常在跟使用者谈需求的时候,即使懂也装?懂,很有?貌的请使用者重头讲一次,反正被骂笨也无所谓,因为目的已经达到,大?晚上抱着枕头哭一下就好?,隔天又是好汉一条,哈哈。当您在各产业待过以后,这些知?就会逐月逐?积成为您的宝藏。而这些宝藏将会在以后成为您闯荡江湖的宝刀。因为往后当您在与使用者谈需求时,由于您的宝藏取之?绝用之?尽,频频点头称是的将?再是您而会是使用者。我相信应该很少朋友希望自己永远靠写程序维生,尤其到?一定?纪以后,写程序反而是一种负担。所以接下?赖以维生的将会是您的Domain Know How,帮您赚钱的绝对是您的脑袋与口才,而?是写程序的技术。这时应该要很高兴您?是修计算机的信息人员,而是写Notes的人员。所以,趁现在赶快?积您未?的财富吧!加油!加油!Go!Go!Go!嗯.还没结尾.请继续阅?.感恩Orz十二、视界在随笔(二)中,Louis跟各位讨?到文件与套表的关系,所以接下?,我们就?谈谈视界吧。视界这个设计组件,很多人都会把它拿?跟RDB(关?式资?库)的table作比较。其实是有那么点像,所以在ND7才会改?出SQL Query视界这玩意儿。?过,撇开视界与table的比较,视界的主要功能是为?有系统的整?资?库中的一大堆文件,将这些文件中的关键信息分门别?的显示出?,好让使用者可以快速找到他们所需要的信息。所以您要?视界是由一大堆文件所组成也?为过。但因为是给使用者使用的,所以在设计一个视界的时候,最好可以先与使用者讨?清楚,否则被要求重排视界的可能性非常的大。?过,?从设计面?看,视界应该?是由直?所组成,毕竟没有直?的视界是没有任何用处的。在前面,我曾经把显示这?个字特别标出?的原因是,直?除?可以直接显示文件的?位值以外,您也可以透过直?公式?处?多个?位值后再将其显示出?。也就是?,处?过后的直?值并非储存在文件中,而仅供显示。优点在于,您?用在文件中放一大堆计算?位?储存一些只为?显示用的?值。但缺点是,?直?中有太多的计算公式,则视界的负担就会加重,因为它必须要计算每份文件的?位值。当文件?很多时,其负担是可想而知的。我想大部份的初学朋友都知道视界选择这玩意儿吧,这玩意儿讲明白一点就是透过您指定的条件?筛选要显示在此视界的文件。最?严谨的条件当属【selectall】,因为它会将资?库中所有的文件通通显示在此视界中。最常看到的条件应该是【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把那些文件从资?夹删除。否则这资料夹中的文件会一直增加,这样就会造成之后所处理的文件不是当次放进去的文件,而是累积已久杂七杂八的文件。Lotus Notes程序设计随笔(四)文章作者:李建壹发布时间:2008年3月25日文章来源:Lotus爱好者论坛十四、随处可得的文件这一篇是要响应某位匿名朋友的问题-何谓前端文件、后端文件、屏幕上看到的文件、内存中的文件、数据库中的文件?其实在前面几篇中,已经有谈到文件的观念,不过没有以这几个项目来做区分说明就是了,所以这部份我们就当作再次温习文件的观念吧!再者,路哥认为这问题以一位初学朋友而言问得实在是很不错。而这问题我相信也是众多初学者的问题!1.后端文件后端文件的产生基本上可以分成两种-透过套表产生与透过程序产生。前者当然是由使用者开启套表,并在相关字段输入数据后储存产生的。后者则是透过Lotus Script或Java产生的,例如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 Script或Java程序设计有关了,我尽量解释您就尽量看看,能吸收多少算多少。在Lotus Script中有NotesDocument与NotesDocumentsCollection的物件。当您使用GetDocumentByKey方法取得NotesDocument对象,或是使用GetAllDocumentsByKey取得NotesDocumentsCollection的对象时,被取得之文件对象所包含的所有数据都会被储存在内存中,等待您进一步的处理。在前面路哥也提到过,若文件中有很多数据,则太多的文件就会造成内存的负担,所以,如果您只是很单纯的处理少数资料,就请尽量使用NotesViewEntry或NotesViewEntries,因为内存只会储存文件在此视界的直栏数据,而不会储存文件的所有数据。5.结论文件是很抽象的观念,我稍微将它具体化一下,但并非一模一样。数据库就类似公文柜,视界就有点像是公文夹,文件类似现实生活中的公文。如果没有公文夹视界来将文件分门别类的保存起来,数据库就会像是一个摆放了一大堆杂乱无章文件的公文柜。我建议您可以再回到前面几篇温习一下,相信会有不同的感觉的。十五、选择开启文件的套表回到咱们的进度上吧,在本篇随笔中,这一节算是唯一在进度上的一节。路哥好像没有谈到有进度吧,因为进度在路哥的脑袋瓜子里,呵呵。相信各位在看过前三篇随笔后,对文件跟套表的关系应该有一定程度的了解,所以接下来要为各位介绍的是,当您开启一份文件时Notes是如何决定要用哪一张套表来显示文件。不懂路哥在说什么吗?没关系,我就再稍微解释一下,Notes文件并非只能使用当初建立此文件的套表来开启,也就是说一份文件可以使用不同的套表来开启,而产生的结果就是在前端呈现的文件之排版与数据会不同。例如,有A与B两张套表,A套表有两个字段-AAA、BBB;B套表只有BBB字段。另外在数据库中有一份文件储存了AAA字段值111与BBB字段值222。这时使用A套表开启甲文件时,您会看到屏幕上显示111与222两个字段值。接下来再用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字段值,若文件中此字段值有指定套表名称,就会使用该套表来开启。若没有则会参照最后的防线-数据库的预设套表。若数据库中没有预设套表呢?如果路哥没有记错,系统好像会出现找不到套表之类的错误讯息。不过也有可能记错喔,最近脑筋不太
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 五年级小数学试卷及答案
- 五年级家长测试试卷及答案
- 货车租赁合作伙伴协议
- 车位使用权担保协议
- 钢筋结构装配式建筑体系总结模版
- 公共机构节能工作总结模版
- 汽车产业的国际竞争
- 也气上集相时气审水位要上续翻否您样稿成自疗廉存出命人新高告帮
- 美甲时尚设计尽显美丽指尖
- 脚底SPA恢复双脚柔软
- 2025年河北省唐山市玉田县第三中学中考一模地理试卷(含答案)
- 2025届金丽衢十二校高三语文第二次联考考场高分作文点评:“效率至上”与“深度求索”
- 完形填空 20篇 集训-2025年译林版七年级英语下册寒假预习(含答案)
- 各岗位应知应会“明白卡”(含矿长等)
- T-CNSAIA 005-2024 纯钛真空杯标准
- 抖音来客本地生活服务餐饮商家代运营策划方案
- 《乡村治理理论与实践》课件第五章 乡村治理的机制
- 激光超声技术在GIS盆式绝缘子缺陷检测中的应用与探索
- 贵州省毕节市威宁县2024-2025学年小升初总复习数学测试题含解析
- 七年级语文下册古诗文默写(带答案)
- 学校在铸牢中华民族共同体意识教育工作情况报告
评论
0/150
提交评论