Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: Alexander 28 am 23.09.16 - 09:03:48

Titel: Kopiertes RT Item übernimmt Steuerungen aus Quellfeld
Beitrag von: Alexander 28 am 23.09.16 - 09:03:48
Hallo und guten Morgen zusammen.
Ich kämpfe mal wieder mit einem Problem, was ich in den vergangenen Jahren immer mal wieder hatte und für welches ich bis heute keine Lösung finden konnte. Vielleicht kann mir einer der hier anwesenden Programmierprofis auf die Sprünge helfen!?

Ich habe 1 Dokument welches ein RichText-Feld enthält. Dieses Feld befindet sich in der Maske  in einer Tabelle und diese Tabelle hat verschiedene Außen- und Innenrandeinstellungen.

Nun möchte ich dieses Feld via Skript in ein neues Dokument kopieren, welches ich via Skript erzeuge. Das RichText-Feld des neuen Dokumentes befindet sich aber nicht in einer Tabelle, sondern ist freigestellt direkt in der Maske vorhanden. Die Daten werden auch sauber in das neue Feld übernommen, dummerweise aber immer mit den Randeinstellungen des alten Feldes!? Irgendwie verrutscht der Inhalt im neuen Feld weil wohl offensichtlich das alte Feld in einer Tabelle stand und dadurch die Randeinstellungen andere sind als die des neuen Feldes, welches ja freigestellt ist.

Meine Frage ist, ob es irgendeine Möglichkeit gibt den Inhalt des alten Feldes zu übernehmen aber die Randeinstellungen des neuen Feldes, welche ja standardmäßig auf 2,54 cm steht, zu verwenden?

Ich habe es sowohl mit der Methode AppendRTItem als auch mit Copyitemtodocument probiert. Das Verhalten ist in beiden Fällen völlig identisch.

Zusätzlicher Hinweis: Die Routine muss im Backend ablaufen.
Herzlichen Dank im Voraus!
Titel: Re: Kopiertes RT Item übernimmt Steuerungen aus Quellfeld
Beitrag von: Glombi am 23.09.16 - 10:31:53
Das lässt sich evtl. mit NotesRichTextParagraphStyle bewerkstelligen.

Andreas
Titel: Re: Kopiertes RT Item übernimmt Steuerungen aus Quellfeld
Beitrag von: jBubbleBoy am 23.09.16 - 11:37:57
Das geht wie folgt:
1. Exportiere das Dokument als Notes-XML-Dokument, suche diese Stellen:
Code
<pardef id='2' leftmargin='1.7875in'/>
"1.7875" ist symbolisch, hier kann alles stehen und es definiert den Abstand.
2. Ersetze das mit:
Code
<pardef id='2' leftmargin='1in'/>
Das ist der Vorgababstand von 2,54 cm, die ID solltest du beibehalten.
3. Das modifizierte Notes-XML-Dokument wieder importieren.

Das funktioniert - ist nur etwas aufwendig.

Noch mehr Aufwand musst du betreiben, wenn bestimmte Abstände ihre Daseinsberechtigung haben ;)
Titel: Re: Kopiertes RT Item übernimmt Steuerungen aus Quellfeld
Beitrag von: Alexander 28 am 26.09.16 - 07:57:36
@Andreas:
Mit NotesRichTextParagraphStyle habe ich es bereits mehrfach ohne Erfolg probiert. Die Steuerungsanweisungen gehen irgendwie immer verloren. Trotzdem Danke für den Tipp.

@Erik:
Damit habe ich noch nie gearbeitet. Hört sich für mich aber vielversprechend an. Werde ich die Tage mal probieren. Danke für den Hinweis.

Alles Gute für euch!
Alex
Titel: Re: Kopiertes RT Item übernimmt Steuerungen aus Quellfeld
Beitrag von: Alexander 28 am 28.09.16 - 10:49:21
Hi Erik. Also irgendwie habe ich jetzt ein Brett vorm Kopf. Den DXL Export des Dokumentes habe ich hinbekommen und den unveränderten Import auch.

Die Frage ist, wie komme ich jetzt an den eigentlichen Text bzw. wie führe ich die "Suchen-und-Ersetzen" Funktion aus? Ich habe es versucht mit stream.ReadText() aber sobald ich eine solche Zeile in das Skript einbaue, bekomme ich eine Fehlermeldung.

Vielleicht kannst du mir mit einem kurzen Codeschnipsel nochmal auf die Sprünge helfen.
Muss ich eigentlich zwingend eine Datei ins Filesystem exportieren und diese wieder importieren oder kann ich das auch irgendwie temporär machen ohne eine physikalische  Datei zu erzeugen?
Titel: Re: Kopiertes RT Item übernimmt Steuerungen aus Quellfeld
Beitrag von: jBubbleBoy am 28.09.16 - 11:24:43
Sauber wäre es wenn man einen XML-Parser, wie z.B. NotesDOMParser zur Manipulation einsetzen würde.
In diesem Fall würde ich aber eine pragmatische, einfache Herangehensweise bevorzugen. Mit der Annahme das <pardef immer in einer Zeile steht - sollte der Aufwand nicht allzu groß sein.
Datei lokal abspeichern, dann zeilenweise durchlaufen, nach leftmargin=' und danach nach '/> suchen und Wert ersetzen.
Das Ergebnis schreibst du in eine neue Datei, welche dann importiert wird.
Titel: Re: Kopiertes RT Item übernimmt Steuerungen aus Quellfeld
Beitrag von: Alexander 28 am 28.09.16 - 12:26:42
Klasse. Hat funktioniert. Vielen Dank für Deine Zeit!  :)
Alex