Autor Thema: Wertänderung in doc vor doc.CopyToDatabase(NotesDatabase) wird nicht übernommen  (Gelesen 2033 mal)

Offline Odi

  • Frischling
  • *
  • Beiträge: 15
Hallo,

ich habe ein kleines Problem mit NotesDocument.CopyToDatabase(NotesDatabase).

Über eine Schaltfläche können wir Mails an ein Ticketsystem weiterleiten. Das funktioniert über ein CopyToDatabase in eine eigene Mail-DB (IMAP fähig) die dann vom externen Ticketsystem regelmäßig ausgelesen wird.

Es sollte nun eine kleine Erweiterung vorgenommen werden, dass die Betreffzeile in der Ursprungsmail bei Bedarf um ein Kennzeichen (TicketID des Ticketsystems) ergänzt wird, damit die Mail im Ticketsystem automatisch zugeordnet werden kann.

Die vorhandene Funktionalität wurde einfach um folgende Zeilen erweitert:

//docCurrent ist die aktuelle Mail in der Ursprungs-DB
//docSupport wird das neue Dokument in der Support-DB

If prompt4TicketID Then
        ticketID = InputBox$("TicketID", "Eingabe")
        If Trim(ticketID) <> "" Then
            subject = docCurrent.GetItemValue("Subject")
            subject(0) = subject(0) + " (TicketID " + ticketID + ")"
            Set item = docCurrent.ReplaceItemValue( "Subject", subject)
        End If
End If
...
//bisheriger Code
'Copy document to support database and move to Inbox in support database
Set docSupport = docCurrent.CopyToDatabase( dbSupport )
Call docSupport.PutInFolder("($Inbox)", True)
If bLogging > 0 Then
   Call LogEvent("Current document copied to support database in folder $Inbox" , SEVERITY_LOW, Nothing)
End If

Leider erhält das neue Dokument in der Support-DB dann (noch) nicht das angepasste Subject aus der Ursprungs-DB.

Muss das Ursprungsdokument im Backend vorher zwingend gespeichert werden? Ich hätte erwartet, dass das auch ohne geht und würde das gerne auch vermeiden, da der Anwender in der Ursprungs-DB nicht zwingend Editor Rechte auf die DB hat.

Mache ich einen Denkfehler, oder gibt es einen besseren Weg?

Olaf
« Letzte Änderung: 12.12.13 - 15:35:50 von Odi »

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.883
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
probier mal:

Code
Set docSupport = New NotesDocument( dbSupport )
Call docCurrent.CopyAllItems( docSupport )

Damit sollten die ungespeicherten Items mitgenommen werden. Des weiteren kannst Du vor dem speichern (was CopyToDatabase sofort tut) Autoren- Rechte vergeben, denn sonst kann der User das Dokument nach dem Copy nicht mehr verändern.

Alternativ änderst Du das Subject halt im Ziel- Dokument erst...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
So wie Torsten das vorgeschlagen hat, würde ich das auch machen (bzw. mache ich das immer), allerdings würde ich nicht erst das Quelldokument ändern und dann in das Zieldokument kopieren, sondern umgekehrt erst das Zieldokument erstellen, Items rüberkopieren und dann im Zieldokument ändern. Wenn sonst später eine Änderung dazukommt, dass das Quelldokument auch gespeichert wird, hast Du da die dort nicht gewünschten Änderung mitgespeichert.

Ein doc.CopyToDatabase speichert das Dokument sofort (mit allen Nachteilen, z.B. fehlenden Autorenrechten, wie Tode auch schon geschrieben hat), bei der anderen Variante musst Du das Dokument selbst speichern.

Noch ein Vorteil dieser Methode ist, dass Du dabei die UniversalID setzen kannst, so dass das Zieldokument in der anderen Datenbank die gleiche ID hat, und damit das gleiche Erstellungsdatum ausgewiesen wird. Sowas kann auch hilfreich bei Synchronisierungen sein.

Offline Odi

  • Frischling
  • *
  • Beiträge: 15
Danke Torsten & Peter,

klappt natürlich auf Anhieb.

Peter dein Hinweis die Änderung besser nicht im Ursprungsdokument zu machen (sofern es nicht mehr gespeichert wird) ist natürlich korrekt.

In meinem Code weiter unten ( ;) nicht sichtbar für euch) wurden im Ursprungsdokument noch weitere Felder ergänzt, aus denen ersichtlich wird, wer und wann das Dokument ans Ticketsystem weitergeleitet hat, so dass da ganz am Ende noch ein Save kam...

Danke für die schnelle Hilfe!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz