在Domino的数据库中有数据文档和设计文档两种文档。设计文档包括单,视图,代理等,这些组成了
一个数据库设计。标准的Notes类库能够很容易的访问数据文档,但是却没有提供任何方法来访问设计
文档。下面的这个DatabaseDesign类可以让我们使用LotusScript来访问设计文档,返回的是NotesDocument
对象。
要使用这个类,我们把DBDesign这个script库拷贝到数据库中。
下面是这个类的代码:
DatabaseDesign类代码
创建DatabaseDesign对象的方法
createDatabaseDesign方法
我们可以通过类中提供的属性和方法来操作数据库中的设计元素,比如:
1.使用createDatabaseDesign方法来获取一个DatabaseDesign对象
Dim session
as New NotesSession
Dim db
as NotesDatabase
Dim dbDesign
as DatabaseDesign
Set db = session.currentDatabase
Set dbDesign = createDatabaseDesign( db)
2.通过formDocuments属性来获取所有表单
Dim forms
as variant

forms = dbDesign.formDocuments

3.打印出表单的标题
If Not IsEmpty( forms)
Then
Forall formdoc
In forms
print formdoc.getItemValue(
"$Title")(
0)
end Forall

4.通过方法getFormByName获取到指定的表单
Dim form
as NotesDocument
set form = dbDesign.getFormByName(
"MyForm")
If Not form
Is Nothing Then
'do something with form here
End If
5.使用 NotesDocument.copyToDatabase 方法可以拷贝设计元素到其他数据库中
dim otherdb
as new NotesDatabase(
"server",
"file.nsf")
set form = dbDesign.getFormByName(
"FormToCopy")
If Not form
Is Nothing Then
dim formcopy
as NotesDocument
set formcopy = form.copytodatabase(otherdb)
call formcopy.save(
true,
true)
End If
下面一段代码实现使用服务器上指定邮箱模板来更新本地PersonalMailBox的个人邮箱设计:
Sub Click(Source
As Button)
Dim ss
As New NotesSession,ws
As New NotesUIWorkspace
Dim db
As NotesDatabase,doc
As NotesDocument
Dim docs
As Variant
'得到personalmailbox的路径
Dim path
As String 
path = ss.getenvironmentstring(
"directory",
True)

path=path+
"\PersonalMailBox\"
'得到当前用户的帐号ID,例如michaelpang

namev=ss.UserName

namev1=
Left(namev,
Len(namev)-
12)

namev2=
Right(namev1,
Len(namev1)-
3)

path=path+namev2+
".nsf"
Msgbox(path)
Set db = ss.CurrentDatabase
Set doc = ws.CurrentDocument.Document
If (Messagebox (
"你确定要执行取代设计元素吗?",
36,
"请确认" ) <>
6 )
Then
Exit Sub
End If
'清空原始系统的设计原色
Dim TargetDB
As NotesDatabase,TargetDBObj
As DatabaseDesign
Set TargetDB =
New NotesDatabase(Local,path)
'If Not TargetDB.IsOpen Then Messagebox "本地邮箱不能打开!!":UpdateBookmark = False :Goto TheEnd
Set TargetDBObj = CreateDatabaseDesign(TargetDB)

docs = TargetDBObj.Alldesigndocuments
If Not Isempty( docs)
Then
Print "准备删除原始设计文件,共计 " +
Cstr(
Ubound(docs)+
1)
" 份文件!!" 
Forall x
In docs

x.Remove(
True)
End Forall
Print "完成刪除原系统设计文件!!"
Else
Print "原系统已无设计文件!!!"
End If
'取得新系统设计文件
Dim SourceDB
As NotesDatabase,SourceDBObj
As DatabaseDesign
Set SourceDB =
New NotesDatabase(
"testmail02/testserver",
"mail\michaelpang .nsf")
'If Not SourceDB.IsOpen Then Print "Source DataBase can't open!!":UpdateBookmark = False :Goto TheEnd
Set SourceDBObj = CreateDatabaseDesign(SourceDB)

docs = SourceDBObj.Alldesigndocuments
Print "准备更新系统设计文件,共技 " +
Cstr(
Ubound(docs)+
1)
" 份文件!!"
'
'复制设计到目的系统

Forall y
In docs
Call y.CopyToDatabase(TargetDB)
End Forall

Messagebox
"完成复制设计文件!!" 
TheEnd:
Exit Sub
End Sub 
注意: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,如需转载请自行联系原作者