Das Notes Forum

Lotus Notes / Domino Sonstiges => OLE/COM-Programmierung => Thema gestartet von: DerVissi am 07.04.16 - 16:48:42

Titel: Delphi Anwendung bekommt nur altes Dokument
Beitrag von: DerVissi am 07.04.16 - 16:48:42
Hallo zusammen,

folgendes Szenario:

Wir lesen ein Dokument mit einer Delphi Anwendung aus und schreiben da anschließend was rein, speichern, fertig.
Das geht soweit ohne Probleme, wenn wir nur mit der Delphi Anwendung arbeiten.

Aber wenn wir im Gegenzug im Notes in das gleiche Dokument reinschreiben und dies speichern und schließen,
das dann wieder auslesen lassen von der Delphi Anwendung, bekommen wir nur die alten Daten zurück....

Natürlich haben wir alle Variablen Unassigned und das Dokument neu aus der DB geholt mit GetDocumentByUNID

Gibt es da irgendwas zu beachten? Falls ich mich unverständlich ausgedrückt habe entschuldige ich mich.

Gruß
Andreas
Titel: Re: Delphi Anwendung bekommt nur altes Dokument
Beitrag von: jBubbleBoy am 07.04.16 - 17:14:24
Und wenn du aus der Delphi-Anwendung zurückspeicherst, dann steht wieder der alte Wert in Notes?
Dann hält deine Delphi-Anwendung die Daten vor, oder es werden unterschiedliche Felder angesprochen, schon mal die Dokumente untersucht, so vorher / nachher Vergleich auf Feldebene?
Titel: Re: Delphi Anwendung bekommt nur altes Dokument
Beitrag von: Tode am 07.04.16 - 17:36:10
Bitte Beispielcode... Ohne den ist das alles Rätselraten.
Im Speziellen ist Euer "Workflow" aus der Schilderung nicht wirklich nachvollziehbar:

Wie wird gearbeitet? Delphi- Änderung, Notes- Client- Änderung und dann wieder Delphi?
Titel: Re: Delphi Anwendung bekommt nur altes Dokument
Beitrag von: Andrew Harder am 07.04.16 - 21:15:43
Schreib bitte, das es kein Profildokument ist...
Titel: Re: Delphi Anwendung bekommt nur altes Dokument
Beitrag von: DerVissi am 08.04.16 - 08:31:01
Nein kein Profildokument. Es handelt sich um ein Personendokument aus einem Persönlichen Adressbuch das auf dem Server liegt.
Hab vom Kollegen eben den Beispiel Code bekommen

Code
//DB is the Database where we save these Documents
        Doc := Unassigned;
        Doc := DB.getDocumentByUnid('unsere unid');

        x:= 0;
        Item := Unassigned;
        Item := Doc.GetFirstItem('Categories');

        vCategories := Item.Values;

        while ((length(vCategories) > x) and (VarToStr(Doc.GetItemValue('LastName')[0]) = 'Mustermann')) do begin
          if(vCategories[x] = 'Newsletter') then
            vNewsletter := 'Newsletter'
          x := x+1;
        end;

        if((AnsiContainsStr(vNewsletter, 'Newsletter')) and (qryAnpa.FieldByName('KATEGORIE').AsString <> 'Newsletter')) then begin
          Doc.Categories := '';
          x := 0;
          while (length(vCategories) > x) do begin
            if(vCategories[x] <> 'Newsletter') then
            Item.AppendToTextList(vCategories[x]);
            Inc(x);
          end;
        end
        else if ((not AnsiContainsStr(vNewsletter, 'Newsletter')) and (qryAnpa.FieldByName('KATEGORIE').AsString = 'Newsletter')) then begin
          Item := Doc.GetFirstItem('Categories');
          Item.AppendToTextList('Newsletter');
        end;

        if(not Doc.Save(False, False)) then // Dokument speichern
          raise Exception.Create('Fehler beim Speichern');

Wir wollen einen einfachen Abgleich bauen, sind aber noch am Anfang:

momentan möchten wird das Feld Categories erweitern mit der Kategorie "Newsletter" bzw. wollen wir diese Kategorie auch entfernen können. Das funktioniert auch wunderbar, nur wenn ich jetzt beispielsweise dieses Dokument danach mit Notes bearbeite, sprich die Kategorieen wieder veränder und das Dok speichere und mein Kollege startet das Programm wieder, bekommt er nur die werte des ersten Durchlaufs.

Edit:
Das Dokument im Notes hat wenn ich es im Notes prüfe die aktuellen werte die ich ihm gegeben habe.
Titel: Re: Delphi Anwendung bekommt nur altes Dokument
Beitrag von: Driri am 08.04.16 - 08:59:53
Die Änderung in Notes geschieht aber in der selben Replik der Datenbank, wie der Zugriff des Programms ?
Titel: Re: Delphi Anwendung bekommt nur altes Dokument
Beitrag von: DerVissi am 08.04.16 - 09:01:39
Genau, die gleiche Datenbank. Die wird nicht repliziert
Titel: Re: Delphi Anwendung bekommt nur altes Dokument
Beitrag von: jBubbleBoy am 08.04.16 - 13:19:54
Ich denke schon das die DB repliziert, warum sollte man sonst ein persönliches Adressbuch auf den Server legen?

Das Verhalten habt ihr auch wenn die Delphi-Anwendung einmal geschlossen / geöffnet wird?
Lasst euch einmal das letzte Änderungsdatum ausgeben, hier müsste ja das vom Notes-Client erscheinen.
Titel: Re: Delphi Anwendung bekommt nur altes Dokument
Beitrag von: Tode am 08.04.16 - 13:53:49
Dieses Verhalten habe ich in einer reinen LotusScript- Anwendung kürzlich auch gehabt: So lange das Datenbank- Objekt nicht recycelt wurde habe ich per "GetDocumentByUnid" immer eine gecachte Version des Dokumentes bekommen.

Ich musste entweder das DB Objekt recyceln (LotusScript: Delete db) oder das Dokument tatsächlich recyceln und nicht nur "unassignen" (Delete doc vs. Set doc = Nothing).
Wie ein "Delete" in Delphi aussehen würde, kan ich leider mangels Delphi- Kenntnissen nicht sagen.
Titel: Re: Delphi Anwendung bekommt nur altes Dokument
Beitrag von: DerVissi am 08.04.16 - 14:16:30
Nein es wird definitiv nicht repliziert. Das ist das Einzige bei dem ich mir sicher bin  ;D

Nun nachdem wir hin und her probiert haben, PC neustarts, neues Dokument erstellt, usw. funktioniert es wieder.
Das Problem ist, das wir nicht wissen was das Problem war.....  :-:

Ich glaube das das was Tode beschreibt, unserem Problem am nächsten kommt.

Ich danke euch jedenfalls für die Tipps, falls der Fehler nochmals auftauchen sollte meld ich mich wieder.