Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: Tiger955 am 24.06.15 - 10:36:18

Titel: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Tiger955 am 24.06.15 - 10:36:18
Hallo!

wir haben ein CRM, basierend auf Domino Datenbank und dort möchte ich aus einem GEÖFFNETEN Dokument Felder mittels VBA auslesen und in ein (geöffnetes) Access-Formular übertragen.

Gewünschter Workflow:
-Leeres Formular in Access
-ich öffne das Dokument in meiner CRM-Anwendung aus der ich bestimmte Feldinhalte brauche
-ich wechsle nach Access und klicke einen Button, der mir die Feldinhalte in mein Accessformular holt

Aus einem geöffneten Lotus Notes MAIL kann ich es
Set workspace = CreateObject("Notes.NotesUiWorkspace")

Set Form = workspace.CURRENTDOCUMENT

Me.Besteller = Form.FIELDGETTEXT("From")
Me.MailContent = Form.FIELDGETTEXT("DisplayDate") & vbCrLf & Form.FIELDGETTEXT("From") & vbCrLf & vbCrLf & Form.FIELDGETTEXT("Subject") & vbCrLf & vbCrLf & Form.FIELDGETTEXT("Body")

Aber aus einem geöffneten Dokument aus unserer Documents.nsf schaffe ich es nicht.

Warum nicht aus Notes nach Access übertragen?
1) kann ich kein Notes Script
2) kann und darf ich die CRM-Anwendung nicht angreifen

Danke für Eure Hilfe!!

Michael

Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Peter Klett am 24.06.15 - 10:45:57
Bekommst Du eine Fehlermeldung? Oder wie wirkt sich das "schaffe ich es nichtW" aus?

Innerhalb von Notes sollte es keinen Unterschied bzgl. des CurrentDocument in einer Mail- oder einer beliebigen anderen Datenbank geben.
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Tiger955 am 24.06.15 - 10:54:49
Sorry für die unpräzise Beschreibung:
"Schaffe ich es nicht" bedeutet, ich weiß nicht, wie ich das geöffnete Dokument "anspreche" in VBA.
Wie komme ich auf die Felder dieses angezeigten Dokuments hin?

In den Eigenschaften des Notes-Doc sehe ich die Feldnamen und auch die Inhalte, aber wie hole ich mir diese mittels VBA.

Soweit, dass ich eine Fehlermeldung bekäme, bin ich noch gar nicht!

Danke für Deine Hilfe!!

Michael
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Peter Klett am 24.06.15 - 11:46:04
Du hast aber einen Code gepostet, der Felder einer Mail ausliest, und der soll angeblich funktionieren. Dann mache das gleiche doch mit den Feldern aus der CRM-Anwendung. Probiere z.B. das Feld "Form", das ist der Name der Maske. Die anderen Felder musst Du Dir in der Felderliste des auszulesenden Dokuments ansehen. Wie die heißen, kann Dir hier keiner sagen.
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Tiger955 am 24.06.15 - 12:33:27
Irgendwie hatte ich wohl einen Denkfehler.

CURRENTDOCUMENT ist jenes Dokument im Workspace, welches den Fokus hat bzw. zuletzt geöffnet war.
Wie genau ein CURRENTDOCUMENT definiert ist, begreife ich nicht, denn ich habe z.B. ein Mail geöffnet und im CRM eine Opportunity.

Beide verlieren den Fokus, wenn ich nach Access gehe.

Warum dann die Opp. als CURRENTDOCUMENT interpretiert wird, ist mir nicht klar. Evt. darum, weil es das zuletzt angezeigte Notes-Dokument war.

Somit ist es scheinbar egal, ob das geöffnete Dokument ein Mail oder ein Doc eines CRM ist, es zählt wohl die letzte Anzeige.

Ich kann mir daher in einer messagebox aus Access heraus mit MsgBox uidoc.FIELDGETTEXT("OppPosItemPrice") den Feldinhalt des CRM-Dokument Feldes anzeigen lassen.
Soweit scheint dieses Problem gelöst.

Nunmehr stellt sich für mich aber die Frage, wie ich z. B. auf Feld eines Unterformulars (oder Subview - ich weiß nicht, ob das in Notes auch so genannt wird) hinkomme.

Das CurrentDocument zeigt mir eine Opportunity mit Kundennamen, Adresse, etc, also den Stammdaten. Alles Felder, die ich in den Eigenschaften des Doc anzeigen kann. Darunter hängt aber eine Ansicht der angebotenen Positionen, die scheinbar wieder eine View der Einzeldokumente "OppPositions" ist.

