Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Andreas Huhn am 07.12.05 - 15:58:50

Titel: uidoc aus doc ermitteln
Beitrag von: Andreas Huhn am 07.12.05 - 15:58:50
Hallo,

gibt es eine allgmeine Form aus einer Variable die ein doc Element enthält eine entsprechende uidoc Variable mit dem uidoc zu füllen?

Die Frage ist absichtlich so allgemein gehalten, weil mich wirklich ein allgemeiner Weg interessieren würde.

Gruß,

Andreas
Titel: Re: uidoc aus doc ermitteln
Beitrag von: botschi am 07.12.05 - 16:02:40
Moin,

meinst Du

set uidoc = doc.document

 ???
Titel: Re: uidoc aus doc ermitteln
Beitrag von: rar am 07.12.05 - 16:15:20
Du verwechselst da was botschi. Du meinst wahrscheinlich
set doc = uidoc.Document

Mit
Set notesUIDocument = notesUIWorkspace.EditDocument(....)
kommt man eher ans ziel.

HTH
Titel: Re: uidoc aus doc ermitteln
Beitrag von: botschi am 07.12.05 - 16:29:23
Natürlich, Du hast Recht. set doc = uidoc.document ist richtig.
Mein Fehler...  ;D

Um auf das uidoc zu kommen ist der UIWorkspace das Richtige. Mit .EditDocument setzt man es sogar gleich ins Bearbeiten...
Titel: Re: uidoc aus doc ermitteln
Beitrag von: koehlerbv am 07.12.05 - 17:31:16
Mit .EditDocument setzt man es sogar gleich ins Bearbeiten...

Optional ja, aber das muss nicht sein. Primär öffnet das ein Backend-Dokument im FrontEnd - wenn gewünscht auch nur zum Anschauen  ;)

Bernhard
Titel: Re: uidoc aus doc ermitteln
Beitrag von: Andreas Huhn am 08.12.05 - 07:59:09
Aber uiworkspace öffnet mir einen workspace des gerade aktiven docs.
Ein Beispiel:


Set db = session.CurrentDatabase
Set response = source.Document
   
Set parent = db.GetDocumentByUNID ( response.ParentDocumentUNID )


parent enthält nun ein doc. Wie würde ich zu diesem doc das uidoc ermitteln?


Set parentuidoc =


Deswegen die Frage nach etwas allgemein gültigem.
Titel: Re: uidoc aus doc ermitteln
Beitrag von: Axel am 08.12.05 - 08:35:06
Hi,

das steht doch in den obigen Antworten.


Set parentuidoc = notesUIWorkspace.EditDocument(....)


Axel
Titel: Re: uidoc aus doc ermitteln
Beitrag von: Andreas Huhn am 08.12.05 - 08:54:08
hab das bisher mit einem call versucht, darum hat es nicht geklappt.

gibt es eine Möglichkeit das parent-doc nach Aufruf der Zeile nicht in den Vordergrund springen zu lassen?


Set parentuidoc = workspace.EditDocument(False , parent , , , True , False)
Titel: Re: uidoc aus doc ermitteln
Beitrag von: Axel am 08.12.05 - 08:58:54
Ich wüsste im Moment nicht wie.


Axel
Titel: Re: uidoc aus doc ermitteln
Beitrag von: Andreas Huhn am 08.12.05 - 09:50:05
Ein Problem ist es immer dann, wenn Fenster ohne für den Benutzer ersichtlichen Grund ihren Platz im Vordergrund tauschen. Denn das verwirrt eine ganze Reihe Anwender. Deswegen werd ich lieber nach dazu über gehen dann das auslösende doc nach Ende des Vorgangs automatisch zu schließen.

Danke für eure Hinweise!

Viele Grüße!
Titel: Re: uidoc aus doc ermitteln
Beitrag von: Axel am 08.12.05 - 10:12:49
Ein Problem ist es immer dann, wenn Fenster ohne für den Benutzer ersichtlichen Grund ihren Platz im Vordergrund tauschen. Denn das verwirrt eine ganze Reihe Anwender.

Das sehe ich genauso. Aber was willst du denn damit errreichen. Vielleicht gibt's noch einen anderen Weg.


Axel
Titel: Re: uidoc aus doc ermitteln
Beitrag von: Andreas Huhn am 08.12.05 - 10:50:45
das übliche Lied..

parent ruft child auf -> nach abgeschlossener Bearbeitung (postsave) soll ein Statusindikator des parent aktiv werden (hidewhen-Formel ergibt nun FALSE) -> dazu muß der refresh vom child ausgelöst werden damit das auch ohne Benutzereingriff sofort sichbar wird.

da dafür nur das uidocument eine Methode bereithält muß der Umweg über editdocument gegangen werden. Funktioniert ja auch, bis auf die Nebenwirkung von editdocument das Element unvermittelt in den Vordergrund zu bringen.
Titel: Re: uidoc aus doc ermitteln
Beitrag von: Axel am 08.12.05 - 11:02:46
das übliche Lied..

