Ach so, hier noch meine (Test-) Lösung:
Die Reader Items aus der Maske in eine Teilmaske gepackt, die eingebunden wird, wenn $PublicAccess != "1".
Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim currentDb As NotesDatabase
Set currentDb = session.CurrentDatabase
Dim col As NotesDocumentCollection
Set col = currentDb.UnprocessedDocuments
Dim doc As NotesDocument
Set doc = col.GetFirstDocument
Dim item As NotesItem
Set item = doc.GetFirstItem( "$PublicAccess" )
Dim q1 As String, q2 As String
q1 = {Möchten Sie die Auswahl des Services "} & doc.subject(0) & {" sperren?}
q2 = {Möchten Sie den Service "} & doc.subject(0) & {" für Web-Benutzer auswählbar machen?}
If Not item Is Nothing Then
If item.Text = "1" Then
If Msgbox( q1, 36, "Freigabe beenden" ) = 6 Then
Call blockDoc( doc )
End If
Else
If Msgbox( q2, 36, "Dokument freigeben" ) = 6 Then
Call publishDoc( doc )
End If
End If
Else
If Msgbox( q2, 36, "Dokument freigeben" ) = 6 Then
Call publishDoc( doc )
End If
End If
Call ws.ViewRefresh
End Sub
Zum veröffentlichen:
Sub publishDoc( doc As NotesDocument )
'Dokument fürs Web freigeben
'Alle Leserfelder in Textfelder umspeichern und aus dem Dokument entfernen
'$PublicAccess auf "1" setzen
Forall elem In doc.items
If elem.type = READERS Then
'Inhalt des Leserfeldes in ein Textfeld sichern
Call doc.ReplaceItemValue( "reader_" & elem.name, elem.values )
'Leserfeld löschen
Call doc.RemoveItem( elem.name )
End If
End Forall
Call doc.ReplaceItemValue( "$PublicAccess", "1" )
Call doc.Save( True, False, True )
End Sub
Zum sperren:
Sub blockDoc( doc As NotesDocument)
'Dokument für Web-Benutzer sperren
'$PublicAccess item entfernen
'Leserfelder setzen
Dim itemName As String, readerItem As NotesItem
Forall elem In doc.items
If Lcase( Left( elem.name, 7 ) ) = "reader_" Then
'Inhalt des Textfeldes in ein Leserfeld umspeichern
itemName = Replace( elem.name, "reader_", "" )
Set readerItem = New NotesItem( doc, itemName, elem.values, READERS )
'Textfeld löschen
Call doc.RemoveItem( elem.name )
End If
End Forall
Call doc.RemoveItem( "$PublicAccess" )
Call doc.Save( True, False, True )
End Sub