Obwohl ich sie im Currentdocument sehe, kann ich nicht mit uidoc.FIELDGETTEXT ("...") darauf zugreifen.
Scheinbar fallen diese Daten nicht unter  CurrentDocument .

Wie hole ich mir nun die Werte dieser View (variabel viele Positionszeilen)?
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Peter Klett am 24.06.15 - 12:58:14
Bei Deinem "Unterformular" wird es sich um eine eingebettete Ansicht handeln, in der zu dem Kunden zugehörige Dokumente angezeigt werden. An diese Dokumente kommst Du nicht direkt über das CurrentDocument.

Du musst mit dem Schlüssel (z.B. der Kundennummer) aus dem CurrentDocument dann in die Datenbank gehen und Dir z.B. aus dieser eingebetteten Ansicht (oder über ein NotesDatabase.Search) die zugehörigen Dokumente suchen und kannst die dann auswerten. Um zu sagen, wie Du das genau machen musst, fehlt mir allerdings die Kenntnis über Euer eingesetztes CRM.

Du wirst Dich auf jeden Fall mit den Möglichkeiten von LotusScript bzw. den Datenstrukturen von Notes auseinandersetzen müssen. VBA ist sprachlich nicht sehr weit weg von LotusScript, die Unterschiede liegen in den Klassen von Notes, die Du verwenden musst. Umgekehrt kann man mit LotusScript auch die Klassen von Access nutzen, muss dann aber wissen, wie Access tickt.
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Tiger955 am 24.06.15 - 13:36:29
Danke für die Erklärung.

Ja, so eine eingebettete Ansicht habe ich vermutet.
Das Hauptproblem bei Notes ist ja diese extrem langsame Abarbeitung von Durchläufen um dann auf bestimmte Feldinhalte eines Dokuments hinzukommen.
Wenn man 2-3 Minuten braucht, um eine Notes-Datenbank zu durchlaufen, nur um aus Dokumenten bestimmte Feldinhalte zu holen, dann ist das im laufenden Betrieb nicht machbar.

Wenn nun mehrere User die Feldinhalte von Dokumenten über den Schlüssel suchen müssen, nur um diese Values in eine relationale Datenbank übernehmen zu können, dann geht auch der Domino-Server in die Knie und unsere IT ist nicht so schlecht bestückt.
Während der Multi-User Zugriff auf den SQL-Server diesen nicht einmal juckt!

Das ist das Drama, welches wir mit Domino haben. Wir brauchen Werte aus dem CRM in anderen Applikationen bzw. in anderen Systemen und können nicht annähernd in "Echtzeit" diese Daten aus dem CRM bekommen. Ganz klar eine absolut falsche Entscheidung ein CRM auf Domino-Basis zu nehmen, wenn der Rest der Applikationen auf relationalen DBs basiert. Aber diese Fehlentscheidung ist bereits vor Jahren gefallen, wir müssen damit leider klar kommen.
Und da auf unser CRM nur die Macher dieses Produkts hingreifen können und dürfen und die lieber ihre "Solutions" verkaufen als uns Daten in eine relationale DB zu schaufeln ist der Weg von Notes --> nach Access (oder andere Apps) so gut wie unmöglich.

Ich bin mir sicher, es wäre bedeutend schneller und leichter mit einem Script die Daten zu fassen, die am Bildschirm dargestellt sind und sie in eine Tabelle nach Access (Backend ist SQL-Server) zu übertragen als von Access aus (VBA) die ganze Datenbank zu durchlaufen.

Für einen Notes-Affinen wahrscheinlich leicht machbar, für mich aus genannten Gründen nicht.
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Peter Klett am 24.06.15 - 13:53:16
Sorry, das kann ich so nicht stehen lassen. Niemand sagt, dass Ihr die ganze Notes-Datenbank durchlaufen müsst, um die Informationen herauszubekommen.

SQL ist genauso ein schlechtes System, wenn ich dort in die Tabellen gehe, und alle Datensätze durchsuche, um bestimmte Informationen zu finden. Dann dauert SQL auch lange.

Es liegt also nicht am System, sondern an der Art der Bedienung.

