Verknüpfung zu Dokument in anderer Datenbank per UNID?

  • Moin!


    Ich habe da gerade mal folgendes Problem:


    In einer Datenbank ist ein Dokument.
    In einer anderen Datenbank ist ebenfalls ein Dokument, in dem ein Feld "Source_UNID" drin ist, welches die UNID des Dokuments in der ersten Datenbank enthält.
    Wie kann ich nun in dem Dokument in der zweiten Datenbank eine Schaltfläche einfügen, mit der man das Dokument mit der in "Source_UNID" gespeicherten UNID öffnen kann?


    Ich hatte wohl etwas zu einfach gedacht, als ich versuchte, dass per Formel mit @Command([OpenDocument];"";SOURCE_UNID) zu machen, da diese Formel ja offensichtlich voraussetzt, dass man schon in der Datenbank ist, aus der man das Dokument öffnen will. Ich bin aber ja in einer anderen Datenbank und die Datenbank, aus der ich das Dokument öffnen will, ist gar nicht geöffnet.


    Das muss doch irgendwie gehen, wenn ich schon die UNID des gewünschten Dokuments zur Verfügung habe?

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

  • Das geht nur mit LotusScript.


    Nur mal so als Tipp:


    Die Methode GetDocumentByUNID( unid$ ) aus der NotesDatabase-Klasse ist dein Freund.


    Schau mal in die Designer-Hilfe. Da gibts Infos und auch Beispiele dazu.

  • > Woher soll der Button (Formelsprache oder Script) denn wissen, in welcher Db er die betreffende UNID zu suchen hat?


    Also den Namen der Ursprungsdatenbank könnte ich auch noch mitliefern.


    Da ich leider überhaupt nicht fit bin in Lotus Script: könnte mir jemand von den Cracks mal ein Beispielscript zeigen, wenn die UNID im Feld "source_unid" und der Pfad und Name der Ursprungsdatenbank im Feld "source_db" zu finden ist?


    Wäre echt super!

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

  • Wenn "source_db" auf demselben Server liegt


    Code
    Set db = New NotesDatabase(<Server>, <source_db>)
    Set doc = db.GetDocumentByUNID(<source_unid>)


    Jetzt noch die Werte entsrpechend aus Deinen Feldern verwenden und schon solltest Du in doc, das Dokument in der anderen Db haben.



    Andreas

  • Danke für den Hinweis, theoretisch bin ich nun schon weiter, praktisch funktioniert's leider noch nicht:


    Ich habe in dem (biespiel-)Dokument, in dem ich die Schaltfläche platzieren will, folgende Felder mit folgenden Inhalten zur Verfügung:


    SOURCE_DOCID: 01DECE0F3189F773C12576000032DC1E
    SOURCE_REPLICA_ID: C125704600357B49
    SOURDE_UNID: 01DECE0F3189F773C12576000032DC1E


    Im Eigenschaftsfenster des Ursprungsdokuments (welches ich per Schaltfläche öffnen will), finden sich folgende IDs:


    [img width=300]http://www.diewesslings.de/wp-content/uploads/2009/07/id.png[/img]


    Ich dachte, ich könnte nun das Ursprungsdokument mit folgendem Script öffnen:



    Code
    Sub Click(Source As Button)
     	Dim ws As New NotesUIWorkspace
     	Set db = New NotesDatabase(server, SOURCE_REPLICA_ID)
     	Set doc = db.GetDocumentByUNID(SOURCE_UNID)
     	Call ws.EditDocument(False,doc)
    End Sub


    Leider erscheint dann die Meldung "Invalid universal ID".


    Ich spüre, ich bin nahe dran, aber irgendwas stimmt noch nicht. Könnt Ihr mir da noch helfen?

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

  • Klar weil du bei New NotesDatabase nur einen Pfad angeben kannst.


    Du könntest vielleicht einfach mal die DesignerHilfe aufmachen und dir dort den entsprechenden Abschnitt anschauen.
    Dann hättest du auch die Methode OpenByReplicaID gefunden inkl. eines Beispiels, das du anpassen kannst

  • > Klar weil du bei New NotesDatabase nur einen Pfad angeben kannst.


    Ja, das weiss ich auch schon. Ich habe natürlich im Originalscript nicht "server" sondern den kompletten Servernamen drinstehen. Wollte nur meinen Servernamen hier nicht unbedingt breittreten. Daran kann's also nicht liegen...

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

  • Diese Aussage passt aber vorne und hinten nicht zu deinem vorigen Posting.


    Überleg dir doch erst mal was genau du tust bzw codiert hast und dann beschreib es auch so.


    Und vor allem greifst du in deinem Script auf Variablen und nicht auf Felder zu

  • > Diese Aussage passt aber vorne und hinten nicht zu deinem vo
    rigen Posting.


    Hä? Was heisst hier "vorne und hinten nicht"? Ich habe nur die Angabe des Servers rausgenommen. Darum ging es aber ja gar nicht!



    > Überleg dir doch erst mal was genau du tust bzw codiert hast und dann beschreib es auch so


    Das habe ich eigentlich getan...


    Sorry, wenn was falsch angekommen ist. Ich kenne natürlich auch die Designer-Hilfe, aber ich dachte, ein Forum wäre dazu da, um mal schnell und unbürokratisch nach Hilfe zu fragen, zumal ich mit der Designer-Hilfe meist nicht wirklich zurecht komme. Vielleicht bin ich ja schlicht zu doof oder es liegt daran, dass ich als Admin nicht 24h programmiere...


    Hier also nochmal der Code ohne "verschleierung" des Servers, der zu der o.g. Fehlermeldung einer invalid UNID führt:


    Code
    Sub Click(Source As Button)
         Dim ws As New NotesUIWorkspace
         Set db = New NotesDatabase("server1/domain", SOURCE_REPLICA_ID)
         Set doc = db.GetDocumentByUNID(SOURCE_UNID)
         Call ws.EditDocument(False,doc)
    End Sub


    Also: falls trotzdem mir noch jemand helfen will: wo ist mein Fehler?

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

  • Ganz einfach: SOURCE_REPLICA_ID definierst du in dem Posting als Replica ID der Datenbank, zugleich sagst du aber daß dort der Datenbankpfad drinsteht.


    Also was bitte stimmt jetzt ?


    Und daß das eine LotusScript Variable ist und kein Feld auf das du zugreifst hatte ich auch schon geschrieben -> Auch hier wieder die Frage: wo genau stehen diese Informationen
    Das meinte ich damit, daß deine angegebenen Informationen vorne und hinten nicht zusammenpassen weil sie sich eben widersprechen.


    Klar ist ein Forum für Hilfestellung da, aber helfen können wir eben nur wenn du klar und eindeutig beschreibst wie die Situation ist und vor allem die gegebenen Informationen stimmig zusammenpassen.


    Eine Schulung in Script bzw eine Vermittlung von Script Grundlagen können wir dir hier aber auch nicht liefern, dafür ist ein Forum definitiv nicht geeignegt

  • Woher kommt


    SOURCE_REPLICA_ID und
    SOURCE_UNID?



    Wenn es Felder in der Maske sind, dass kannst Du diese nicht einfach so angeben, sondern Du musst auch den INhalt des Feldes auslesen.


    Nach dem Motto

    Code
    Set Db = New NotesDatabase("Server", uiws.CurrentDocumentFieldGetText("Feldname")



    Andreas

  • Hallo Andreas!


    Danke für die Hilfe (trotz meiner anscheinend konfusen Beiträge...).


    Es handelt sich tatsächlihc um Felder des Dokuments, in das ich die Schaltfläche eingebaut habe. Ich habe Deinen Code mal in mein Script mit aufgenommen (so wie ich es für richtig vermutete) und das ganze sieht nun so aus:


    Code
    Sub Click(Source As Button)
    	Dim ws As New NotesUIWorkspace	
    	Set db = New NotesDatabase("server1/domain", uiws.CurrentDocumentFieldGetText("SOURCE_REPLICA_ID"))
    	Set doc = db.GetDocumentByUNID(uiws.CurrentDocumentFieldGetText("SOURCE_UNID"))
    	Call ws.EditDocument(False,doc)
    End Sub


    Leider erscheint nun bei Klick auf den Button: "Variant does not contain an Object".


    Noch ein Tipp?

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

  • Ausserdem habe ich einen Punkt vergessen.
    (zwischen CurrentDocument und FieldGetText)


    Richtig muss es so lauten.


    Code
    Set db = New NotesDatabase("server1/domain", ws.CurrentDocument.FieldGetText("SOURCE_REPLICA_ID"))



    Andreas

  • Hallo!


    Auch auf die Gefahr hin, wieder Motze zu kriegen, hier mal mein derzeitiges Script, welches leider bei Ausführung immer noch eine Fehlermeldung "Type Mismatch" hervorbringt. Der Lotus Script Debugger zeigt, dass diese Fehlermeldung bei der Zeile Set db = db.OpenByReplica... auftritt, obwohl dann zu sehen ist, dass db mit den angaben der richtigen zu öffnenden Datenbank gefüllt ist.



    andreas: leider hat dein script nicht funktioniert, daher habe ich's halt mit der OpenByReplicaID-Methode versucht...


    kann mir jemand sagen, was da noch falsch ist?

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon

  • Ein winziger Blick in die Hilfe zu OpenByReplicaID hätte dir folgendes gezeigt:



    Und da steht ja klar, daß der Rückgabewert keine NotesDatabase ist


    Und das Beispiel aus der Hilfe zu übernehmen wäre ja wohl noch möglich von dir zu verlangen:



    Das Problem ist nicht, daß dir die Kenntnisse fehlen, sondern eher daß du einfach die Lösung vorgesetzt bekommen willst ohne den kleinsten eigenen Aufwand

  • Versuch mal


    Code
    Set db = db.OpenByReplicaID("LT5VV003", sourcereplicaid)


    liefert Dir kein Db-Objekt (NotesDatabase) zurueck.


    Es liefert Dir True oder False, also einen Boolean-Typ zurueck

    Zitat


    Return value
    True indicates that the replica was found and opened
    False indicates that the replica was not found on the server, or could not be opened



    Code
    If db.OpenByReplicaID("LT5VV003", sourcereplicaid) Then
    ... Dein Code
    Else
    ... Dein Code
    End If


    Andreas

  • Zitat

    Das Problem ist nicht, daß dir die Kenntnisse fehlen, sondern eher daß du einfach die Lösung vorgesetzt bekommen willst ohne den kleinsten eigenen Aufwand


    Falsch! Ich tu' mich nur eben recht schwer mit Lotus Script (war schon immer so und wird immer so bleiben, daher versuche ich immer möglichst mit @Formeln auszukommen).


    Ausserdem hatte ich ja bereits erwähnt, dass Datenbankprogrammierung nun weiss Gott nicht zu meinem Haupt-Tagesgeschäft als Admin gehört, aber manchmal komme ich nicht drum herum. Daher frage ich gerne mal in solchen Foren wie diesem (welches ich bis jetzt als sehr nettes und hilfreiches Forum in Erinnerung hatte) doof nach und freue mich, wenn jemand, für den das alles null problemo ist, mir auf die Sprünge hilft. Das ist ja dann für denjenigen meist 'ne 5-Minuten-Sache und erspart mir tagelanges rumgewurschtel.


    andreas: vielen herzlichen Dank, dass Du mir trotzdem geholfen hast.


    Ich hab's nun endlich hinbekommen und will natürlich (vielleicht steht ja irgendjemand irgendwann vor einem ähnlichen Problem) die Lösung nicht vorenthalten:



    Das ist vielleicht nicht die schlankeste und sauberste Lösung, aber sie funktioniert.

    ------------------------------------------------------------------------------
    Nun freilich starren Sinnes zu behaupten, daß das, was ich gesprochen habe, auch unbedingte Wahrheit sei, das schickt sich nicht für einen, der zu denken pflegt. - Platon