Formula Or Script? : | Lotus Script | Entered by: | Doug Hancock |
Design Element in Notes: | Other | Date Entered : | 2000-03-28 |
Title of the Formula: | LotusScript Class to Convieniently Access Design Elements | ![]() | ![]() |
****************************************************************************************************************
This
library was originally created by Damien Katz of Iris Associates, Aug.
1999
This library may be freely distributed, modified and used only if
this header is kept intact,
unchanged and is distributed with the contents
of the library.
Please share any fixes or enhancements and send them to
Damien_katz@iris.com so I can add
it the library.
If you find this
library useful, send me a mail message and let me know what you're using it
for.
Thanks.
****************************************************************************************************************
NOTE:
To instantiate a new DatabaseDesign object, do not attempt to instantiate it
directly,
instead call the createDatabaseDesign method, it will return a new
instantiated object.
%END REM
'Set this flag to true to always use
the platform independent method
Const FLAG_NEVER_USE_NATIVE_API_CALLS
=False
Const DESIGN_NOTE_NAME_ITEM = "$TITLE"
Const
NOTE_CLASS_DOCUMENT = &H0001 ' document note
Const NOTE_CLASS_DATA =
NOTE_CLASS_DOCUMENT ' old name for document note
Const NOTE_CLASS_INFO =
&H0002 ' notefile info (help-about) note
Const NOTE_CLASS_FORM =
&H0004 ' form note
Const NOTE_CLASS_VIEW = &H0008 ' view note
Const NOTE_CLASS_ICON = &H0010 ' icon note
Const NOTE_CLASS_DESIGN =
&H0020 ' design note collection
Const NOTE_CLASS_ACL = &H0040 ' acl
note
Const NOTE_CLASS_HELP_INDEX = &H0080 ' Notes product help index
note
Const NOTE_CLASS_HELP = &H0100 ' designer's help note
Const
NOTE_CLASS_FILTER = &H0200 ' filter note
Const NOTE_CLASS_FIELD =
&H0400 ' field note
Const NOTE_CLASS_REPLFORMULA = &H0800 '
replication formula
Const NOTE_CLASS_PRIVATE = &H1000
Const
NOTE_CLASS_ALLNONDATA = &H7FFE
Const DESIGN_FLAG_ADD = "A"
Const
DESIGN_FLAG_ANTIFOLDER = "a" ' VIEW: Indicates that a view is an antifolder view
Const DESIGN_FLAG_BACKGROUND_FILTER = "B" ' FILTER: Indicates
FILTER_TYPE_BACKGROUND is asserted
Const DESIGN_FLAG_INITBYDESIGNONLY="b" ' VIEW: Indicates view can be initially built only by designer and above
Const
DESIGN_FLAG_NO_COMPOSE = "C" ' FORM: Indicates a form that is used only for
' query by form (not on compose menu).
Const DESIGN_FLAG_CALENDAR_VIEW =
"c" ' VIEW: Indicates a form is a calendar style view.
Const
DESIGN_FLAG_NO_QUERY = "D" ' FORM: Indicates a form that should not be used in
query by form
Const DESIGN_FLAG_DEFAULT_DESIGN = "d" ' ALL: Indicates the
default design note for it"s class (used for VIEW)
Const
DESIGN_FLAG_MAIL_FILTER = "E" ' FILTER: Indicates FILTER_TYPE_MAIL is asserted
Const DESIGN_FLAG_PUBLICANTIFOLDER = "e" ' VIEW: Indicates that a view is a
public antifolder view
Const DESIGN_FLAG_FOLDER_VIEW = "F" ' VIEW: This is a
V4 folder view.
Const DESIGN_FLAG_V4AGENT = "f" ' FILTER: This is a V4 agent
Const DESIGN_FLAG_VIEWMAP = "G" ' VIEW: This is
ViewMap/GraphicView/Navigator
Const DESIGN_FLAG_OTHER_DLG = "H" ' ALL:
Indicates a form that is placed in Other... dialog
Const
DESIGN_FLAG_V4PASTE_AGENT = "I" ' FILTER: This is a V4 paste agent
Const
DESIGN_FLAG_IMAGE_RESOURCE = "i" ' FORM: Note is a shared image resource
Const DESIGN_FLAG_JAVA_AGENT = "J" ' FILTER: If its Java
Const
DESIGN_FLAG_JAVA_AGENT_WITH_SOURCE = "j" ' FILTER: If it is a java agent with
java source code.
Const DESIGN_FLAG_LOTUSSCRIPT_AGENT = "L" ' FILTER: If its
LOTUSSCRIPT
Const DESIGN_FLAG_DELETED_DOCS = "l" ' VIEW: Indicates that a
view is a deleted documents view
Const DESIGN_FLAG_QUERY_MACRO_FILTER = "M"
' FILTER: Stored FT query AND macro
Const DESIGN_FLAG_SITEMAP = "m" '
FILTER: This is a site(m)ap.
Const DESIGN_FLAG_NEW = "N" ' FORM: Indicates
that a subform is listed when making a new form.
Const
DESIGN_FLAG_HIDE_FROM_NOTES = "n" ' ALL: notes stamped with this flag
'will
be hidden from Notes clients
'We need a separate value here
'because it
Is possible To be
'hidden from V4 AND to be hidden
'from Notes, and
clearing one
'should not clear the other
Const
DESIGN_FLAG_QUERY_V4_OBJECT = "O" ' FILTER: Indicates V4 search bar query object
- used in addition to "Q"
Const DESIGN_FLAG_PRIVATE_STOREDESK = "o" ' VIEW:
If Private_1stUse, store the private view in desktop
Const
DESIGN_FLAG_PRESERVE = "P" ' ALL: related to data dictionary
Const
DESIGN_FLAG_PRIVATE_1STUSE = "p" ' VIEW: This is a private copy of a private on
first use view.
Const DESIGN_FLAG_QUERY_FILTER = "Q" ' FILTER: Indicates
full text query ONLY, no filter macro
Const DESIGN_FLAG_AGENT_SHOWINSEARCH =
"q" ' FILTER: Search part of this agent should be shown in search bar
Const
DESIGN_FLAG_REPLACE_SPECIAL = "R" ' SPECIAL: this flag is the opposite of
DESIGN_FLAG_PRESERVE, used
'only for the "About" and "Using" notes + the icon
bitmap in the icon note
Const DESIGN_FLAG_PROPAGATE_NOCHANGE = "r" ' DESIGN:
this flag is used to propagate the prohibition of design change
Const
DESIGN_FLAG_V4BACKGROUND_MACRO = "S" ' FILTER: This is a V4 background agent
Const DESIGN_FLAG_SCRIPTLIB = "s" ' FILTER: A database global script library
note
Const DESIGN_FLAG_VIEW_CATEGORIZED = "T" ' VIEW: Indicates a view that
is categorized on the categories field
Const DESIGN_FLAG_DATABASESCRIPT =
"t" ' FILTER: A database script note
Const DESIGN_FLAG_SUBFORM = "U" ' FORM:
Indicates that a form is a subform.
Const DESIGN_FLAG_AGENT_RUNASWEBUSER =
"u" ' FILTER: Indicates agent should run as effective user on web
Const
DESIGN_FLAG_PRIVATE_IN_DB = "V" ' ALL: This is a private element stored in the
database
Const DESIGN_FLAG_WEBPAGE = "W" ' FORM: Note is a WEBPAGE
Const
DESIGN_FLAG_HIDE_FROM_WEB = "w" ' ALL: notes stamped with this flag
'will be
hidden from WEB clients
' WARNING: A formula that build Design Collecion
relies on the fact that Agent Data"s
'$Flags is the only Desing Collection
element whose $Flags="X"
Const DESIGN_FLAG_V4AGENT_DATA = "X" ' FILTER: This
is a V4 agent data note
Const DESIGN_FLAG_SUBFORM_NORENDER = "x" ' SUBFORM:
indicates whether
'we should render a subform in
'the parent form
Const DESIGN_FLAG_NO_MENU = "Y" ' ALL: Indicates that folder/view/etc.
should be hidden from menu.
Const DESIGN_FLAG_SACTIONS = "y" ' Shared
actions note
Const DESIGN_FLAG_MULTILINGUAL_PRESERVE_HIDDEN = "Z" ' ALL:
Used to indicate design element was hidden
' before the "Notes Global
Designer" modified it.
' (used with the "!" flag)
Const
DESIGN_FLAG_FRAMESET = "#" ' FORM: Indicates that this is a frameset note
Const DESIGN_FLAG_MULTILINGUAL_ELEMENT = "!"' ALL: Indicates this design
element supports the
' "Notes Global Designer" multilingual addin
Const
DESIGN_FLAG_JAVA_RESOURCE = "@" ' FORM: Note is a shared Java resource
Const
DESIGN_FLAG_HIDE_FROM_V3 = "3" ' ALL: notes stamped with this flag
' will be
hidden from V3 client
Const DESIGN_FLAG_HIDE_FROM_V4 = "4" ' ALL: notes
stamped with this flag
' will be hidden from V4 client
Const
DESIGN_FLAG_HIDE_FROM_V5 = "5" ' FILTER: "Q5"= hide from V4.5 search list
'
ALL OTHER: notes stamped with this flag
' will be hidden from V5 client
Const DESIGN_FLAG_HIDE_FROM_V6 = "6" ' ALL: notes stamped with this flag
'will be hidden from V6 client
Const DESIGN_FLAG_HIDE_FROM_V7 = "7" '
ALL: notes stamped with this flag
'will be hidden from V7 client
Const
DESIGN_FLAG_HIDE_FROM_V8 = "8" ' ALL: notes stamped with this flag
'will be
hidden from V8 client
Const DESIGN_FLAG_HIDE_FROM_V9 = "9" ' ALL: notes
stamped with this flag
'will be hidden from V9 client
Const
DESIGN_FLAG_MUTILINGUAL_HIDE = "0" ' ALL: notes stamped with this flag
'will
be hidden from the client
'usage is for different language
'versions of
the design list to be
'hidden completely
' These are the flags
that help determine the type of a design element.
' These flags are used to
sub-class the note classes, and cannot be
' changed once they are created
(for example, there is no way to change
' a form into a subform).
Const DESIGN_FLAGS_SUBCLASS = "UW#yi@GFXstm"
' These are the
flags that can be used to distinguish between two
' design elements that have
the same class, subclass (see DESIGN_FLAGS_SUBCLASS),
' and name.
Const DESIGN_FLAGS_DISTINGUISH = "nw3456789"
Const
ERR_BASE_CLASS_INSTANTIATED = 10452
Const ERR_BASE_CLASS_INSTANTIATED_MESSAGE
= "You cannot instantiate this class directly"
Public Class
DatabaseDesign
'PUBLIC MEMBERS
Public cacheDocuments As
Integer
'PRIVATE MEMBERS
Private db As NotesDatabase
Private forms
As Variant
Private views As Variant
Private filters As Variant
Private
fields As Variant
Sub new( database As NotesDatabase)
If
isAbstractClass Then
'this prevents the base class from being instantiated
directly
Error ERR_BASE_CLASS_INSTANTIATED,
ERR_BASE_CLASS_INSTANTIATED_MESSAGE
End If
Set db =
database
cacheDocuments = True
End Sub
Private Function
isAbstractClass As Integer
'this must be overridden and return false
'this
prevents the base class from being instantiated directly
isAbstractClass =
True
End Function
'PUBLIC PROCEDURES
Property Get formDocuments
As Variant
FormDocuments = getDesignDocuments( NOTE_CLASS_FORM, "*[" &
DESIGN_FLAGS_SUBCLASS & "]*", True)
End Property
Property Get
subformDocuments As Variant
subformDocuments = getDesignDocuments(
NOTE_CLASS_FORM, "*[" & DESIGN_FLAG_SUBFORM & "]*", False)
End
Property
Property Get pageDocuments As Variant
pageDocuments =
getDesignDocuments( NOTE_CLASS_FORM, "*[" & DESIGN_FLAG_WEBPAGE & "]*",
False)
End Property
Property Get imageDocuments As
Variant
imageDocuments = getDesignDocuments( NOTE_CLASS_FORM, "*[" &
DESIGN_FLAG_IMAGE_RESOURCE & "]*", False)
End Property
Property
Get javaResourceDocuments As Variant
javaResourceDocuments =
getDesignDocuments( NOTE_CLASS_FORM, "*[" & DESIGN_FLAG_JAVA_RESOURCE
&"]*", False)
End Property
Property Get allDesignDocuments As
Variant
allDesignDocuments = getDesignDocuments( _
NOTE_CLASS_FORM Or
_
NOTE_CLASS_VIEW Or _
NOTE_CLASS_ICON Or _
NOTE_CLASS_HELP Or
_
NOTE_CLASS_FILTER Or _
NOTE_CLASS_FIELD Or _
NOTE_CLASS_REPLFORMULA
Or _
NOTE_CLASS_INFO Or _
NOTE_CLASS_HELP _
,"*[X]*", True )
End
Property
Property Get viewDocuments As Variant
viewDocuments =
getDesignDocuments( NOTE_CLASS_VIEW, "*["&DESIGN_FLAGS_SUBCLASS & "]*",
True )
End Property
Property Get folderDocuments As
Variant
folderDocuments = getDesignDocuments( NOTE_CLASS_VIEW, "*["&
DESIGN_FLAG_FOLDER_VIEW & "]*", False )
End Property
Property Get
navigatorDocuments As Variant
navigatorDocuments = getDesignDocuments(
NOTE_CLASS_VIEW, "*["& DESIGN_FLAG_VIEWMAP & "]*", False )
End
Property
Property Get framesetDocuments As Variant
FramesetDocuments =
getDesignDocuments( NOTE_CLASS_FORM, "*[" & DESIGN_FLAG_FRAMESET & "]*",
False )
End Property
Property Get scriptLibraryDocuments As
Variant
scriptLibraryDocuments = getDesignDocuments( NOTE_CLASS_FILTER, "*["
& DESIGN_FLAG_SCRIPTLIB & "]*", False )
End Property
Property
Get agentDocuments As Variant
agentDocuments = getDesignDocuments(
NOTE_CLASS_FILTER, "*[" & DESIGN_FLAGS_SUBCLASS & "]*", True)
End
Property
Property Get databaseScriptDocuments As
Variant
databaseScriptDocuments = getDesignDocuments( NOTE_CLASS_FILTER, "*["
& DESIGN_FLAG_DATABASESCRIPT & "]*", False)
End
Property
Property Get outlineDocuments As Variant
outlineDocuments =
getDesignDocuments( NOTE_CLASS_FILTER, "*[" & DESIGN_FLAG_SITEMAP &
"]*", False)
End Property
Property Get sharedFieldDocuments As
Variant
sharedFieldDocuments = getDesignDocuments( NOTE_CLASS_FIELD, "*",
False)
End Property
Property Get replicationSettingsDocuments As
Variant
replicationSettingsDocuments =
getDesignDocuments(NOTE_CLASS_REPLFORMULA, "*", False)
End
Property
Property Get sharedActionDocuments As
Variant
sharedActionDocuments = getDesignDocuments(NOTE_CLASS_FORM , "*["
& DESIGN_FLAG_SACTIONS & "]*", False)
End Property
Property
Get iconDocuments As Variant
iconDocuments =
getDesignDocuments(NOTE_CLASS_ICON , "*", False)
End
Property
Property Get helpAboutDocuments As Variant
helpAboutDocuments
= getDesignDocuments(NOTE_CLASS_INFO , "*", False)
End
Property
Property Get helpUsingDocuments As Variant
helpUsingDocuments
= getDesignDocuments(NOTE_CLASS_HELP , "*", False)
End
Property
'PUBLIC METHODS
Public Function getFormByName( formname As
String) As NotesDocument
Set getFormByName = findElementByTitle( formname,
Me.formDocuments)
End Function
Public Function getViewByName( formname
As String) As NotesDocument
Set getViewByName = findElementByTitle( formname,
Me.viewDocuments)
End Function
Public Function getFramesetByName(
formname As String) As NotesDocument
Set getFramesetByName =
findElementByTitle( formname, Me.framesetDocuments)
End
Function
Public Function getFolderByName( formname As String) As
NotesDocument
Set getFolderByName = findElementByTitle( formname,
Me.folderDocuments)
End Function
Public Function
getScriptLibraryByName( formname As String) As NotesDocument
Set
getScriptLibraryByName = findElementByTitle( formname,
Me.scriptLibraryDocuments)
End Function
Public Function
getImageByName( formname As String) As NotesDocument
Set getImageByName =
findElementByTitle( formname, Me.imageDocuments)
End Function
Public
Function getNavigatorByName( formname As String) As NotesDocument
Set
getNavigatorByName = findElementByTitle( formname, Me.navigatorDocuments)
End
Function
Public Function getJavaResourceByName( formname As String) As
NotesDocument
Set getJavaResourceByName = findElementByTitle( formname,
Me.javaResourceDocuments)
End Function
Public Function
getOutlineByName( formname As String) As NotesDocument
Set getOutlineByName =
findElementByTitle( formname, Me.outlineDocuments)
End Function
Public
Function getAgentByName( formname As String) As NotesDocument
Set
getAgentByName = findElementByTitle( formname, Me.agentDocuments)
End
Function
Public Function getPageByName( formname As String) As
NotesDocument
Set getPageByName = findElementByTitle( formname,
Me.pageDocuments)
End Function
Public Function getSubformByName(
formname As String) As NotesDocument
Set getSubformByName =
findElementByTitle( formname, Me.subformDocuments)
End Function
Public
Function getSharedFieldByName( formname As String) As NotesDocument
Set
getSharedFieldByName = findElementByTitle( formname,
Me.sharedFieldDocuments)
End Function
![]() | ![]() |
![]() | Inside of a Domino Database exists data documents and design documents. The design documents are the forms, views, agents, etc that make up a databases design. The standard Notes classes allow easy access to the data documents, but do not provide any easy methods for accessing the design. The purpose of the DatabaseDesign class is to allow you easy access to the design documents in a DominoDatabase in LotusScript. It returns the design documents, at which point they can be examined, modified, copied to other databases or deleted. The documents are returned as standard NotesDocument objects, so once retrieved you can perform any operation on them that is allowed in a regular NotesDocument. ---How To Use --- To use the DatabaseDesign class, you must first copy and paste the DBDesign script library into the database where you wish to use it. Inside of a Domino Database exists data documents and design documents. The design documents are the forms, views, agents, etc that make up a databases design. The standard Notes classes allow easy access to the data documents, but do not provide any easy methods for accessing the design. The purpose of the DatabaseDesign class is to allow you easy access to the design documents in a DominoDatabase in LotusScript. It returns the design documents, at which point they can be examined, modified, copied to other databases or deleted. The documents are returned as standard NotesDocument objects, so once retrieved you can perform any operation on them that is allowed in a regular NotesDocument. ---How To Use --- To use the DatabaseDesign class, you must first copy and paste the DBDesign script library into the database where you wish to use it. Then in the script which you need to use the library, add this line to the Options section. Use "DBDesign" Then to instantiate a new DatabaseDesign object, call the createDatabaseDesign function. Dim session as New NotesSession Dim db as NotesDatabase Dim dbDesign as DatabaseDesign Set db = session.currentDatabase Set dbDesign = createDatabaseDesign( db) 'To get all the forms in a database, simply get the formDocuments property. Dim forms as variant forms = dbDesign.formDocuments 'Check to make sure there are forms before processing If Not IsEmpty( forms) Then Forall formdoc In forms 'This prints out all the form names print formdoc.getItemValue( "$Title")(0) end Forall End If ' To get a specific form in a database, pass in the form name to the getFormByName method. Dim form as NotesDocument set form = dbDesign.getFormByName( "MyForm") If Not form Is Nothing Then 'do something with form here End If 'To copy a design element to another database, use the NotesDocument.copyToDatabase method 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 ---Properties--- Property agentDocuments as Variant Returns all agents as an array of NotesDocuments. If none could be retrieved, it returns a empty variant. Property cacheDocuments as Integer This is a readable and writable property. When true, it caches the retrieval of design notes in memory to speed up subsequent retrievals. It is true by default. Property databaseScriptDocuments as Variant Returns all database scripts as an array of NotesDocuments, typically there will be only one per database. If none could be retrieved, it returns a empty variant. Read only. Property folderDocuments as Variant Returns all folders as an array of NotesDocuments. If none could be retrieved, it returns a empty variant. Read only. Property formDocuments as Variant Returns all forms as an array of NotesDocuments. If none could be retrieved, it returns a empty variant. Read only. Property framesetDocuments as Variant Returns all framesets as an array of NotesDocuments. If none could be retrieved, it returns a empty variant. Read only. Property helpAboutDocuments as Variant Returns all help about documents as an array of NotesDocuments, typically there will be only one per database.. If none could be retrieved, it returns a empty variant. Read only. Property helpUsingDocuments as Variant Returns all help using documents as an array of NotesDocuments, typically there will be only one per database.. If none could be retrieved, it returns a empty variant. Read only. Property iconDocuments as Variant Returns all database icons as an array of NotesDocuments, typically there will be only one per database.. If none could be retrieved, it returns a empty variant. Read only. Property imageDocuments as Variant Returns all images as an array of NotesDocuments. If none could be retrieved, it returns a empty variant. Read only. Property javaResourceDocuments as Variant Returns all Java resources/applets as an array of NotesDocuments. If none could be retrieved, it returns a empty variant. Read only. Property navigatorDocuments as Variant Returns all navigators as an array of NotesDocuments. If none could be retrieved, it returns a empty variant. Read only. Property outlineDocuments as Variant Returns all outlines as an array of NotesDocuments. If none could be retrieved, it returns a empty variant. Read only. Property pageDocuments as Variant Returns all pages as an array of NotesDocuments. If none could be retrieved, it returns a empty variant. Read only. Property replicationSettingsDocuments as Variant Returns all replication settings as an array of NotesDocuments. If none could be retrieved, it returns a empty variant. Read only. Property scriptLibraryDocuments as Variant Returns all script libraries as an array of NotesDocuments. If none could be retrieved, it returns a empty variant. Read only. Property sharedFieldDocuments as Variant Returns all shared fields as an array of NotesDocuments. If none could be retrieved, it returns a empty variant. Read only. Property subformDocuments as Variant Returns all subforms as an array of NotesDocuments. If none could be retrieved, it returns a empty variant. Read only. Property viewDocuments as Variant Returns all views as an array of NotesDocuments. If none could be retrieved, it returns a empty variant. Read only. ---Methods--- Public Function designDocumentAliases( doc As NotesDocument) As Variant Will return as string array containing a design documents title and all its aliases. Public Function getFormByName( formName As String) As NotesDocument If available, it returns the form whose name or alias matches formName, otherwise it returns Nothing. Public Function getViewByName( formName As String) As NotesDocument If available, it returns the view whose name or alias matches formName, otherwise it returns Nothing. Public Function getFramesetByName( formName As String) As NotesDocument If available, it returns the frameset whose name or alias matches formName, otherwise it returns Nothing. Public Function getFolderByName( formName As String) As NotesDocument If available, it returns the folder whose name or alias matches formName, otherwise it returns Nothing. Public Function getScriptLibraryByName( formName As String) As NotesDocument If available, it returns the script library whose name or alias matches formName, otherwise it returns Nothing. Public Function getImageByName( formName As String) As NotesDocument If available, it returns the image whose name or alias matches formName, otherwise it returns Nothing. Public Function getNavigatorByName( formName As String) As NotesDocument If available, it returns the navigator whose name or alias matches formName, otherwise it returns Nothing. Public Function getJavaResourceByName( formName As String) As NotesDocument If available, it returns the java resource whose name or alias matches formName, otherwise it returns Nothing. Public Function getOutlineByName( formName As String) As NotesDocument If available, it returns the outline whose name or alias matches formName, otherwise it returns Nothing. Public Function getAgentByName( formName As String) As NotesDocument If available, it returns the agent whose name or alias matches formName, otherwise it returns Nothing. Public Function getPageByName( formName As String) As NotesDocument If available, it returns the page whose name or alias matches formName, otherwise it returns Nothing. Public Function getSubformByName( formName As String) As NotesDocument If available, it returns the subform whose name or alias matches formName, otherwise it returns Nothing. Public Function getSharedFieldByName( formName As String) As NotesDocument If available, it returns the shared field whose name or alias matches formName, otherwise it returns Nothing. |
steven