操作Domino数据库的设计元素

简介:

在Domino的数据库中有数据文档和设计文档两种文档。设计文档包括单,视图,代理等,这些组成了
一个数据库设计。标准的Notes类库能够很容易的访问数据文档,但是却没有提供任何方法来访问设计
文档。下面的这个DatabaseDesign类可以让我们使用LotusScript来访问设计文档,返回的是NotesDocument
对象。

要使用这个类,我们把DBDesign这个script库拷贝到数据库中。
下面是这个类的代码:

ContractedBlock.gif DatabaseDesign类代码


创建DatabaseDesign对象的方法

ContractedBlock.gif createDatabaseDesign方法


我们可以通过类中提供的属性和方法来操作数据库中的设计元素,比如:
1.使用createDatabaseDesign方法来获取一个DatabaseDesign对象

None.gif Dim session  as  New NotesSession
None.gif Dim db  as NotesDatabase
None.gif Dim dbDesign  as DatabaseDesign
None.gif Set db = session.currentDatabase
None.gif Set dbDesign = createDatabaseDesign( db)

2.通过formDocuments属性来获取所有表单

None.gif Dim forms  as variant
None.gifforms = dbDesign.formDocuments
None.gif

3.打印出表单的标题

None.gif If  Not IsEmpty( forms)  Then
None.gifForall formdoc  In forms
None.gif print formdoc.getItemValue(  " $Title ")( 0
None.gif end Forall
None.gif

4.通过方法getFormByName获取到指定的表单

None.gif Dim form  as NotesDocument
None.gif set form = dbDesign.getFormByName(  " MyForm ")
None.gif If  Not form  Is  Nothing  Then
None.gif ' do something with form here
None.gif
End  If
None.gif

5.使用 NotesDocument.copyToDatabase 方法可以拷贝设计元素到其他数据库中

None.gif dim otherdb  as  new NotesDatabase(  " server "" file.nsf ")
None.gif set form = dbDesign.getFormByName(  " FormToCopy ")
None.gif If  Not form  Is  Nothing  Then
None.gif dim formcopy  as NotesDocument
None.gif set formcopy = form.copytodatabase(otherdb)
None.gif call formcopy.save( truetrue)
None.gif End  If
None.gif

下面一段代码实现使用服务器上指定邮箱模板来更新本地PersonalMailBox的个人邮箱设计:

ExpandedBlockStart.gif Sub Click(Source As Button) 
InBlock.gif Dim ss As New NotesSession,ws As New NotesUIWorkspace 
InBlock.gif Dim db As NotesDatabase,doc As NotesDocument 
InBlock.gif Dim docs As Variant 
InBlock.gif        '得到personalmailbox的路径 
InBlock.gif
 Dim   path   As   String   
InBlock.gif path   =   ss.getenvironmentstring("directory",True)   
InBlock.gif path=path+"\PersonalMailBox\" 
InBlock.gif 
InBlock.gif        '得到当前用户的帐号ID,例如michaelpang 
InBlock.gif
 namev=ss.UserName 
InBlock.gif namev1=Left(namev,Len(namev)-12
InBlock.gif namev2=Right(namev1,Len(namev1)-3
InBlock.gif path=path+namev2+".nsf" 
InBlock.gif Msgbox(path) 
InBlock.gif 
InBlock.gif Set db = ss.CurrentDatabase 
InBlock.gif Set doc = ws.CurrentDocument.Document         
InBlock.gif If (Messagebox ("你确定要执行取代设计元素吗?",36,"请确认" )  <> 6 ) Then 
InBlock.gif  Exit Sub 
InBlock.gif End If 
InBlock.gif 
InBlock.gif 
InBlock.gif        '清空原始系统的设计原色
InBlock.gif
 Dim TargetDB As NotesDatabase,TargetDBObj As DatabaseDesign 
InBlock.gif Set TargetDB = New NotesDatabase(Local,path) 
InBlock.gif 
InBlock.gif        'If Not TargetDB.IsOpen Then Messagebox "本地邮箱不能打开!!":UpdateBookmark = False :Goto TheEnd 
InBlock.gif
 Set TargetDBObj = CreateDatabaseDesign(TargetDB)                 
InBlock.gif docs = TargetDBObj.Alldesigndocuments 
InBlock.gif If Not Isempty( docs)  Then 
InBlock.gif  Print "准备删除原始设计文件,共计 " + Cstr(Ubound(docs)+1" 份文件!!" 
InBlock.gif  Forall x In docs 
InBlock.gif   x.Remove(True
InBlock.gif  End Forall         
InBlock.gif  Print "完成刪除原系统设计文件!!" 
InBlock.gif Else 
InBlock.gif  Print "原系统已无设计文件!!!" 
InBlock.gif End If 
InBlock.gif        '取得新系统设计文件         
InBlock.gif
 Dim SourceDB As NotesDatabase,SourceDBObj As DatabaseDesign 
InBlock.gif Set SourceDB = New NotesDatabase("testmail02/testserver","mail\michaelpang .nsf"
InBlock.gif        'If Not SourceDB.IsOpen Then Print "Source DataBase can't open!!":UpdateBookmark = False :Goto TheEnd 
InBlock.gif
 Set SourceDBObj = CreateDatabaseDesign(SourceDB)         
InBlock.gif docs = SourceDBObj.Alldesigndocuments 
InBlock.gif Print  "准备更新系统设计文件,共技 " + Cstr(Ubound(docs)+1" 份文件!!" 
InBlock.gif        ' 
InBlock.gif
        '复制设计到目的系统 
InBlock.gif
 Forall y In docs 
InBlock.gif  Call y.CopyToDatabase(TargetDB) 
InBlock.gif End Forall 
InBlock.gif Messagebox "完成复制设计文件!!" 
InBlock.gifTheEnd: 
InBlock.gif Exit Sub 
InBlock.gif 
ExpandedBlockEnd.gifEnd Sub
 
None.gif

注意:1.使用这段代码的时候,需要将服务器上的模板的软删除功能关闭(”数据库---属性---高级---允许软删除“前的复选框勾掉),否则
多人同时运行这段代码的时候会出现“Notes error:someone else modified this document at the same time”的错误提示。
2.上面的方法把原来的设计删除了,又拷贝了新的设计,这样设计的文档ID就变了。



本文转自生鱼片博客园博客,原文链接:http://www.cnblogs.com/carysun/archive/2008/05/27/DominoDesign.html,如需转载请自行联系原作者

目录
相关文章
|
29天前
|
SQL 数据库连接 数据库
你不知道ADo.Net中操作数据库的步骤【超详细整理】
你不知道ADo.Net中操作数据库的步骤【超详细整理】
16 0
|
3月前
|
SQL 关系型数据库 MySQL
MySQL| 数据库的管理和操作【操作数据库和操作表】【附练习】
MySQL | 数据库的基本操作和表的基本操作【附练习】
|
3月前
|
SQL Java 数据库连接
java链接hive数据库实现增删改查操作
java链接hive数据库实现增删改查操作
146 0
|
3月前
|
Java 数据库 数据安全/隐私保护
基于JavaSE+JDBC使用控制台操作的简易购物系统【源码+数据库】
基于JavaSE+JDBC使用控制台操作的简易购物系统【源码+数据库】
|
3月前
|
SQL 关系型数据库 MySQL
MySQL | 数据库的管理和操作【表的增删改查】(一)
MySQL | 数据库的管理和操作【表的增删改查】
|
3月前
|
SQL 关系型数据库 MySQL
MySQL | 数据库的管理和操作【表的增删改查】(二)
MySQL | 数据库的管理和操作【表的增删改查】(二)
|
2天前
|
SQL JavaScript API
❤Nodejs 第四章(操作本地数据库实现删除-源码地址已开放)
【4月更文挑战第4天】❤Nodejs 第四章(操作本地数据库实现删除-源码地址已开放)在Node.js中实现删除本地数据库记录的操作。首先尝试通过SQL删除ID为8的用户,然后编写`app.delete`路由处理程序,从请求体获取ID并执行删除。。最终成功删除用户并展示了数据库的更新结果。下一节将优化增删改查功能。
15 1
|
1月前
|
缓存 NoSQL 数据库
[Redis]——数据一致性,先操作数据库,还是先更新缓存?
[Redis]——数据一致性,先操作数据库,还是先更新缓存?
|
1月前
|
SQL 存储 关系型数据库
【mysql】—— 数据库的操作
【mysql】—— 数据库的操作
【mysql】—— 数据库的操作
|
2月前
|
存储 SQL 数据库连接
连接并操作数据库:Python 数据库案例
数据库是一种用于存储和管理数据的工具,它以一种有组织的方式将数据存储在文件或内存中,以便于检索和处理。数据库系统通常使用 SQL(Structured Query Language)语言来进行数据的操作,包括数据的插入、查询、更新和删除等。