Partial hide design

In some cases a developer needs to alter some design elements in the client's locations such as form fields, view columns, pages or any other elements, but he/she needs all the scripting to be hidden even in the forms and views.

In ND6 we have the new class (NotesNoteCollection) that is useful and powerful to navigate, control and modify all database designs and data documents.

I have also submitted Partial replace design, which has to do with the NotesNoteCollection class. I now submit this tip, which is (I believe) is very useful for developers using the same class convention.

This routine requires designer ACL level or higher to be executed.

Note that you must keep a copy of your design before executing this code. Also, after executing this routine, you may alter the design elements (forms, pages, views and folders) and save them without losing the scripting inside them, but it very important not to alter the scripting areas. Doing so may cause you lose any call for the used routine inside them.

Do you have comments on this tip? Let us know.

This tip was submitted to the SearchDomino.com tip library by member Sirry Hboos. Please let others know how useful it is via the rating scale below. Do you have a useful Lotus Notes, Domino, Workplace or WebSphere tip or code snippet to share? Submit it to our monthly tip contest and you could win a prize.
Here is a sample for using this call by an agent or a button.

Sub Initialize
 Dim s As New NotesSession
 Dim db As NotesDatabase

 Dim DocTypes(0 To 1)
 Set db = s.CurrentDatabase
 If db.QueryAccess(s.UserName) < ACLLevel_Designer Then
  Msgbox "Your access level doesn't allow you to execute this action."
  Exit Sub
 End If

Call HideDesignElements(db, DocTypes)
End Sub

Public Sub HideDesignElements(db As NotesDatabase, DocTypes As Variant)
DocTypes are arrays of strings

This routine hides the script of doctypes design elements

 'here are some fields witch carrying the scripting text according to the design
document Const fnScriptLib = "$ScriptLib" Const fnDBScript = "$DBScript" Const fnFormGlobalScript = "$Script" Const fnFormScript = "$$FormScript" Const fnViewGlobalScript = "$ViewGlobalScript" Const fnViewScript = "$ViewScript" Dim DesignDocs() As NotesDocument Dim fns As Variant Dim ErrMsg As String Dim x As Long, updated As Boolean For x = Lbound(DocTypes) To Ubound(DocTypes) Gosub GetScriptFields If fns(0) = "" Then Goto GetNextType If Not GetDesignDocs(db, DocTypes(x), DesignDocs(), ErrMsg) Then
Goto GetNextType updated = False Forall doc In DesignDocs Forall fn In fns If doc.HasItem(fn) Then Call doc.RemoveItem(fn) updated = True End If End Forall If updated Then Print "Updating " & doc.GetItemValue("$Title")(0) Call doc.Save(True, False) End If End Forall GetNextType: Next Exit Sub '================================================== GetScriptFields: Redim fns(0) Select Case DocTypes(x) Case "SCRIPTLIBRARIES" Redim fns(0) fns(0) = fnScriptLib Case "DATABASESCRIPT" Redim fns(0) fns(0) = fnDBScript Case "FORMS", "SUBFORMS", "PAGES" Redim fns(0 To 1) fns(0) = fnFormGlobalScript fns(1) = fnFormScript Case "VIEWS" Redim fns(0 To 1) fns(0) = fnViewGlobalScript fns(1) = fnViewScript Case "FOLDERS" Redim fns(0 To 1) fns(0) = fnViewGlobalScript fns(1) = fnViewScript Case Else 'not supported End Select Return End Sub '********************************************************** Private Function GetDesignDocs(db As NotesDatabase, Byval DesignDocType As
String, DesignDocs() As NotesDocument, ErrMsg As String) As Boolean Const LSI_THREAD_PROC = 1 Dim nc As NotesNoteCollection Dim notedoc As NotesDocument Dim nid As String Dim TypeNotFound As Boolean Dim msgNotFound As String Dim x As Long, y As Long msgNotFound = "No design documents found from type " & DesignDocType Set nc = db.CreateNoteCollection(False) Call SelectDesignTypeCollection(nc, DesignDocType, TypeNotFound) If TypeNotFound Then ErrMsg = msgNotFound Exit Function Else Call nc.BuildCollection End If nid = nc.GetFirstNoteId y = 0 Redim DesignDocs(y) For x = 1 To nc.Count Set notedoc = db.GetDocumentByID(nid) If notedoc Is Nothing Then Goto GetNextNote Redim Preserve DesignDocs(y) Set DesignDocs(y) = notedoc y = y + 1 GetNextNote: nid = nc.GetNextNoteId(nid) Next If DesignDocs(0) Is Nothing Then ErrMsg = msgNotFound Else GetDesignDocs = True End If End Function '********************************************************** Private Sub SelectDesignTypeCollection(nc As NotesNoteCollection, Byval DocType
As String, NotFound As Boolean) Select Case Ucase(DocType) Case "ACTIONS" nc.SelectActions = True Case "AGENTS" nc.SelectAgents = True Case "DATABASESCRIPT" nc.SelectDatabaseScript = True Case "DATACONNECTIONS" nc.SelectDataConnections = True Case "FOLDERS" nc.SelectFolders = True Case "FORMS" nc.SelectForms = True Case "FRAMESETS" nc.SelectFramesets = True Case "HELPABOUT" nc.SelectHelpAbout = True Case "HELPINDEX" nc.SelectHelpIndex = True Case "HELPUSING" nc.SelectHelpUsing = True Case "ICON" nc.SelectIcon = True Case "IMAGERESOURCES" nc.SelectImageResources = True Case "FORMULA" nc.SelectionFormula = True Case "JAVARESOURCES" nc.SelectJavaResources = True Case "MISCCODEELEMENTS" nc.SelectMiscCodeElements = True Case "MISCFORMATELEMENTS" nc.SelectMiscFormatElements = True Case "INDEXELEMENTS" nc.SelectMiscIndexElements = True Case "NAVIGATORS" nc.SelectNavigators = True Case "OUTLINES" nc.SelectOutlines = True Case "PAGES" nc.SelectPages = True Case "REPLICATIONFORMULAS" nc.SelectReplicationFormulas = True Case "SCRIPTLIBRARIES" nc.SelectScriptLibraries = True Case "SHAREDFIELDS" nc.SelectSharedFields = True Case "STYLESHEETRESOURCES" nc.SelectStyleSheetResources = True Case "SUBFORMS" nc.SelectSubforms = True Case "VIEWS" nc.SelectViews = True Case Else NotFound = True End Select End Sub

Do you have comments on this tip? Let us know.

This was first published in February 2004

There are Comments. Add yours.

TIP: Want to include a code block in your comment? Use <pre> or <code> tags around the desired text. Ex: <code>insert code</code>

REGISTER or login:

Forgot Password?
By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy
Sort by: OldestNewest

Forgot Password?

No problem! Submit your e-mail address below. We'll send you an email containing your password.

Your password has been sent to:

Disclaimer: Our Tips Exchange is a forum for you to share technical advice and expertise with your peers and to learn from other enterprise IT professionals. TechTarget provides the infrastructure to facilitate this sharing of information. However, we cannot guarantee the accuracy or validity of the material submitted. You agree that your use of the Ask The Expert services and your reliance on any questions, answers, information or other materials received through this Web site is at your own risk.