Note背后
来源:互联网 发布:2016年餐饮业数据分析 编辑:程序博客网 时间:2024/04/30 15:19
如前所述,Notes数据库的核心就是其中保存各种数据的通用结构note。Notes提供的很多功能都是建立在这种结构上,我们开发的应用程序也是围绕着它的应用,同时受益于和受制于它的特点。之后的几篇文章,我都会介绍一些关于这位幕后主角的信息。
在Notes数据库中,我们会接触到各种不同形式的数据。在workspace(工作台)上,可以看到数据库的图标;在视图里,可以看到文档列表;打开其中一个,可以看到文档的内容;通过相应的菜单命令,可以在对话框中看到存取控制列表和复制公式等等;在designer(设计器)里可以看到表单、代理和脚本库。所有这些数据在形式上和功能上是如此不同,但是在数据库中都是以同样的结构note保存。文档(document)作为用户note、数据note的同义词,是我们很熟悉的。对于开发和管理人员,有趣和值得注意的是,设计元素与文档从技术上说没有多少差别。或者说在Notes程序的眼中,它们只是同一种东西的不同子类,在读取、修改、保存和删除等操作上没有差别。我们在desinger中已经可以看到这一点的表现,各种设计元素的列表和显示文档的视图就十分相似,在每个设计元素的属性中,还可以看到和文档一样的域列表。我们甚至可以创建一个视图,显示设计元素。在给出这样一个例子前,我们先看看Notes是怎样区分各种note的。
Notes程序将note分成下面这些类型。
类型说明NOTE_CLASS单复数ACL设定数据库的存取权限。0x0040单个Document用户文档。0x0001多个Design设计note集合,即NotesNoteCollection。0x0020 Field共享域(字段)0x0400多个Filter代理、代理数据、大纲、脚本库、数据库脚本都归在此类型下。0x0200 Agent 多个Agent Data 多个Outline 多个Script Library 多个Database Script 单个Form表单、子表单、页面、帧结构集、图片资源、Java资源、共享操作、XPage都归在此类型下。0x0004 Form 多个Subform 多个Page 多个Frameset 多个Image Resource 多个Java Resource 多个Shared Action所有共享操作保存在唯一的note里。 单个Xpage 多个Icon设定数据库的图标、标题和分类。0x0010单个Info设定“关于数据库”的帮助。0x0002单个Help设定“使用数据库”的帮助。0x0100单个Help Index设定Notes产品帮助信息的索引。0x0080单个ReplFormula设定复制公式。0x0800单个View视图、文件夹、导航器都归在此类型下。0x0008 View 多个Folder 多个Navigator 多个“NOTE_CLASS”是Notes程序中代表不同note类型的代码,这里用16进制表示。
“单复数”列指的是该类型的note在数据库中只能有一个还是可以有多个。
可以看出程序中Notes对note的分类,特别是设计元素,与我们在开发中认识的分类有很大的不同。表单、子表单、页面、XPage这些都是Form类型的note在应用上的分类。实际上从功能的角度我们也能体会到它们中的一些除了某些特性,确实是相同的。比如子表单除了不能单独,显示与表单完全一样;页面除了不能插入域用于保存和显示文档,与表单的功能也一致。视图和文件夹的情况也类似。
另外还可以看出,NOTE_CLASS是被设计成可以参与“或”运算的标志位。这样既可以用单个NOTE_CLASS确定某个类型的note,也可以用任意多个NOTE_CLASS的“或”组合代表多种note。比如将所有设计元素的NOTE_CLASS组合起来,就成为代表数据库中所有设计note的标志位0x7ffe,再与0x0001做“或”运算,就成为表示所有note的0x7fff。NOTE_CLASS还被用来表示其他一些含义,比如0x8000表示某类note中的默认个体,0x1000表示私有设计note。
下一个问题是,Notes程序如何区分具有相同NOTE_CLASS的不同设计元素。答案是借助于另一个文本型的标志——
‘A’ – FORM,说明一个子表单在增加子表单的列表中。
‘a’ – VIEW,说明一个视图不包含任何文件夹中的文档。
‘w’ – 所有,说明这个设计note对Web客户端隐藏。
‘#’ – FORM,说明这是一个帧结构集。
可以看出,确定某种设计元素的类型与描述其他特性被混合在一起,而字符的数量是有限的,所以当新特性和新类型不断被增加时,这种编码方式的资源很快会被耗尽。于是Notes开始采用“模式”,也即具有特殊功能的字符与普通字符的组合,来表示某种信息。比如用”+sh.”表示脚本库。
以上这些描述可能会显得距离太遥远,下面就来看一个实际应用的例子。
我们建一个视图来显示设计元素。不妨把视图命名为(
- Form
- Form (4)
- !@Matches($Flags; “*{UWy#i:|@Kgz}*”)
- View
- View (8)
- !@Matches($Flags; “*{FG^}*”)
- Folder
- View (8)
- @Contains($Flags; “F”)
- Agent
- Filter (200)
- !@Matches($Flags; “*{QXstmz{}*”)
- Image
- Form (4)
- @Contains($Flags; “i”)
- Subform
- Form (4)
- @Contains($Flags; “U”)
- Outline
- Filter (200)
- @Contains($Flags; “m”)
- Frameset
- Form (4)
- @Contains($Flags; “#”)
- Page
- Form (4)
- @Contains($Flags; “W”)
- Script Library (excluding Web Service Consumers)
- Filter (200)
- @Matches(Flags; "*{sh}*") & !@Contains(FlagsExt; “W”)
- Stylesheet
- Form (4)
- @Contains($Flags; “=”)
- Theme
- Form (4)
- @Contains(Flags; "g") & @Contains(Flags; “`”)
- Composite Application
- Form (4)
- @Contains($Flags; “|”)
- Wiring Properties
- Form (4)
- @Contains($Flags; “:”)
- Web Service Consumer
- Filter (200)
- @Contains(FlagsExt; "W") & @Matches(Flags; “*{sh}*”)
- Web Service Provider
- Filter (200)
- @Contains($Flags; “{“)
- XPage
- Form (4)
- @Contains(Flags; "g") & @Contains(Flags; “K”)
- Custom Control
- Form (4)
- @Contains(Flags; "g") & @Contains(Flags; “;”)
- File Resource
- Form (4)
- @Contains(Flags; "g") & !@Matches(Flags; “*{~K[];`}*”)
- Hidden File Resource (created by XPage build)
- Form (4)
- @Contains(Flags; "g") & @Contains(Flags; “~”) & !@Matches($Flags; “*{~K[];`}*”)
- Shared Field
- Field (400)
- N/A
- Shared Action
- Form (4)
- @Contains($Flags; “y”)
- Database Icon
- Icon (10)
- N/A
- Help About Document
- Help About (2)
- N/A
- Help Using Document
- Help Using (100)
- N/A
- Database Script
- Filter (200)
- @Contains($Flags; “t”)
- Data Connection
- Filter (200)
- @Contains($Flags; “k”)
- Navigator
- View (8)
- @Contains($Flags; “G”)
- Applet
- Form (4)
- @Contains($Flags; “@”)
- Shared Column
- View (8)
- @Contains($Flags; “^”)
- DB2 Access View
- Form (4)
- @Contains($Flags; “z”)
- Stored full-text query
- Filter (200)
- @Contains($Flags; “O”)
- Agent Data Note
- Filter (200)
- @Contains($Flags; “X”)
- Database ACL
- ACL (40)
- N/A
因为每个设计元素的名称都保留在一个$Title条目中,所以可以建一个名称列,公式为:
$Title
根据需要和喜好,还可以添加“最近修改人”,“最近修改时间”等列。
针对含有代码的设计元素(代理、脚本库等)我们还可以显示它们使用的编程语言,公式为:
f:=$Flags;
@If(@Contains(f; “s”);
@If(@Contains(f; “j”);
“Java“;
@IsAvailable(“$ScriptLib”);
“LotusScript”;”“);
@Contains(f; “j”); “Java”;
@Contains(f; “L”); “LotusScript”;
@Contains(f; “f”); “Formula”;
“”)
现在在Notes中显示这个视图,什么都没有!因为在视图中还有一个开关——
- Option Public
- Option Declare
- Sub Initialize
- Dim s As New NotesSession
- Dim db As NotesDatabase
- Set db=s.CurrentDatabase
- Dim view As NotesView
- Set view=db.GetView(“DesignElements"</span><span>) </span></span></li><li class="alt"><span> <span class="keyword">If</span><span> view </span><span class="keyword">Is</span><span> </span><span class="keyword">Nothing</span><span> </span><span class="keyword">Then</span><span> </span></span></li><li class=""><span> <span class="keyword">Exit</span><span> </span><span class="keyword">Sub</span><span> </span></span></li><li class="alt"><span> <span class="keyword">End</span><span> </span><span class="keyword">If</span><span> </span></span></li><li class=""><span> </span></li><li class="alt"><span> <span class="keyword">Dim</span><span> viewDoc </span><span class="keyword">As</span><span> NotesDocument </span></span></li><li class=""><span> <span class="keyword">Set</span><span> viewDoc=db.GetDocumentByUNID(view.UniversalID) </span></span></li><li class="alt"><span> <span class="comment">'将FormulaClass改成任何希望包含的设计元素对应的值。
- Call viewDoc.ReplaceItemValue(“$FormulaClass”,“4”)
- Call viewDoc.Sign()
- Call viewDoc.Save(True,False)
- Dim ws As New NotesUIWorkspace
- Call ws.ViewRebuild()
- End Sub
Option Public Option DeclareSub Initialize Dim s As New NotesSession Dim db As NotesDatabase Set db=s.CurrentDatabase Dim view As NotesView Set view=db.GetView("$DesignElements") If view Is Nothing Then Exit Sub End If Dim viewDoc As NotesDocument Set viewDoc=db.GetDocumentByUNID(view.UniversalID) '将$FormulaClass改成任何希望包含的设计元素对应的值。 Call viewDoc.ReplaceItemValue("$FormulaClass","4") Call viewDoc.Sign() Call viewDoc.Save(True,False) Dim ws As New NotesUIWorkspace Call ws.ViewRebuild()End Sub最后需要指出的是,因为需要同时使用NOTE_CLASS和选择公式才能确定某些设计元素的类型,所以如果将上述视图的
- Note背后
- 4. Note背后
- note
- note
- NOTE
- note
- Note
- note
- note
- Note
- note
- Note
- Note
- note
- Note
- Note
- Note
- note
- 第八周—兑换钱
- 简单的基于dubbo的调用
- java 注解——Annotations Basics
- 消息称新MacBook暂时不会采用电子墨水键盘
- python学习(3)输入和输出
- Note背后
- 算法一:字符串的模式匹配
- 杀死全部的Activity,退出当前程序
- [Lintcode] Longest Substring Without Repeating Characters 最长无重复字符的子串
- 认识正则表达式
- HTML1
- 苹果“hello again”发布会只有笔记本电脑
- 多平台工程生成工具CMAKE如何创建VS工程组——folder属性
- Error:Configuration with name 'default' not found. 解决办法