Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung - XPages => Thema gestartet von: Tobias211 am 30.10.13 - 17:02:00
-
Hallo zusammen,
so gerne wie ich mich mit den XPages beschäftige.....manchmal treiben sie mich in den Wahnsinn!
Bei der Entwicklung einer Veranstaltungs-DB bin ich auf ein merkwürdiges Problem gestoßen:
Rahmen:
XPage 1 - Erzeugung von Dokumenten, die als "Vorlagen" für Veranstaltungen dienen
- Binding mit Maske "Vorlagen"
- Textfelder und RT-Felder
XPage 2 - Erzeugung von Dokumenten, die auf Basis der Vorlagen eine "Veranstaltung" anlegen
und später über eine Ansicht aufgerufen werden können.
- Binding mit Maske "Veranstaltungen"
- Textfelder und RT-Felder
Vorgehensweise
1. Die XPage 1 besteht aus handelsüblichen Textfeldern und u. a. zwei RichText - Feldern in die
neben Links, formatierte Text etc. kleine Bilder (z. B. Symbole, oder kleinere Fotos) abgelegt
werden. Sobald alle Angaben gemacht sind, wird das Dokument gespeichert
und fertig.
2. Sobald die Vorlage später mal wieder benötigt wird, wird das Dokument aufgerufen (ohne
nochmals editiert zu werden) und über einen Button "Veranstaltung aus dieser Vorlage erstellen"
für alle Felder SessionScope-Variablen erstellt. Beispiel für eines der RT-Felder:
var val6 = getComponent("Seminarinhalte").getValue();
sessionScope.put("varSeminarinhalte", val6);
um die Inhalte auf der anschließend aufgerufenen XPage 2 zu
übernehmen (Neues Dokument!). Die Übernahme der Daten erfolgt bei den
RT-Feldern über den Vorgabewert des Feldes. Beispiel:
sessionScope.get("varSeminarinhalte")
3. Auf der XPage 2 werden dann individuelle Daten in weiteren Feldern hinzugefügt (z. B. Datum,
Beginn etc.) und das neue Dokument abgespeichert.
4. Die Mitarbeiter können das Veranstaltungsdokument über eine View aufrufen und sich über die
entsprechende Veranstaltung informieren, sich dort anmelden und und und....Fertig!
Problem
Ich musste leider feststellen, dass das Veranstaltungsdokument aus der Xpage2 die Inhalte der RT-Felder nicht sauber speichert, wenn ich "keine Änderung" nach Übernahme der Inhalte aus XPage 1 vornehme....das Dokument also ohne diese Felder zu berühren, speichere.
Ändere ich stattdessen den Inhalt...z. B. durch hinzufügen eines Zeichens, oder durch manuelles ausschneiden und wieder einfügen des Inhaltes (ich weiß leider nicht, wie ich das per Script mache....), dann werden zumindest die Textformatierungen und Links beim Speichern sauber eingetragen......allerdings bleibt es dabei, das die Bilder nicht angezeigt werden, nachdem das Dokument gespeichert und wieder aufgerufen wurde.
Analysen
Das Problem habe ich nur bei den Veranstaltungen (also Dokumenten aus XPage2)! Wenn ich ein neues Dokument über die XPage1 erzeuge (also eine Vorlage), dann werden die Texte und Bilder bis zum jüngsten Tag sauber und ordentlich in den besagten Feldern angezeigt.
Das Problem beschränkt sich innerhalb des Dokumentes auch nur auf die RT-Felder. Ganz normale Textfelder werden sauber gespeichert und ohne zu ändern auch nach speichern sauber angezeigt.
Ich habe mir die Databindings jetzt mehrfach angesehen. Hier scheint alles i. O. zu sein. Jede XPage ist sauber mit der ensprechenden Form verbunden. Auch die Feldtypen sind als RichText vermerkt.
Hr. Google und die Suchfunktion sind natürlich schon ausführlich gefragt worden. Ein Arbeitskollege sagt mir, dass er schonmal irgendwo etwas ähnliches davon gelesen hätte, dass es sich um einen Bug handele, dass die RT-Felder nach füllen durch Vorgabewerte, bei "nicht verändern" nicht gespeichert würden. Genaueres konnte er mir aber auch nicht sagen......
Meine Bitte
Hat jemand ein ähnliches Problem schonmal gehabt.....und konnte es lösen? Oder könnte mir jemand einen Hinweis geben, wie ich diesen Fehler beheben kann?
Wäre nett, wenn mir jemand einen Tipp geben könnte.
Danke und Gruß Tobias
P. S.: Danke für`s bis hierhin mitlesen.....ist ganz schön viel geworden..... :o :o :o :o
-
Welche Notes-Version hast du?
Weil dies ist mir beim Überfliegen der Fixlist aufgefallen und hört sich so ähnlich an:
http://www-10.lotus.com/ldd/fixlist.nsf/8ed1b46cfdba8957852570c90054623b/a3f86c37d0b0373885257c0c0057f3d7?OpenDocument
http://www-10.lotus.com/ldd/fixlist.nsf/5c087391999d06e7852569280062619d/f439f8be4bd7963785257b26007378ce?OpenDocument
Gruß
Roland
-
Hallo Roland,
wir nutzen die Version 8.5.3 FP4.
Tja, sieht so aus als wäre es tatsächlich "ein Fehler im Detail".
Ich werde es morgen mal mit nur einem RT-Feld probieren. (SPR# SODY8RGHCS - Fixed an issue with using multiple Rich Text or File Upload controls on one XPage .....)
Vielleicht habe ich ja Glück. Wenn alle Stricke reißen, gibt es einen dicken Vermerk auf der Seite, dass bitte keine Bilder zu verwenden sind. Wäre zwar sehr schade, aber bis Version 9.xxxx eben so.
Ich werde berichten.
Gruß Tobias
-
Ich könnte mir weiterhin vorstellen, dass bei einem getComponent("Seminarinhalte").getValue(); keine Bilder/Anhänge kopiert werden, sondern nur der HTML-Text
Zielführender ist es eventuell, wenn du über
sessionScope.inhalt=document1.getValue("feldname")
den Inhalt ausliest und über
documentNeu.setValue("feldname", sessionScope.inhalt)
wieder zurückschreibst (aber auch hier keine Gewähr, dass dies funktioniert)
Gruß
Roland
-
Hallo zusammen,
So, hab`s heute mal mit nur einem RT-Feld versucht. Hat leider nicht geklappt. Wenn ich das RT-Feld auf der XPage2 unberührt lasse, werden die Angaben (weder Text noch Bilder) nicht gespeichert und das Feld bleibt beim späteren Aufruf leer.
Auch das Anpassen des SessionScope-Abrufs von Roland hat leider keinen Erfolg gebracht.
Nun denn....., was soll`s!
Jetzt war es ja so, dass ich durch manuelles ausschneiden und wieder einfügen des Inhaltes zumindest formatierte Texte und Links behalten habe. Bevor ich jetzt einen Vermerk an das RT-Feld schreibe, dass man doch bitte einmal STRG+A / STRG+X / STRG+V betätigen solle, bevor man das Dokument speichert, würde ich zumindest dies im Hintergrund durchführen lassen.
Also Abruf der SessionScope-Variable, anschließend einmal Inhalt ausschneiden und wieder einfügen lassen. (damit sich der Feldinhalt geändert hat....)
Leider weiss ich die Befehlsfolge hierfür nicht.
Könnte sie mir jemand nennen? Dann hätte ich zumindest eine 80/20 - Lösung.
Gruß Tobias
-
Moin
Evtl. hilft eine kleine Anpassung am Schritt 2.
Anstatt die Felder im Session Scope abzulegen könntest Du einfach die DocumentUniqueID speichern und die Daten beim Öffnen der Xpage 2 holen.
Dann hast du Zugriff auf das darunterliegende Notesdokument und kannst die RichtextITems komplett kopieren.
-
Hallo Urs,
die DocUniniqueID speichere ich bereite im Dokument. allerdings stehe ich gerade auf dem Schlauch, wie ich mir den Feldinhalt beim Öffnen der Xpage 2 holen soll.
Aber wie kopiere ich nun die Inhalte aus dem Dokument der XPage 1 auf die XPage 2. bisher hab ich das halt immer mit der SessionScope Variable gemacht.
Könntest Du mir bitte einen Codeschnippsel hierfür geben?
Gruß Tobias
-
Das Problem liegt m.W. dran, das die MIME-Konvertierung nicht gemacht wird, wenn der Editor auf diese Weise "befüllt" wird.
Dadurch geht die Formatierung etc verloren.
Erst wenn im Client eine Änderung vorgenommen wird, registriert der Editor, das der Inhalt neu konvertiert werden muss, so dass beim nächsten Update/Speichern die Konvertierung durchgeführt wird.
Eventuell reicht ein Partial Refresh eines um den Editior liegenden Elementes aus (nur die Editore-Komponente reicht nicht), um die Konvertierung anzustoßen.
Ansonsten hat Per Henrik Lausten mal über das Problem gebloggt:
http://per.lausten.dk/blog/2012/12/xpages-dynamically-updating-rich-text-content-in-a-ckeditor.html (http://per.lausten.dk/blog/2012/12/xpages-dynamically-updating-rich-text-content-in-a-ckeditor.html)