Wenn Du aus dem aktuellen Dokument die Kundennummer nimmst (die sei der Schlüssel zu den anderen Dokumenten), dann in die eingebettete Ansicht gehst und über die Kundennummer die zugehörigen Dokumente suchst, dauert das keine 2-3 Minuten.

Und wenn das mehrere User machen, geht davon auch nicht der Server in die Knie.

Also bitte nicht über Notes schimpfen und gleichzeitig ausdrücken, dass man davon keine Ahnung hat.
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Tiger955 am 24.06.15 - 14:23:11
Dies Reaktion habe ich von einem Notes-Affinen auch erwartet  ;)

Nein, im Ernst.
Ich würde Dich wirklich bitten, mir zu schreiben, WIE ich mit einem Schlüssel aus dem Hauptdokument dann auf die verknüpften Dokumente komme.

Was mich verunsichert ist auch Deine Aussage " die sei der Schlüssel zu anderen Dokumenten".  Kann es denn auch ANDERE Schlüssel geben. Ich dachte alle NotesDokumente sind über die DocID verknüpft. Alles andere ist doch nicht unique.

Wie gesagt, wenn Du die Option kennst, wie ich einerseits feststellen kann, WAS der Schlüssel ist (bin mir aber fast sicher, dass in unserem CRM die DocID der Verknüpgungsschlüssel ist) und dann, wie ich in die anderen Dokumente programmatisch weitergeht.

Ich kenne nur die Möglichkeit, die entsprechende Datenbank auf die Form zu prüfen und dann den Schlüssel zu suchen. Und das dauert wirklich zu lange, um das andauernd (bei vielen Usern) zu machen.

Set db = session.GetDatabase("", "Test\Doc.nsf")
Set dc = db.AllDocuments
Set doc = dc.GetFirstDocument

While (doc Is Nothing) = False
   
    strItemString = doc.GetFirstItem("Form").Text
   
    If strItemString = "CustomerContract" Then
        strDocID = doc.GetFirstItem("DocID").Text
            If strDocID = strSearchDocID Then
           ......           
            End If
    End If
    Set doc = dc.GetNextDocument(doc)
Wend


Und ja, Du hast ja Recht, ich habe von Notes wenig Ahnung - daher suche ich hier ja Hilfe!!!
Und nein, ich habe nicht geschimpft, ich habe nur bemerkt, dass es nicht zu UNSERER IT-Landschaft passt.
Wenn Buchhaltung, Fakturierung, Lohnverrechnung, etc. alles über relationale DBs läuft (fast alle SQL-Server) nimmt man doch keine nicht-relationale Datenbank als äußerst wichtige Ergänzung.

Danke
Michael
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Peter Klett am 24.06.15 - 16:02:20
Ok, dann werden wir mal etwas fachlicher.

Natürlich ist die UniversalID der eindeutige Schlüssel zu einem Dokument in einer Notesdatenbank. Das heißt aber nicht, dass jede Datenbank diesen Schlüssel dazu verwendet, um Dokumente zuzuordnen. Ein ganz kleines Beispiel um das zu verdeutlichen.

In einer Datenbank (z.B. einem CRM) gibt es ein Kundendokument und viele zugehörige Auftragsdokumente. Die Auftragsdokumente werden im Kundendokument in einer eingebetten Ansicht angezeigt (das sollte Dir soweit bekannt vorkommen).

Nun kann die Anforderung bestehen, dass es eine Historisierung über die Inhalte der Kundendokumente gibt. Die Änderung eines Kundendokumentes produziert dann jeweils neue Kundendokumente mit einem zeitlichen Gültigkeitsbereich. Jedes dieser Kundendokumente ist ein eigenständiges Dokument in der Datenbank und hat selbstverständlich eine eigene UniversalID. Würde in den Auftragsdokumenten nur die UniversalID des (zum Zeitpunkt der Erstellung gültigen) Kundendokuments gespeichert werden, könnten im später aktuellen Kundendokument die alten Aufträge nicht zugeordnet werden.

Folglich wäre es günstiger, anstatt der technischen UniversalID die logische Kundennummer als Schlüssel zu verwenden. Eine Eindeutigkeit des Schlüssels ist nicht gefordert, da jedes Kundendokument den gleichen Schlüssel besitzen muss.

Soweit zur Theorie. Nun zur Praxis:

Du musst in der Datenbank die eingebettete Ansicht finden. Datenbank öffnen, STRG + SHIFT festhalten und im Menü Ansicht - Gehe zu gibt Dir eine Liste sämtlicher Ansichten der Datenbank, auch die verborgenen (zu erkennen an den Klammern um den Ansichtsnamen).

