Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Alexander 28 am 10.10.12 - 14:55:31

Titel: RichTextFeld RTF aus Backend in Frontend importieren
Beitrag von: Alexander 28 am 10.10.12 - 14:55:31
Ich meine hier in diesem Forum schon einmal irgendwann einen Thread gelesen zu haben, wo's genau um dieses Thema ging. Leider habe ich diesen nicht wieder gefunden.

Mein Problem ist, dass ich in einem Dokument stehe, in welches ich den Inhalt eines Rich Text Feldes aus einem Dokument importieren möchte, welches ich mir zuvor über eine Picklist aus dem Backend hole.  Aber soweit mir bekannt ist, kann ich solche Dinge im FrontendDokument nicht sofort sichtbar machen, sondern muss das Frontend Dokument temporär schließen und wieder öffnen um den importierten Rich Text sehen zu können. Dies erfordert allerdings das Speichern meines Frontend Dokumentes, was widerum nicht möglich ist, da zu dem Zeitpunkt des Importes noch verschiedene Feld-Validierungen nicht erfüllt sind. Insofern befinde ich mich irgendwie in einer Sackgasse.

Hat irgend einer eine Idee wie ich so etwas lösen könnte?
Titel: Re: RichTextFeld RTF aus Backend in Frontend importieren
Beitrag von: Peter Klett am 10.10.12 - 15:47:36
Ausgewähltes Dokument mit einer Maske im Lesemodus anzeigen lassen, die nur den relevanten Inhalt (also das Richtextfeld) enthält, alles markieren, in die Zwischenablage kopieren, Dokument wieder schließen, im uidoc ins Richtextfeld gehen und dort wieder einfügen.
Titel: Re: RichTextFeld RTF aus Backend in Frontend importieren
Beitrag von: Tode am 10.10.12 - 15:51:18
Das geht recht einfach, wenn Dein Dokument, in das Du einfügen willst, zum Bearbeiten geöffnet ist. Dann kannst Du ganz einfach über die (nicht dokumentierte) Funktion "NotesUIDocument.ImportItem" gehen (verwendet im InsertSignature- Code des Mailtemplater, man kann also davon ausgehen, dass das Funktioniert. Hier ein Auszug aus der CoreEmailClasses- ScriptLib:
Code
Call uiDoc.ImportItem(profileDoc, "Signature_Rich")
Musst nur schauen, dass Dein Cursor per uiDoc.GotoField() im Richtext- Feld steht...
Titel: Re: RichTextFeld RTF aus Backend in Frontend importieren
Beitrag von: pram am 10.10.12 - 17:26:39
dritte Möglichkeit: du machst ein Reopen, dann kannst du in der Zeit in der das Doc zu ist, das RT-Feld verändern.

Gruß
Roland
Titel: Re: RichTextFeld RTF aus Backend in Frontend importieren
Beitrag von: Alexander 28 am 11.10.12 - 09:09:10
Ausgewähltes Dokument mit einer Maske im Lesemodus anzeigen lassen, die nur den relevanten Inhalt (also das Richtextfeld) enthält, alles markieren, in die Zwischenablage kopieren, Dokument wieder schließen, im uidoc ins Richtextfeld gehen und dort wieder einfügen.

Hallo Peter, ja genau diesen Weg bin ich bisher gegangen, allerdings habe ich einen wesentlichen Unterschied bei meiner Lösung. Ich habe das RTF nicht in einer separaten Maske anzeigen lassen, sondern das Original BackendDokument im Bearbeiten Modus geöffnet und die Schritte wie beschrieben durchgeführt. Das erforderte aber immer einen Editor Zugriff auf das Backenddokument, was ich zukünftig vermeiden möchte. Insofern werde ich deine Lösung auf jeden Fall einmal probieren. Vielen Dank dafür.
Titel: Re: RichTextFeld RTF aus Backend in Frontend importieren
Beitrag von: Alexander 28 am 11.10.12 - 09:10:34
Das geht recht einfach, wenn Dein Dokument, in das Du einfügen willst, zum Bearbeiten geöffnet ist. Dann kannst Du ganz einfach über die (nicht dokumentierte) Funktion "NotesUIDocument.ImportItem" gehen (verwendet im InsertSignature- Code des Mailtemplater, man kann also davon ausgehen, dass das Funktioniert. Hier ein Auszug aus der CoreEmailClasses- ScriptLib:
Code
Call uiDoc.ImportItem(profileDoc, "Signature_Rich")
Musst nur schauen, dass Dein Cursor per uiDoc.GotoField() im Richtext- Feld steht...

Hi Tode, herzlichen Dank für diesen Hinweis. Davon habe ich ja überhaupt noch nie etwas gehört!? Werde ich heute auf jeden Fall einmal ausprobieren und ein kurzes Feedback geben. Vielen Dank dafür.
Titel: Re: RichTextFeld RTF aus Backend in Frontend importieren
Beitrag von: Alexander 28 am 11.10.12 - 09:11:27
dritte Möglichkeit: du machst ein Reopen, dann kannst du in der Zeit in der das Doc zu ist, das RT-Feld verändern.

Gruß
Roland

Hi Roland, das habe ich nicht wirklich verstanden!? Reopen  ohne vorher zu speichern?!  Keine Ahnung wie du das meinst ...
Titel: Re: RichTextFeld RTF aus Backend in Frontend importieren
Beitrag von: Tode am 11.10.12 - 09:16:17
Reopen geht nur mit speichern... und wegen "ImportItem": Davon haben nur diejenigen was gehört, die zufälligerweise mal am Signatur- Code von IBM was machen mussten, oder eben einen Blog- Eintrag zu dem Thema gelesen haben... Leider verschweigt uns IBM diese einigermassen geniale Funktion beharrlich (wie auch einige andere, die man nur durch Zufall im Mail- Template- Code findet)
Titel: Re: RichTextFeld RTF aus Backend in Frontend importieren
Beitrag von: pram am 11.10.12 - 09:54:48
Thorsten, hier irrst du, Reopen geht auch ohne speichern, in dem man zuerst das Dokument neu öffnet und dann das alte schließt.
Ich skizziere mal die Vorgehensweise:

Code
' Globale Variablen
Set myUiDoc = .... ' Dies ist das gerade geöffnete UI-Document und muss z.B. im PostOpen der Maske gesetzt werden, evtl geht auch ws.currentDocument
Set myBackendDoc = myUiDoc.Document  ' das zugehörige BackendDoc

function reopen()
  Call myUIDoc.Refresh(True)	' Update richtext aus UI ins backend
  ' An dieser Stelle kann myBackendDoc verändert werden (auch Richtext)
  Set oldUiDoc = myUiDoc
  Set myUiDoc = ws.editDocument(true, myBackendDoc) ' wir öffnen das aktuelle Backend-Doc nochmals
  set myBackendDoc = myUiDoc.document ' und holen uns das BackendDoc vom UIDoc (dies ist zwar das gleiche Dokument aber ein neues Objekt. s.u.!)
  ' Altes UIDoc schließen:
  oldUiDoc.document.SaveOptions = "0" ' Wichtig oldUIDoc.document != myBackendDocument (auch wenn es die gleiche UNID hat)
  call oldUiDoc.close(true)
end function

@Alexander: Wichtig für dich ist vielleicht noch, dass die Methode ImportItem erst ab Notes 8.5 (evtl schon ab 8.0) zur Verfügung steht.

Gruß
Roland
Titel: Re: RichTextFeld RTF aus Backend in Frontend importieren
Beitrag von: Alexander 28 am 11.10.12 - 12:17:31
Hab uiDoc.ImportItem ausprobiert und bin begeistert. Warum nur ist diese Funktion nicht dokumentiert. Hab's schon so oft vermisst!!!!

Tausend Dank, Tode (und an alle anderen für die Hilfe  ;) )