Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Wiesel am 04.06.09 - 09:07:35

Titel: Aufruf Dokument mit Maskenwechsel
Beitrag von: Wiesel am 04.06.09 - 09:07:35
Hallo!
Ich möchte aus einer Ansicht heraus ein gewähltes Dokument mittels einer anderen Form öffnen.

Dazu habe ich in der Ansicht eine Schaltfläche mit diesem Script:

Sub Click(Source As Button)
   Dim workspace As New NotesUIWorkspace     
   Dim session As New NotesSession
   Dim doc As NotesDocument
   Dim uidoc As NotesUIDocument
   
   Set doc = session.DocumentContext
   
   If doc.form(0) = "Vorlage" Then
      doc.form = "(DruckVorlage)"
      
      Set uidoc = workspace.EditDocument( False , doc)   
      
   End If
   
End Sub

Aber bei der Zeile "Set uidoc = Workspace..." steigt mir Notes immer aus.

Was fehlt mir denn da?

Danke für Eure Hilfe im Voraus!
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: s_Old am 04.06.09 - 09:12:27
Guten Morgen!

Wenn du nicht noch großartig was anderes vorhast würde ich das mit einem simplen
Code
@Command( [SwitchForm] ; Maskenname )
machen.
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: ascabg am 04.06.09 - 09:31:33
Hallo,

Das was auch noch funktioniert ist eine "Maskenformel".


Andreas
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: Wiesel am 04.06.09 - 09:33:20
Das kannte ich noch gar nicht.
Hab das jetzt in die Aktion eingebaut. Leider verweigert mir Notes aber den Befehl. Kriege die Fehlermeldung "Angegebener Befehl kann nicht ausgeführt werden".
Habe jetzt einfach

@Command( [ViewSwitchForm]  )

in die Aktion gepackt.
Und ich möchte das auf jeden Fall in eine Aktion packen und nicht in eine Maskenformel.
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: ascabg am 04.06.09 - 09:39:26
@Wiesel,

Kleine Frage.
Was spricht denn gegen eine Maskenformel?


Andreas
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: Wiesel am 04.06.09 - 09:42:11
Ich möchte nicht generell oder abhängig von Usern die Maske ändern, sondern nur bei Aufruf über eine bestimmte Schaltfläche, da somit quasi eine Druckmaske geöffnet wird. Der Druck soll auch nicht automatisch stattfinden, sondern so soll die Möglichkeit der manuellen Druckereinstellung gegeben werden.
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: TRO am 04.06.09 - 10:42:38
   
Aber bei der Zeile "Set uidoc = Workspace..." steigt mir Notes immer aus.
Was heisst das "steigt aus"? Gibt es da eine Fehlermeldung?

Wenn Du mit dem uidoc-Object nix weiter machen möchtes in dem Programm, dann versuch es mal mit

call notesUIWorkspace.EditDocument( False, doc, True,, False )

( der letzte False-Parameter bedeutet [returnNotesUIDocument] )


Thomas
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: Wiesel am 04.06.09 - 10:58:54
Auchmit der Zeile steigt Notes aus. D.h. es stürzt komplett ab.
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: TRO am 04.06.09 - 11:15:47
sehe ich jetzt erst:

   Set doc = session.DocumentContext


Session.DocumentContext ist bei einem Button in einer Ansicht der vollkommen falsche Ansatz (DocumentContext arbeitet (siehe Hilfe) NUR in Agenten).

Richtig wäre:

set cdb = session.CurrentDatabase
set coll = cdb.UnprocessedDocuments
set doc = coll.GetFirstDocument



Thomas
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: ascabg am 04.06.09 - 11:25:02
@Thomas,

Dann kann man doch auch gleich auf die UIView-Klasse losgehen.

Code
Dim ses As New NotesSession

Dim uiws As New NotesUIWorkspace
Dim uivw As NotesUIView
Dim doc As NotesDocument

Set uivw = uiws.CurrentView
Set doc = ses.CurrentDatabase.GetDocumentByID(uivw.CaretNoteID)

Andreas
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: BigWim am 04.06.09 - 11:33:32
Das kannte ich noch gar nicht.
Hab das jetzt in die Aktion eingebaut. Leider verweigert mir Notes aber den Befehl. Kriege die Fehlermeldung "Angegebener Befehl kann nicht ausgeführt werden".
Habe jetzt einfach

@Command( [ViewSwitchForm]  )

in die Aktion gepackt.
Und ich möchte das auf jeden Fall in eine Aktion packen und nicht in eine Maskenformel.

Da fall ich auch immer wieder drauf rein!

Der Wechsel funktioniert nur im Bearbeitungsmodus des Dokuments. Versuch es so:

Code
@Command([EditDocument];1);
@Command( [ViewSwitchForm];"(DruckVorlage)")

Markus

Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: Wiesel am 04.06.09 - 11:56:58
Zu Andreas: Notes stürzt mir trotzdem ab.

Zu Markus: Da bekomme ich die Fehlermeldung: Angegebene Rahmengruppe nicht vorhanden, oder so ähnlich)
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: TRO am 04.06.09 - 12:32:19
@Andreas

@Thomas,

Dann kann man doch auch gleich auf die UIView-Klasse losgehen.

Code
Set doc = ses.CurrentDatabase.GetDocumentByID(uivw.CaretNoteID)

Andreas


Da kann man sich streiten, was sinnvoller ist.

CaretNoteID wirkt ja nur auf das Dok die Zeile, auf der ich im Moment stehe. Sind da auch Häkchen in der Ansicht führt das m.E. nur zur Verwirrung der User.

UnprocessedDocuments wirkt auf alle ausgewählten, also entweder auf alle "Häkchen-Doc" oder wenn keine Häkchen vorhanden, auf das, auf dem ich aktuell stehe. (das wäre dann in diesem Fall = Caret).