In der eingebetteten Ansicht wird es eine Kategorie geben, in der der Schlüssel steht (vermutlich die Kundennummer, aber natürlich auch möglich die UniversalID, glaube ich aber nicht -> Kundendokument löschen, neu erstellen -> neue UniversalID, keine Verbindung mehr zu den Aufträgen -> keine gute Struktur).

Dann musst Du im Kundendokument den Feldnamen des Feldes (konkret Item, aber wir wollen es nicht übertreiben mit der Genauigkeit) herausfinden, in dem der Schlüssel steht.

Ich nehme mal an, dass die Ansicht "auftraege" heißt, und das Feld mit dem Schlüssel "kundennummer". Dann würde folgendes Script (LotusScript, sinngemäß in VBA zu übersetzen) in etwa so aussehen. Das ganze natürlich ohne Fehlerhandling und ohne Gewähr auf Tippfehler.

Code
Dim workspace As New NotesUIWorkspace
Dim kundenuidoc As NotesUIDocument
Set kundenuidoc = workspace.CURRENTDOCUMENT
Dim kundendoc As NotesDocument
Set kundendoc = kundenuidoc.Document
Dim crmdb As NotesDatabase
Set crmdb = kundendoc.ParentDatabase
Dim auftragview As NotesView
Set auftragview = crmdb.GetView ("auftraege")
Dim auftragcol As NotesDocumentCollection
Set auftragcol = auftragview.GetAllDocumentsByKey (kundendoc.Kundennummer (0), True)
Set auftragdoc = auftragcol.GetFirstDocument
Do While Not auftragdoc Is Nothing
   'Hier verarbeitest Du die Auftragsdokumente
   Set auftragdoc = auftragdoc.GetNextDocument (auftragdoc)
Loop
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Tiger955 am 25.06.15 - 09:17:00
Danke vielmals für die ausführliche Beschreibung, ich werde mal mein Glück versuchen, ob ich das umsetzen kann!  ;D
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Peter Klett am 25.06.15 - 09:54:07
Das kriegst Du hin, und wenn es irgendwo klemmt, poste hier Code und Fehlermeldung bzw. Fehlverhalten
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Tiger955 am 07.07.15 - 09:32:43
Hallo Peter!

nach einer "künstlerischen Pause"  ;) kann ich mich wieder um das Thema kümmern und bitte nochmals um deine Hilfe, weil ich es nicht ganz verstanden habe - offensichtlich.

Habe deinen Code nunmehr in meine Anwendung eingebaut und es sieht so aus:

Set notesuiworkspace = CreateObject("Notes.Notesuiworkspace")  --> um das geöffnete Doc (die Opportunity) auszulesen
Set objNotes = GetObject("", "Notes.NotesSession")   -->  um dann die versteckte View ("LookupDocID") zu durchlaufen

Anm.: ich glaube in dieser View die Opp samt Opp Positionen gefunden zu haben. Jedenfalls werden mir zwei Docs angelistet, wenn ich nach dem Suchstring "2B46470BCE2FD25BC1257D20003E3134" suche. Eines zeigt genau diese DocID (es ist die Opportunity selbst), die andere hat den Eintrag in "OppID" und ist die Opportunity Position.
Somit denke ich, dass ich grundsätzlich die richtige View gefunden hätte.
 
Set dbname = objNotes.GetDatabase("", "CRM\Opp.nsf")  --> dort ist die versteckte View zu finden

Set uidoc = notesuiworkspace.CURRENTDOCUMENT

strDocID = uidoc.FIELDGETTEXT("DocID")  -->   bringt  meinen "Suchschlüssel" 2B46470BCE2FD25BC1257D20003E3134


'*********  adaptiert Peters Code
Dim auftragview As Object
Set auftragview = dbname.GetView("LookupDocID")  --> die versteckte View
Dim auftragcol As Object
Dim auftragdoc As Object
Set auftragcol = auftragview.GetAllDocumentsByKey("OppID", True)   --> muß ich hier das Feld durchsuchen, wo der Wert 2B46470BCE2FD25BC1257D20003E3134 zu finden ist?

