Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Lancelot am 26.05.08 - 14:34:30
-
Hi Leute,
ich bekomme bei meinem Problem zwar graue Haare, aber dafür auch keine Lösung hin. ;o)
Habe eine DB A und eine DB B.
In DB A wird ein Doc A erstellt und gespeichert.
Aus diesem Doc A kann man bei Bedarf einen Button drücken und eine Maske aus DB B wird geöffnet.
Beim Speichern von Doc B werden die DocID von Doc A in Doc B geschrieben.
Bis dahin kein Problem, doch jetzt soll ich die DbID und die DocID von Doc B in das Doc A der DB A schreiben.
Doc A und Doc B sind dabei gleichzeitig geöffnet, doch ich weiß nicht wie ich Doc A ansprechen kann um den Doclink von der DB B und Doc B dort funktionstüchtig ein zu tragen.
Bin für jede Idee die ich nachgehen kann dankbar.
-
Ich versteh das nicht wirklich A-Bär:
Du hast doch alles was du brauchst.
CurrentDoc, CurrentDB NewDoc DBOfNewDoc...
-
Zwei Datenbanke A und B.
Datenbank A ist geöffnet und enthält ein Doc A.
Doc A wird in Bearbeitung geöffnet und darauß per Knopfdruck die Maske aus Datenbank B
geöffnet.
Schließe ich das Doc B in Datenbank B wieder soll in dem immer noch geöffnetet Dokument A der Datenbank A der Doclink zu Dokument B der Datenbank B eingetragen werden.
Leider bin ich Script mäßig nicht so Sattelfest um zu wissen wie ich beim schließen von Dokuemnt B das Dokument A aus Datenbank A ansprechen muß.
Hoffe es wurde verständlicher.
-
Geht so, wenn ich ehrlich bin...
Aber wenn Du die UNID des Doc hast (egal ob DocA oder DocB oder DocC), dann kannst Du mit
set DocX = DatenbankB.GetDocumentByUNID(ID_DES_DOKS_ALS_STRING) das Doc öffnen.
Matthias
-
Entweder du hast docA noch im zugriff, dann ist es doc kein Problem.
Und wenn du es nicht mehr im Zugriff hast, dann nimm doch die UNID, die du in DocB hinterlegt hast und grabsch nach
set docA = notesDatabase.GetDocumentByUNID( unid$ )
Ansonsten: poste doch mal deinen Code
grüsse
Dau-in
-
Oder ist das Problem, dass du alles über das Frontend machen willst?
-
Ja, das wird es wohl sein. Steht auch so da: ... gleichzeitig geöffnet.....
-
Genau so ist es, es muß im Frontend passieren da beide Datenbanken und
beide Dokumente zur gleichen Zeit geöffnet sind.
Verzweiflung macht sich bei mir breit. ;o)
-
dann würde ich doch mal mit
Set notesUIDocument = notesUIWorkspace.EditDocument( [editMode] , [notesDocument] )
experimentieren.
Und aufpassen, dass keine Frontend und Backendoperationen gemischt werden, sonst gibt es Replizierkonflikte.
Müssen beide Dokumente gleichzeitig geöffnet sein?
Änderst du Dokument A, während Bokument B geöffnet ist?
-
So gaanz versteh ich den Sinn nicht.
Vielleicht erfahren wir ein bisschen über den Hintergrund dieser Aktion ? Evt. gibt es dann andere Lösungsmöglichkeiten.
-
Ok, das habe ich jetzt mit meiner trüben Birne verstanden ;D
Hm, das Problem ist erstmal, daß das Dokument erst nach dem Speichern eine Identität bekommt
Wenn das Dokument B aus Dokument A generiert wird ( Backend ), danach gespeichert ( ab hier UNID ) sollte ein ordentlicher Link möglich sein.
Dann stellt sich die Frage, was passiert, wenn der Benutzer sagt, ach nee, will doch nicht...
Leider kannst Du auch nicht aus Doc B in Doc A schreiben, weil dieses offen ist. Das gibt Schimpfe von Notes.
Idee:
Wie sieht es aus, das neue Dokument per Dialogbox zu erstellen? Gibt es die Chance?
Dann bekommst Du mit, wann und wie das Dokument geschlossen wird und kannst den Link setzten.
Hm, geht das überhaupt, die Maske aus einer anderen DB als Dialobbox zu öffnen?
Ich glaub ich bin zu komplziert m Moment...
Oder Embeddet View...
-
Ja gem. Pflichtenheft sollen beide Dokumente dabei offen sein.
Das sollte so sein, falls der User im Doc A noch was nachschauen müßte.
Somit würde ich auch beide Dokuemnte ändern, wenn sie noch offen sind.
Bringt mir das die nächsten Probleme?
-
Meines wissen kann man bei Dialogboxen keinen Datenbankpfad angeben.
-
Meine Idee war das Dokument in der anderen Datenbank mit new Notesdocument ( db ) zu erstellen und der Dialogbox das unterzuschieben:
flag = notesUIWorkspace.DialogBox( form$ , [autoHorzFit] , [autoVertFit] , [noCancel] , [noNewFields] , [noFieldUpdate] , [readOnly] , [title$] , [notesDocument] , [sizeToTable] , [noOkCancel] , [okCancelAtBottom] )
Allerding müsste die Form dann in beiden Datenbanken sein, das ist sehr unschön.
Vergiss das erstmal.
-
docA ist offen
docB wird geöffnet und gespeichert
dabei wird über die UNID auf docA via Backend gegriffen, der Focus des geöffenten Dokumentes auf uiDokA gesetzt, und wenn nur die UNID eingetragen werden soll, mit
Call notesUIDocument.FieldSetText( fieldName$, textValue$ )
eintragen. Du kannst halt dann nur Strings eintragen.
Ich weiss nicht, ob das wirklich so geht, aber in der richtung würde ich es probieren.
Du darfst halt auf keinen Fall via Backend was ändern, wenn die Dinger im Frontend offen sind
-
Die sauberste Lösung dürfte IMO immer noch das Einfügen des DocLinks über das Backenddokument und ein anschließendes Reopen des Backenddocs im Frontend sein.
Anton aka Ata hat dazu eine ReOpen-Funktion geschrieben, such mal hier im Forum danach.