Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: TMC am 06.09.04 - 23:43:33

Titel: ViewSwitchForm in Lotus Script?
Beitrag von: TMC am 06.09.04 - 23:43:33
Ich suche nach einer Möglichkeit, in LotusScript ein "ViewSwitchForm" auszuführen, um dann ein Dokument zu drucken.
Stunts wie das Feld "FORM" temporär neu zu belegen, speichern, reopen etc. möchte ich eigentlich vermeiden, da unter Umständen der User, der das Dokument druckt, gar keine Schreibrechte hat, sondern nur "Reader" der DB ist.

Matthias
Titel: Re:ViewSwitchForm in Lotus Script?
Beitrag von: elajen am 07.09.04 - 07:46:58
Hallo,

dann mach doch einen anderen Stunt und kopiere das Dokument in ein neues, ändere das Form und drucks dann. Speicher brauchst Du ja nicht.

Gruß von Ekki.
Titel: Re:ViewSwitchForm in Lotus Script?
Beitrag von: Glombi am 07.09.04 - 07:57:13
Das geht nicht, wenn der User nur Leser ist.

Besser ist: Erstelle eine Ansicht mit einer Maskenformel. Du kannst dann das Dokument über diese View aufrufen und drucken.

Andreas
Titel: Re:ViewSwitchForm in Lotus Script?
Beitrag von: koehlerbv am 07.09.04 - 08:59:28
Da gibt es ein paar mehr Möglichkeiten:
- Drucken über eine bestehende View und dabei den formoverride-Parameter nutzen
- Direkt aus dem Dokument (oder nach anderer Instantiierung des zu druckenden Dokuments:
Code
Set doc = ws.CurrentDocument.Document
   
   doc.Form = "PrintForm"
   Set uidoc = ws.EditDocument( False, doc, True)
   Call uidoc.Print (1)
   Call uidoc.close

Letzteres ist natürlich nix für User mit nur Leseberechtigung.
Das Verfahren wird also immer vom Kontext bestimmt.

Bernhard
Titel: Re:ViewSwitchForm in Lotus Script?
Beitrag von: elajen am 07.09.04 - 09:55:14
Hallo,

daß mit dem Dokument erstellen geht auch als Leser. Nur darf es halt nicht gespeichert werden. :)
Ich würde dann noch das Feld saveoptions = "0" anlegen.

Gruß von Ekki
Titel: Re:ViewSwitchForm in Lotus Script?
Beitrag von: TMC am 07.09.04 - 20:17:01
Danke für Eure Tipps !

Ich habs jetzt mit dem Tipp von Ekki erfolgreich getestet:

Public Sub PrintDocument(doc As NotesDocument, strFormName As String)
   
   Dim session As New NotesSession
   Dim uiws As New NotesUIWorkspace   
   Dim db As NotesDatabase
   Dim uidocTemp As NotesUIDocument
   Dim docTemp As NotesDocument
   Set db = session.CurrentDatabase   
   
   Set docTemp = New NotesDocument(db)
   doc.Form = strFormName
   Set uidocTemp = uiws.EditDocument( False, doc, True)
   Call uidocTemp.Print (1)
   Call uidocTemp.close
   
End Sub

Matthias
Titel: Re:ViewSwitchForm in Lotus Script?
Beitrag von: Glombi am 07.09.04 - 20:55:08
Wozu brauchst Du denn docTemp ?
Irgendwie blicke ich es nicht.

Andreas
Titel: Re:ViewSwitchForm in Lotus Script?
Beitrag von: TMC am 07.09.04 - 21:02:26
Ups, da hab ich wohl zu schnell getippt. docTemp braucht's da eigentlich gar nicht.  ;D

Public Sub PrintDocument(doc As NotesDocument, strFormName As String)
   
   Dim session As New NotesSession
   Dim uiws As New NotesUIWorkspace  
   Dim db As NotesDatabase
   Dim uidocTemp As NotesUIDocument
   Set db = session.CurrentDatabase  
   
   doc.Form = strFormName
   Set uidocTemp = uiws.EditDocument( False, doc, True)
   Call uidocTemp.Print (1)
   Call uidocTemp.close
   
End Sub

Es kann so auch ein User printen, der nur Leserechte hat....
Titel: Re:ViewSwitchForm in Lotus Script?
Beitrag von: koehlerbv am 07.09.04 - 21:06:23
Und da wir jetzt wieder auf genau einer Welle schwimmen, kannst Du auch gleich noch
session
db
und ihre Bezüge 'rauswerfen  ;D

Bernhard
Titel: Re:ViewSwitchForm in Lotus Script?
Beitrag von: TMC am 07.09.04 - 21:12:31
Stimmt  ;D

Ich hatte eigentlich auch gemeint, dies hier zutrifft:
Letzteres ist natürlich nix für User mit nur Leseberechtigung.

Aber man kann wohl wirklich einfach im Backend das Form-Item ändern, das Dok im Frontend öffnen, und voilà, da ist unser @Command([ViewSwitchForm]), auch für User nur mit Leserechten.
Titel: Re:ViewSwitchForm in Lotus Script?
Beitrag von: koehlerbv am 07.09.04 - 21:28:30
Jo, da hatte ich beim Schreiben auch zu kurz gedacht - obwohl ich das in etlichen Apps seit langem so mache. Im Backend greift die ACL (tatsächlich: Wirklich logischerweise) an anderer (späterer) Stelle als im Frontend.

Simpelstes Beispiel:
Set doc = NotesView.GetDocumentByKey ("key")
doc.FieldX = "blabla"
Set item = doc.getFirstItem ("FieldY")
Call item.Remove

... und erst jetzt würde es kanllen für Leser:
Call doc.Save (True, False, True).

Nochmals: Sorry, dass ich beim entsprechenden Posting derart oberflächlich gedacht habe. Ich wusst's ja besser ...

Bernhard