Set auftragdoc = auftragcol.GetFirstDocument
Do While Not auftragdoc Is Nothing

   'Hier verarbeitest Du die Auftragsdokumente
          If auftragdoc.GetFirstItem("OppID") = strDocID Then     --> wenn ich die Opp.Position mit der OppID 2B46470BCE2FD25BC1257D20003E3134 gefunden habe, dann gibt mir testweise die OppPosItemNo  aus.

               'Hier verarbeitest Du die Auftragsdokumente
                MsgBox auftragdoc.GetFirstItem("OppPosItemNo")
          End If
     Set auftragdoc = auftragdoc.GetNextDocument(auftragdoc)
Loop

*************

Der Code läuft ohne Fehler durch (was noch nicht heißt, dass ich es richtig gemacht habe!), aber bringt nichts.

Bitte wo liegt mein Fehler?
O.a. Opportunity hat definitiv eine Opp.Position.

Danke
Michael
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: ascabg am 07.07.15 - 09:46:29
Hallo,

Was bedeutet
Zitat
Der Code läuft ohne Fehler durch (was noch nicht heißt, dass ich es richtig gemacht habe!), aber bringt nichts.

Wass soll er denn bringen?


Andreas
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Tiger955 am 07.07.15 - 10:14:06
Hallo!

Ich möchte testweise die "OppPositionItemNo" (die Artikelnummer) ausgeben lassen.

In einer Opportunity gibt es Opp-Positionen.
Jede Position ist eine Artikelnummer mit ihren Eigenschaften wie Preis, Einheit etc.
Somit hat jede Opportunity zumindest ein verknüpftes (Sub-)Dokument.

Ich komme auf die Opportunity (ist ja geöffnet) hin, nicht aber auf Werte der "verknüpften" Opp.Positionen.

Genau das ist mein Problem.
Wie bekomme ich bestimmte Feldinhalte aus den verknüpften Dokumenten (=Opp.Positionen) eines geöffneten Docs (=Opportunity)?

Danke
Michael
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: ascabg am 07.07.15 - 10:54:14
Hallo,

Dazu musst du dir bewusst machen, das die Methode "NotesDocument.GetFirstItem" die keine Werte zurueckliefert.
Diese liefert dir nur ein weiteres Objekt der Klasse "NotesItem" zurueck.

Wenn du Werte aus den Items auslesen willst, dann brauchst du "NotesDocument.GetItemValue"
Und hier muss du dir bewusst machen, dass du auf jeden Fall einen Array zurueckbekommst.


Andreas
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Mitch am 07.07.15 - 11:32:57
Huhu,

ich verstehe nicht ganz was du machst.

[...]
strDocID = uidoc.FIELDGETTEXT("DocID")
[...]
Set auftragcol = auftragview.GetAllDocumentsByKey("OppID", True)

Du ziehst dir eine ID, suchst in der Ansicht aber nach einem festen String "OppID". Das sieht seltsam aus. Sicher, dass du das möchtest? Ich hätte in der ersten Ansichtsspalte die ID erwartet und dann entsprechend nach der ID gesucht und alle zugehörigen Dokumente zu finden.

Der Code läuft ohne Fehler durch (was noch nicht heißt, dass ich es richtig gemacht habe!), aber bringt nichts.

Was sagt denn der Debugger deiner Wahl? Findet er Dokumente? Ich tippe ja auf "Nein", wegen oben genanntem Problem.

Gruß,

Mitch
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Tiger955 am 07.07.15 - 11:54:34
Hallo Andreas!

Danke für Deine Rückmeldung, es wäre mir immens geholfen mit einem praktischen Beispiel, z.B. wie die Codezeile aussieht.

Ich habe folgendes versucht, leider ohne Erfolg (keine Fehlermeldung, aber obj="")

Set auftragcol = auftragview.GetAllDocumentsByKey(strDocID, True)  --> strDocID  ist die ID der Opportunity und steht im Feld OppID der Opp-Positionen
Set auftragdoc = auftragcol.GetFirstDocument
Do While Not auftragdoc Is Nothing
     obj = auftragdoc.GetItemValue("OppID")   --> in obj sollte der Schlüssel, der gleich ist mit strDocID zu finden sein. obj bleibt aber ""
    Debug.Print obj(0)
    If obj = strDocID Then   --> daher geht es hier nicht weiter
        'Hier verarbeitest Du die Auftragsdokumente
        Set objOppPosItemNo = auftragdoc.GetFirstItem("OppPosItemNo")
        strOppPosItemNo = objOppPosItemNo.Text
        MsgBox strOppPosItemNo
    End If
   Set auftragdoc = auftragdoc.GetNextDocument(auftragdoc)