Richtig. Hier kommt wieder die "sagenhafte Echtzeitverarbeitung" von Notes ins Spiel.  >:D
Wer Automatismus braucht und haben will muss leiden.   :o  ;)

Aber Spass beiseite. In diesem Fall wird dir fast nicht anderes übrigbleiben. Oder der User refresht das Dokument manuell.

Axel



Titel: Re: uidoc aus doc ermitteln
Beitrag von: Andreas Huhn am 08.12.05 - 11:12:27
Ja, bis vorhin habe ich das über eine Schaltfläche für den Benutzer gelöst die ein @Command([RefreshHideFormulas]) auslöste. Nun denke ich aber daß es sinnvoller ist das Fenster dann einfach automatisch zu schließen, zumal die Bearbeitung daran zum Zeitpunkt des speicherns eigentlich bereits abgeschlossen sein müsste.

Du hast schon recht, je automatischer die Abläufe von Hand gehen sollen und je weniger der Anwender von den eigentlichen Vorgängen mitbekommen soll, desto mehr Hirnschmalz muß bei der Entwicklung investiert werden.

Danke Axel.


Gruß,

Andreas
Titel: Re: uidoc aus doc ermitteln
Beitrag von: Johnson am 09.12.05 - 13:24:25
Ich hoffe ich hab´s richtig verstanden und schlage dir hier jetzt keinen Misst vor.


Beim Öffnen des Childs holst du die in Initialize das aktuelle NotesUIDocument in eine, in der Maske des Childs, global deklarierte Objektvariable.
Beim Speichern des Childs kannst du das Parent (das eigentlich gerade geöffnet ist) im Backend als NotesDocument-Objekt ermitteln und mit dem NotesDocument-Objekt der globalen Objektvariable vergleichen und so ggf. aktualisieren.

Globals (Maske des Childs):
Code
Public uidoc_parent As NotesUIDocument
Sub Initialize
	Dim uiws As New NotesUIWorkspace
	Set uidoc_parent = uiws.CurrentDocument
End Sub

Postsave (Maske des Childs)
Code
Sub Postsave(Source As Notesuidocument)
	
	Dim db As NotesDatabase	' current database
	Dim doc_parent As NotesDocument	' parent document of the current document
	Dim s As New NotesSession	' current session
	
' get the parent document
	Set db = s.CurrentDatabase
	Set doc_parent = db.GetDocumentByUNID(Source.Document.ParentDocumentUNID)
	
' refresh parent if is currently open
	If doc_parent.UniversalID = uidoc_parent.Document.UniversalID Then
		Call uidoc_parent.Refresh
	End If
	
End Sub
Titel: Re: uidoc aus doc ermitteln
Beitrag von: Axel am 09.12.05 - 14:02:28
Hi,

funktioniert super. Das ist genau das, was ich gebraucht habe. Ich stand vor dem gleichen Problem.

Ich habe deinen Code noch erweitert, denn wenn das Parent-Dok. nicht im Bearbeiten-Modus ist, was bei mir vorkommen kann, gibt's einen Fehler (Dokumentbefehl kann nicht ausgeführt werden). Ich prüfe, ob das Dokument im Edit-Modus ist. Wenn ja, wird Refresh direkt ausgeführt, wenn nein, dann wird das Dokument in den Edit-Modus gesetzt, refresht und gespeichert. Dann wird das Dok. wieder in den Lese-Modus gesetzt.

Code
...
' refresh parent if is currently open
	If doc_parent.UniversalID = uidoc_parent.Document.UniversalID Then
		
		If uidoc_parent.EditMode Then
			Call uidoc_parent.Refresh
		Else
			uidoc_parent.EditMode = True
			Call uidoc_parent.Refresh
			Call uidoc_parent.Save
			uidoc_parent.EditMode = False			
		End If  'If bolEditMode Then
		
	End If
...

Wäre es eigentlich wert als Ergänzug in den BP-Artikel Das Arbeiten mit Haupt- und Antwort-Dokumenten (http://www.atnotes.de/index.php?topic=13984.0) aufgenommen zu werden. Ich stell's mal zur Diskussion.


Axel
Titel: Re: uidoc aus doc ermitteln
Beitrag von: Johnson am 09.12.05 - 15:02:13
Nicht nur
Zitat
Das Arbeiten mit Haupt- und Antwort-Dokumenten
das funktioniert auch bei Dialogboxen.

Wenn das Dokument, das zum öffnen der Dialogbox verwendet wird, nicht das gleiche ist wie das, in dem die Dialogbox aufgerufen wird, kann man auch so vorgehen.

DocA geöffnent => DocB in Dialogbox öffnen => DocB aktualisiert/holt Daten aus DocA
Titel: Re: uidoc aus doc ermitteln
Beitrag von: Andreas Huhn am 12.12.05 - 07:43:06
Super! Das ist eine gute Idee, Johnson. Werd ich wahrscheinlich noch ein paar Mal brauchen.

Guten Start in die neue Woche,

Andreas