Mit UnprocessedDocuments kann dann auch schön alle Häkchen-Doc in einer Schleife abarbeiten.
Wie gesagt, alles Geschmackssache bzw. vom konkreten Einsatzfall abhängig.


@Wiesel:
Zu Andreas: Notes stürzt mir trotzdem ab.


Dann poste mal den kompletten, jetzt aktuellen Code.


Thomas
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: Wiesel am 04.06.09 - 12:50:32
Letzter Versuch war der hier:

Sub Click(Source As Button)
   Dim workspace As New NotesUIWorkspace     
   Dim session As New NotesSession
   Dim doc As NotesDocument
   Dim uidoc As NotesUIDocument
   
   Set doc = session.DocumentContext
   
   If doc.form(0) = "Vorlage" Then
      doc.form = "(DruckVorlage)"
      
      Call notesUIWorkspace.EditDocument( False, doc, True,, False )
      
   End If
   
End Sub
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: ascabg am 04.06.09 - 13:02:23
Dann versuch doch mal

Code
Set uidoc = workspace.EditDocument(False, doc)

anstatt von

Code
Call notesUIWorkspace.EditDocument( False, doc, True,, False )

wobei ich mich hier frage, woher kommt notesUIWorkspace.


Andreas
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: TRO am 04.06.09 - 13:12:18
grummel, bitte lies mein Posting #8 zum Thema "Session.DocumentContext", dann können wir über Deinen Code weiter sprechen.


Thomas
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: Wiesel am 04.06.09 - 13:21:52
Also, diesen Code habe ich gerade ausprobiert:

Sub Click(Source As Button)
   Dim workspace As New NotesUIWorkspace     
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim coll As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim uidoc As NotesUIDocument
   
   Set db = session.CurrentDatabase
   Set coll = db.UnprocessedDocuments
   Set doc = coll.GetFirstDocument
   
   If doc.form(0) = "Vorlage" Then
      doc.form = "(DruckVorlage)"
      
      Set uidoc = workspace.EditDocument(False, doc)
      
   End If
   
End Sub


Notes-Absturz!
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: ascabg am 04.06.09 - 13:32:07
Auch schon den Debugger angeworfen?


Andreas
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: Wiesel am 04.06.09 - 13:36:11
ja klar. Immer die Zeile

Set uidoc = workspace.EditDocument(False, doc)
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: ascabg am 04.06.09 - 13:57:54
Also dieser Code funktionier bei mir problemlos.

Code
Sub Click(Source As Button)
	Dim ses As New NotesSession
	
	Dim uiws As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	
	Dim col As NotesDocumentCollection
	Dim doc As NotesDocument
	
	Set col = ses.CurrentDatabase.UnprocessedDocuments
	If col Is Nothing Then Exit Sub
	If col.Count <= 0 Then Exit Sub
	
	Set doc = col.GetFirstDocument
	If Not (doc Is Nothing) Then
		doc.Form = "Test_Neu"
		
		Set uidoc = uiws.EditDocument(False, doc)
	End If
	
End Sub

Kann es sein, dass in Deiner Druckmaske irgendwelche Feldberechnungen/Feldbelegungen nicht sauber laufen?


Andreas
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: TRO am 04.06.09 - 13:59:23
Wie wäre es, wenn Du bitte meine Anregungen komplett in ein Stückchen Code einbauen würdest?


Sub Click(Source As Button)
   Dim workspace As New NotesUIWorkspace    
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim coll As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim uidoc As NotesUIDocument
   
   Set db = session.CurrentDatabase
   Set coll = db.UnprocessedDocuments
   Set doc = coll.GetFirstDocument
   
   If doc.form(0) = "Vorlage" Then
      doc.form = "(DruckVorlage)"
      
      Call workspace.EditDocument( False, doc, True,, False )
      
   End If
   
End Sub


Wenn das auch mit diesem Code nicht funktioniert (benutze ich seit Jahren ohne Probleme), dann suchst Du mit großer Wahrscheinlichkeit an der vollkommen falsche Stelle:
- denkbar wäre, dass die DaBa insgesamt 'ne Macke hat
- denkbar wäre, dass gar nicht die Zeile ...EdirDocument Notes abschießt, sondern dass der Fehler in der Maske "(Druckvorlage)" liegt (gibt es die überhaupt?) und diese Maske 'ne Hacke hat.


Thomas



Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: BigWim am 04.06.09 - 14:12:06
Zitat
Wenn das auch mit diesem Code nicht funktioniert (benutze ich seit Jahren ohne Probleme), dann suchst Du mit großer Wahrscheinlichkeit an der vollkommen falsche Stelle:

Dem würde ich voll und ganz anschließen, denn Probleme mit SwitchForm sind mir auch nicht untergekommen ...
Zitat
(Zu Markus: Da bekomme ich die Fehlermeldung: Angegebene Rahmengruppe nicht vorhanden, oder so ähnlich)

Markus
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: Wiesel am 04.06.09 - 15:18:40
Ok, ich hab das mal in einer anderen Datenbank ausprobiert und da klappt dieses SwitchForm in der Tat.

Dann muss ich da mal an der Maske rummachen.

Ich Danke Euch ganz herzlich!!!
Titel: Re: Aufruf Dokument mit Maskenwechsel
Beitrag von: Axel am 04.06.09 - 19:26:46
Mal ein paar Schüsse ins Blaue.

Vielleicht würde schon ein recompile aller Scripts helfen, oder auch schon ein einfaches compact der Datenbank.

Eventuell hilft auch ein löschen der cache.ndk.

Ich habe diesbezüglich schon die absurdesten Dinge erlebt.


Axel