Loop

Danke für Deine Hilfe.
Michael
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: ascabg am 07.07.15 - 12:02:56
Hallo,

Wie hast du denn obj definiert? (als was ==> String, Variant, ...)

Und hier
Zitat
If obj = strDocID
willst du einen Array mit einem String vergleichen. Das wird or den Baum laufen.



Andreas
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Mitch am 07.07.15 - 12:04:54
Set auftragcol = auftragview.GetAllDocumentsByKey(strDocID, True)
Genauso stelle ich mir das vor. Das geht davon aus, dass a) in strDocID auch was drin steht und b) die erste Ansichtsspalte diesen Wert auch enthält.

Stelle das im Zweifelfall über deinen Debugger sicher, notfalls via Msgbox:
Code
Msgbox "Schlüssel: " & strDocID
Msgbox "Dokumente gefunden: " & auftragcol.Count

Set auftragdoc = auftragcol.GetFirstDocument
Do While Not auftragdoc Is Nothing
     obj = auftragdoc.GetItemValue("OppID")
    Debug.Print obj(0)
    If obj = strDocID Then
       [...]
    End If
   Set auftragdoc = auftragdoc.GetNextDocument(auftragdoc)
Loop
In obj ist jetzt ein Array drin. Den kannst du nicht (erfolgreich) mit einem String (strDocID ) vergleichen.
Versuche:
Code
If auftragdoc.OppID(0) = strDocID Then
     [...]
End If

Aber: Wofür machst du diese Prüfung? Du hast doch nur Dokumente gezogen, wo das der Falls ist. Oder nicht?

Gruß,

Mitch
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Tiger955 am 07.07.15 - 13:39:31
@Mitch:

Ich weiß nun bald nicht mehr, wie es mich ausdrücken soll.

Ich habe ein GEÖFFNETES Doc (eine Opportunity) mit der DocID 2B46470BCE2FD25BC1257D20003E3134.
Dieses Doc hat eine Opp.Position mit der DocID F7834DFFE9D7B8DDC1257D20003E3CD8  und stellt die Verknüpfung zu seinem "Parent-doc" der o.a. Opportunity durch einen Wert in seinem Feld OppID (dort steht wieder 2B46470BCE2FD25BC1257D20003E3134) her.

So, nun hat mit Peter mit den versteckten Views (Gehe..zu + Strg+Shift) geschrieben, wie die beiden Dokumente quasi aus einer View auszulesen sind (zumindest habe ich es so verstanden).

Ich habe aber keine View gefunden, die ZWEIMAL den Eintrag 2B46470BCE2FD25BC1257D20003E3134 in EINER Spalte enthält.
Ich finde nur eine View (siehe beigefügtes Bild), die einmal die DocID der Opportunity enthält und einmal die DocID der Opp.Position.
Wenn ich allerdings aus dieser View (LookupDocID) die Opp.Position öffne, finde ich in OppID die DocID der Opportunity.

Ich brauche Feldinhalte aus den Opp.Positions Dokument, DASS ist die Aufgabe.
Vielleicht fehlt uns auch eine View, z.B. mit einer weiteren Spalte, die die OppID's zeigt, um zuerst die DocID des Hauptdokuemnts zu finden und dann in der Spalte zu suchen, wo genau dieser Wert als OppID vorkommt. LookupDocID hat aber nur EINE Spalte.

Aber wie funktioniert dann die Verknüpfung in der Opportunity sel bst, wenn quasi oben die Daten der Opp stehen (Kunde, Nummer, etc.) und unten dann die Positionen dran hängen?

Oder ich habe das Ganze, was mir Peter schrieb, schlichtweg falsch verstanden.

Ich komme nicht weiter, weil ich die Art und Weise, wie Notes Dokumente ablegt, einfach nicht verstehen. Sorry!!

Set auftragcol = auftragview.GetAllDocumentsByKey(strDocID, True)  --> strDocID zeigt mir auch den gesuchten Wert der Opportunity, also 2B46470BCE2.....

Somit habe ich verstanden, dass das einem Filter gleichkommt
mit Debug.Print strDocID; vbTab; auftragcol.Count  bekomme ich auch  2B46470BCE2FD25BC1257D20003E3134      1    (1 steht für die DocID des Hauptdokuments), was stimmen würde.

Ich komme einfach nicht auf die Opp.Positionen hin, dass ist es.

