Das Notes Forum
Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: arieger am 05.03.15 - 16:03:09
-
Hallo,
habe ein Frage zum Thema Richtextfeld. Wenn ich ein Richtextfeld in ein anderes Richtextfeld übernehme, klappt das soweit ganz gut mit dem "AppendRTItem". Allerdings ist der neueste Eintrag dann immer unten. (append-klar).
Nun möchte ich aber den neuesten Eintrag im ganz oben im Ziel-RTFeld haben ????
Hat mir jemand einen Tipp?
Viele Grüße
Anton
Sub Click(Source As Button)
Dim w As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim docA As NotesDocument
Dim rtitemA As Variant
Dim rtitemB As Variant
Dim rtnav As NotesRichTextNavigator
Set uidoc = w.CurrentDocument
Set docA = uidoc.Document
Call uidoc.Save
Set rtitemA = docA.GetFirstItem( "Serviceauftrag" )
Set rtitemB = docA.GetFirstItem( "Historie" )
Call rtitemB.AddNewLine(1)
Call rtitemB.AppendText( "-> aktualisiert am " + Now + ": ======" )
Call rtitemB.AddNewLine(1)
Call rtitemB.AppendRTItem( rtitemA )
'''''''''
Set rtItem = docA.ReplaceItemValue("Serviceauftrag", "")
docA.SaveOptions = "0"
Call docA.Save(False, True)
'Call uidoc.Close
End Sub
-
Guck dir mal die BeginInsert Methode in der Designer Hilfe an.
Changes the insertion position from the end of the rich text item to the beginning or end of a specified element.
Hinweis This method is new with Release 6.
Defined in
NotesRichTextItem
Syntax
Call notesRichTextItem.BeginInsert( element, [ after ] )
Chris
-
Hallo Chris,
danke für die Info. Daran bin ich schon am testen. Klapp aber noch nicht so ganz, vor allem wenn ein RTF leer ist. Versuche es einfach weiter.
Viele Grüße Anton
-
AppendRTItem ignoriert das begininsert.
Du könntest mit NotesUIDocument.ImportItem arbeiten, und mittels uidoc.GotoField( "Body" ) versuchen, den Cursor ganz nach oben zu stellen... Sonst musst Du das RTItem komplett neu aufbauen:
- Hilfsdokument erstellen
- Hilfsrichtextitem erstellen
- Dein RTItem appenden
- Original RTItem appenden
- Hilfsrichtext zurück ins Dokument bringen (geht über SelectAll und ImportItem oder per ReOpen...
-
Hallo Thorsten,
danke für die Info. Das mit dem UI geht nicht ganz so gut. Ich versuche es zu erklären:
das ist eine Datenbank , in der man Serviceaufträge erfasst. Das UIDoc ist geöffnet, dann kommt ein RTITEM_A, das ist bearbeitbar, hier gibt der User seinen Text oder Hardcopies ein.
Dann drückt er den Aktualisierungsbutton.
Nun soll das RTITEM_A komtplett nach RTITEM_B geschrieben werden und zwar so, das immer der aktuellste Eintrag oben ist. (deswegen scheitere ich mit append).
Das RTITEM_B muß berechnet sein, damit man nach der Eingabe nichts mehr ändern kann und auch eine Historie aufbaut.
Wäre das RTITEM_B bearbeitbar, ginge auch diese Formel:
@Command([EditGotoField];"BodySource");
@Command([EditSelectAll]);
@Command( [EditCopy] );
@Command([EditGotoField];"BodyTarget");
@Command( [EditPaste] )
Leider ist das RTITEM_B berechntet.
Das mit den Hilfedoc, meinst Du da Profildokumente oder ein Echtes erzeugen udn wieder löschen? (stark frequentierte DB ???)
Viele Grüße Anton
-
Dafür kannst Du auch ein echtes Dokument nehmen. Ich würde ein Dokument für jeden User verwenden (neu erstellen, falls noch nicht vorhanden, sonst das alte wiederverwenden (RTItem aus Dokument löschen)).
Diese Dokumente werden nirgendwo angezeigt und liegen nur herum, um für diese Aktion benutzt zu werden. Löschen würde ich die nicht, das bläht die Datenbank auf und den Usern sollte auch das Löschrecht fehlen.
Profildokumente gehen auch, ist reine Geschmacksache.
-
Du musst das "Hilfedoc" nicht speichern (und damit auch nicht wieder löschen)... nur ein rtitem.Update ist nötig, damit Du das gesamte Richtextitem mit allen Änderungen bekommst.
Wenn Dein "History"- Feld berechnet ist, dann wirst Du über ein ReOpen des Dokuments nicht drumrum kommen...
-
Hallo zusammen,
hab hier eine Lösung die funktioniert, dazu benötigt man aber 3 RT-Felder. Hier mal das Script, hoffe das hilft weiter.
Sub Click(Source As Button)
Dim w As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim docA As NotesDocument
Dim rtitemA As Variant
Dim rtitemB As Variant
Dim rtitemC As Variant
Set uidoc = w.CurrentDocument
Set docA = uidoc.Document
Call uidoc.Save
Set rtitemA = docA.GetFirstItem( "Serviceauftrag" )
Set rtitemB = docA.GetFirstItem( "Zwischenfeld" )
Set rtitemC = docA.GetFirstItem( "Historie" )
'''''''''
'Schritt 1.1
Call rtitemB.AppendRTItem( rtitemC )
Set rtItem = docA.ReplaceItemValue("Historie", "")
'Schritt 1.2
Call rtitemC.AddNewLine(1)
Call rtitemC.AppendText( "-> aktualisiert am " + Now + ": ==========================================================" )
Call rtitemC.AddNewLine(2)
Call rtitemC.AppendRTItem( rtitemA )
'Schritt 1.3
Call rtitemC.AppendRTItem( rtitemB )
'''''''''
'Leere RT-Felder A+B löschen und schließen
Set rtItem = docA.ReplaceItemValue("Serviceauftrag", "")
Set rtItem = docA.ReplaceItemValue("Zwischenfeld", "")
docA.SaveOptions = "0"
Call docA.Save(False, True)
Call uidoc.Close
End Sub
MfG
Domenik
-
Supersache,
vielen Dank für die Tipps. Funktioniert.
Viele Grüße
Anton :)