扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
Lotus Script是一种面向对象的语言。
使用它时,需要理解Notes类的继承和包含。
1.继承
比较容易理解。所谓类的继承,子类(派生类)继承其父类的属性和方法。
比如 NotesRichTextItem 是 NotesItem 的子类,所以 NotesRichTextItem
类的实例(对象)可以使用 NotesItem 的所有属性和方法。
2.包含
这个概念不太好理解。
所谓包含是一种概念上的包含,即Notes的对象是一个容器(container),它
包含了其中的对象。例如,我们使用 NotesSession 对象来创建 NotesDatabase
对象,并且 NotesDatabase 对象创建 NotesDocument 对象。这是因为
NotesSession 包含了 NotesDatabase,而 NotesDatabase 包含了 NotesDocumen
t。
关闭一个容器(container),它其中的对象也会被关闭。
这使得我们很多时候 使用Lotus Script 编程时会有疑惑,明显的得到了对象
突然就变为Null了,这是为什么啊?
请见下面一段程序:
Sub Click(Source as Button)
Dim session as New NotesSession
Dim db as NotesDatabase
set db = session.GetDatabase(servername , dbname)
' set getDocs = db.Alldocuments
Dim dc1 as NotesDocumentCollection
' set dc1 = getDocs("Myserver" , "MyTestDb.nsf")
Set dc1 = db.Alldocuments
msgbox "Ok It's Work Well!"
End Sub
会发生什么结果呢?
你会看到一个窗口。"OK It's Work Well!"
然而你把上面一段程序写成
Function getDocs(servername As String , dbname As String) as NotesDocu
mentCollection
Dim session as New NotesSession
Dim db as NotesDatabase
set db = session.GetDatabase(servername , dbname)
set getDocs = db.Alldocuments
End Function
Sub Click(Source as Button)
Dim dc1 as NotesDocumentCollection
set dc1 = getDocs("Myserver" , "MyTestDb.nsf")
msgbox "Ok It's Work Well!"
End Sub
会发生什么结果呢?
实际上这个程序运行时,会产生一个“Object Not Set”的运行错误!
尽管这时在逻辑上看不出区别。但实际上是错误的。
因为 db 在函数 getDocs中得到的,退出了getDocs函数,就自动关闭了,
而此时 db 包含的文档集合也关闭了。所以会产生运行错误。
(当然这也涉及到变量的工作范围,用在这里只表示一下包含的关系)
还有许多情况是这样的:
比如
set doc = db.createdocument
之后 set db = .......
此时 db先关闭,在重新设置,doc 也自动关闭,值为Null.
--------
原著:丁香书
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者