Ich hoffe, dass ich nunmehr mein Problem nochmals darlegen konnte und freue mich auf die weitere Hilfestellung.

Michael
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Mitch am 07.07.15 - 13:56:24
Huhu,

also du willst diese drei Dinge:

1) Kennung aus geöffnetem Dokument A ziehen
2) Zugehöriges Dokument B mit Hilfe der Kennung aus Dokument A ziehen
3) Feldwert aus Dokument B auslesen

Richtig?

Zu 1)
Du musst in dem Dokument eine eindeutige Kennung finden, mit der du Dokument B finden kannst. Ob das die ID ist, die du genannt hast, weiß ich nicht. Die Kennung ist nicht zwingend etwas "notesspezifisches", das kommt drauf an wie die Anwendung entwickelt wurde. Falls Antwortdokumente verwendet werden, haben die Antworten ein Feld $REF in dem die UniversalID des Elterndokumentes steht. Falls keine Antwortdokumente verwendet werden, gibt es hoffentlich eine andere Kennung. Aber die können wir nicht kennen, die musst du raus finden.

Zu 2)
Wenn du nun eine Kennung aus A hast und weißt, wo (in welchem Item) diese Kennung in Dokument B steht, dann hast du mehrere Möglichkeiten Dokument B zu finden. Z.B. über eine Ansicht mit allen Dokument Bs, in der diese Kennung in der ersten Spalte steht. Oder über eine Suche in der Datenbank (NotesDatabase.Search). Oder, falls du die Antwort als NotesDocument im Zugriff hast, so hat diese eine ParentDocumentUnid - dann kannst du über NotesDatabase.getDocumentByUnid arbeiten. Auch hier gilt: Es kommt halt auf deine Anwendung an.

Zu 3)
Wenn du Dokument B hast, dann kannst du auf die Items zugreifen. GetItemValue liefert immer einen Array zurück. Wenn es sich um ein einfaches, einwertiges Textitem handelt, kannst du also einfach auf die Position 0 zugreifen und deinen Wert holen.

Gruß,

Mitch
Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Tiger955 am 07.07.15 - 14:56:07
Danke für deine Antwort.

Zu 1)
in $Ref steht im Dokument B (also in der Opp.Position) nicht die ID des übergeordneten Docs (also der Opportunity), sondern die EIGENE DocID, nur mit : dargestellt:    F2B46470B:CE2FD25B-NC1257D20:003E3134
Korrektur: OJA, es steht die OppID, aber nur irgendwie mit Trennzeichen versehen, aber die versuche ich zu bereinigen!!!!
Woher kann so eine Veränderung der DocID kommen??

Aus der original DocID 
2B46470BCE2FD25BC1257D20003E3134 wird
F2B46470B:CE2FD25B-NC1257D20:003E3134

in der $REF des Dokument B ????


daher zu 2)
Ja, die Kennung aus Dok A habe ich, das ist die DocID 2B46470BCE2FD25BC1257D20003E3134, welche ich im Dok B im Feld OppID finde. Da ich keine View habe, welche nur Dok Bs mit den OppID zeigt, wo ich u.a. die Nr. 2B46470BC....   finden würde, bleibt nur der Versuch mit NotesDatabse.Search.

In meinem Doc B (Opp.Position) finde ich kein Feld ParentDocumentUnid, die DocID des Doc A kommt nur im Feld OppID des Dok B vor.

Ich versuchs mal mit NotesDatabse.Search etwas anderes sehe ich momentan nicht aus den von dir aufgezeigten Optionen.
Wenn das nicht das Ergebnis bringt, dann müßten wir eben irgendwie eine View dazubasteln, welche die OppID der Dokumente B als erste Spalte hat.

Hoffe Dich richtig verstanden zu haben.

Danke
Michael

Titel: Re: Geöffnetes Dokument aus Domino Datenbank auslesen
Beitrag von: Mitch am 07.07.15 - 15:01:55
In meinem Doc B (Opp.Position) finde ich kein Feld ParentDocumentUnid, die DocID des Doc A kommt nur im Feld OppID des Dok B vor.

Code
Set NotesDocumentCollection = NotesDatabase.Search({DocID = "} & NotesDocumentA.UniveralID & {"}, Nothing, 0)

Das findet alle Dokumente in der Datenbank, die ein Feld DocID haben in welchem die DocumentUniqueID von Dokument A steht.