Das Notes Forum

Lotus Notes / Domino 10 => ND10: Entwicklung => Thema gestartet von: Jürgen Schomann am 17.09.20 - 18:10:54

Titel: NotesRichTextNavigator.FindFirstElement(RTELEM_TYPE_TABLE)
Beitrag von: Jürgen Schomann am 17.09.20 - 18:10:54
Ich habe eine Maske mit einem Rich Text-Feld. Im Dokument erstelle ich dann eine Tabelle in diesem Feld und speicher das Dokument.
Über eine Aktion suche ich dann über NotesRichTextNavigator.FindFirstElement(RTELEM_TYPE_TABLE) diese Tabelle.
Dabei gibt es keine Probleme.

Wenn ich die Maske aber im Design ändere, indem ich eine Tabelle erstelle und dann diese Rich Text-Feld in dieser Tabelle anordne und o. g.
Vorgang wiederhole, wird die Tabelle in dem Rich Text-Feld nicht mehr gefunden. Rückkehrwert 'False'.

Kann mir hierzu jemand etwas sagen?

Gruß Jürgen
Titel: Re: NotesRichTextNavigator.FindFirstElement(RTELEM_TYPE_TABLE)
Beitrag von: CarstenH am 18.09.20 - 09:01:19
RT-Felder in Tabellen sind mit Vorsicht zu genießen, sie übernehmen zwangsläufig die Zelleneigenschaften von der eingebetteten Stelle. Ich versuche das meist mit extra (Teil-)Masken zu umgehen.

Und um Missverständnissen vorzubeugen:
Du erstellst auch bei deinem zweiten, fehlgeschlagenen Versuch innerhalb des RT-Feldes eine Tabelle? Also eine Tabelle in einer Tabelle und das Lokalisieren der inneren Tabelle geht schief?

Carsten
Titel: Re: NotesRichTextNavigator.FindFirstElement(RTELEM_TYPE_TABLE)
Beitrag von: Jürgen Schomann am 18.09.20 - 14:41:57
Hallo Carsten,
Danke für deine Antwort.
Ja, ich habe auch in dem 2. Versuch, der nicht läuft, eine Tabelle in dem Rich Text-Feld erstellt.
Auch ein Versuch über eine Teilmaske mit dem Rich Text-Feld funktioniert dann nicht.
Es scheint leider so zu sein, dass das Layout dadurch stark eingeschränkt ist oder?
Übrigens ein DXL-Export zeigt eigentlich keine Unterschiede zwischen Feld einzeln oder in einer Tabelle, außer linken Rand.

Gruß Jürgen
Titel: Re: NotesRichTextNavigator.FindFirstElement(RTELEM_TYPE_TABLE)
Beitrag von: CarstenH am 21.09.20 - 09:58:57
Auch ein Versuch über eine Teilmaske mit dem Rich Text-Feld funktioniert dann nicht.

Da man keine TM in eine Tabelle einbetten kann hast du vermutlich meine Idee dahinter nicht ganz verstanden.
Mein Vorschlag bezog sich darauf, das RTF über eine Teilmaske von der äußeren Tabelle zu befreien.
Hängt aber stark von deiner Anwendung ab was du da eigentlich tust und ob das überhaupt in dem Kontext machbar ist.

Zitat
Es scheint leider so zu sein, dass das Layout dadurch stark eingeschränkt ist oder?

Jupp, das ist die Kehrseite der Medaille - man muss das UI an der Stelle komplett neu denken.

Zitat
Übrigens ein DXL-Export zeigt eigentlich keine Unterschiede zwischen Feld einzeln oder in einer Tabelle, außer linken Rand.

Das ist leider nicht ganz korrekt; ich habe mir allerdings kein DXL dazu angeschaut sondern mal mit NotesPeek einen Blick auf das im Backend gespeicherte RTF geworfen und da gibt es definitiv einen Unterschied (siehe Bild):

Links & rechts sieht man das gleiche Richtextfeld (kein Text nur eine leere Tabelle mit 2 Zeilen & 2 Spalten darin), mit der gleichen Maske gespeichert.
Allerdings habe ich in einem Fall das RTF in der ansonsten leeren Maske gespeichert (Bild rechts) und danach habe ich in der Maske eine Tabelle angelegt und das RTF in die Tabelle versetzt (Cut&Paste), danach habe ich das Dokument aus dem ersten Test nochmal geöffnet und einfach nur ohne weitere Änderungen neu gespeichert (Bild links).

Wie man sieht unterscheidet sich der Inhalt des RTF um den Zusatz "Nested", sowohl vor der Tabelle als auch allen Zellen.

Und, was man nicht sieht, ich hatte mir eine Aktion reingebaut um die erste Tabelle/Zelle zu suchen. Solange das RTF noch den rechten Zustand hat funktioniert das, egal ob in der Maske darum gerade eine Tabelle zu sehen ist oder nicht. Erst wenn ich das RTF neu speichere während es in der Tabelle eingebettet ist funktioniert es nicht mehr, selbst wenn man danach die Tabelle aus der Maske wieder rausnimmt (auch hier: neu speichern dann geht es natürlich wieder).

Hier käme mein Workaround mit der separaten Maske/Teilmaske zum Tragen, wenn man das Dokument im Hintergrund mit einer separaten Maske (ohne die umrandende Tabelle) kurz neu speichert hätte man das RTF ohne die "Nested" Eigenschaften. Ist aber ein Hack den ich nur im äußersten Notfall in Betracht ziehen würde.

Zum Problem an sich habe ich einen älteren (noch Release 7) IBM SPR gefunden, mit dem Vermerk "wird mit 7 nicht mehr gefixt, evtl. später mal".
In späteren Versionen habe ich nichts mehr gefunden (aber auch ehrlich gesagt nicht soooo intensiv gesucht, da viele Links nur noch über die Wayback Machine abrufbar sind und noch viel mehr bereits endgültig den Jordan runter gegangen ist).

Hier der Link zum 7.0.4 SPR: https://www.ibm.com/support/pages/apar/LO40317

Falls es mal gefixt wurde ist es ein Regression Bug, ansonsten wird's Zeit zum Fix und kannst einen neuen Case aufmachen.
Ab hier wieder dein Part ;)

HTH
Carsten
Titel: Re: NotesRichTextNavigator.FindFirstElement(RTELEM_TYPE_TABLE)
Beitrag von: Jürgen Schomann am 22.09.20 - 11:54:14
Hallo Carsten,
Nochmals vielen Dank für deine Mühe mit der umfangreichen Antwort.
Das mit dem neuen Speichern des Dokuments, wobei das Rich Text-Feld wieder außerhalb der Tabelle ist und umgekehrt,
wobei wechselseitig die Tabelle gefunden wird oder nicht, habe ich auch schon festgestellt.
Mit dem Layout muss man sich eben darauf einstellen. Dumm ist es nur wenn man Dokumente von Kunden bekommt, wo so etwas vorliegt.
Man hat dann keine direkte Chance.
In meinem Fall habe ich das aber selbst in der Hand. Ich weiß dank deiner umfangreichen Erläuterung nun Bescheid.

Viele Grüße und bleib gesund.
Jürgen