Autor Thema: Cursor an Anfang des RT-Feldes stellen  (Gelesen 3167 mal)

Offline emadowo

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Geschlecht: Männlich
  • Danke für dieses Forum!
Cursor an Anfang des RT-Feldes stellen
« am: 03.07.08 - 14:24:01 »
Hallo Gemeinde!

Habe eine Datenbank, in der die User einen Kommentar verfassen. Ins Feld "Dokumentation" soll jeweils am Anfang des Feldes der neueste Eintrag stehen und mit Datum und UserName beginnen.

Das Einfügen des Textes habe ich mit AppendText und mit Hilfe dieses unverzichtbaren Forums hinbekommen:

Call RTItem.AppendStyle(BoldRed)
Call rtitem.AppendText( "<" + Today() + " / " +session.CommonUserName + ">" )
Call RTItem.AddNewLine(1)
Call RTItem.AppendStyle(Black)
Call RTItem.AppendText("Hier kommt Text rein!")   
Call RTItem.AddNewLine(1)

....jedoch wird der Text angehängt (ja, ist mir klar, wenn ich Append verwende, daß dies "anhängen" heißt)

Nun müßte ich noch den Cursor an den Beginn des Feldes bewegen. Wißt ihr Rat? Danke!

Erwin Maier
IT-Administration Genossenschaftsbank
Notes R9.01
Kenntnisse: Formelsprache, Script

Offline Ottmar

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Geschlecht: Männlich
Re: Cursor an Anfang des RT-Feldes stellen
« Antwort #1 am: 03.07.08 - 14:52:04 »
Hmm,

willst Du wirklich nur mit dem Cursor auf den Anfang des Feldes springen?
Call notesUIDocument.GotoField( fieldName$ )
oder
Call notesUIDocument.GotoTop und dann feldweise weiterspringen, damit der Cursor auch am Anfang steht.

Oder willst Du eher Dein Log nicht anhängen, sondern einfügen?
Dazu rate ich, ein neues temporäres RT-Feld aufzubauen, zunächst den aktuellen Code dort reinzuschreiben - wie Du das gemacht hast und dann das bereits bestehende RT-Feld komplett anzuhängen. Dann steht der neue Code oben.

Offline emadowo

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Geschlecht: Männlich
  • Danke für dieses Forum!
Re: Cursor an Anfang des RT-Feldes stellen
« Antwort #2 am: 03.07.08 - 14:58:46 »
Hallo und schonmal vielen Dank!

Vielleicht sollte ich den kompletten Code mal darstellen:

Sub Click(Source As Button)
   Dim workspace As New NotesUIWorkspace      'Declare and set workspace to the current Notes workspace
   Dim session As New NotesSession      'Declare and set session to the current Notes session   
   Dim uidoc As NotesUIDocument         'Declare uidoc as type NotesUIDocument
   Dim doc As NotesDocument         'Declare doc as type NotesDocument
   Dim RTItem As NotesRichTextItem      'Declare Rich Text Item
   Dim var As String
   
   Set db = Session.CurrentDatabase      'Set db to the current database      
   Set uidoc = workspace.CurrentDocument      'Set uidoc to the current document
   Set doc = uidoc.Document            'Set doc to the current document through uidoc
   
   Set BoldRed = session.CreateRichTextStyle   'Create BoldRed as an instance of the NotesRichTextStyle class
   BoldRed.NotesColor = COLOR_RED      'Set the font color for style BoldRed to Red
   BoldRed.Bold = True              'Turn on bold for style BoldRed
   
   Set Black = session.CreateRichTextStyle   
   Black.NotesColor = COLOR_BLACK
   Black.Bold = False
   
   uidoc.Close               'Close the current document
   Call uidoc.GotoField( "Auftrag_Beschreibung" )   
   Set rtitem = doc.GetFirstItem("Auftrag_Beschreibung")      'Get access to the rich text field, Bodyrichtxt
   Call RTItem.AddNewLine(1)         'Add a blank line to the rich text item, Body
   Call RTItem.AppendStyle(BoldRed)      'Apply the style BoldRed to Body   
   Call rtitem.AppendText( "<" + Today() + " / " +session.CommonUserName + ">" )
   Call RTItem.AddNewLine(1)         'Add a blank line to the rich text item, Body
   Call RTItem.AppendStyle(Black)
   Call RTItem.AppendText("Hier kommt Text rein!")   'Append text to Body.  This text will be bold and red, as defined by the style BoldRed
   Call RTItem.AddNewLine(1)                  'Append a carraige return to Body
   
   doc.Save  True, False               'Save the document
   workspace.EditDocument True, Doc         'Reopen the document on the screen
End Sub


Call notesUIDocument.GotoField( fieldName$ )   hatte ich schon drin. Deklariert ist das notesUIDocument als uidoc.  - also:    Call uidoc.GotoField( "Auftrag_Beschreibung" )   

Jedoch lehrten mir die Designerhilfe und das Forum, daß es im Backend angehängt und dann wieder zum Editieren geöfffnet wird, siehe obiger Code. Darum funktioniert das nicht,  Fehlermeldung: "Dokument ist nicht verfügbar", weil es eine Zeile vorher geschlossen wird: "uidoc.Close".


Was nun?  ???
Erwin Maier
IT-Administration Genossenschaftsbank
Notes R9.01
Kenntnisse: Formelsprache, Script

Offline Ottmar

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Geschlecht: Männlich
Re: Cursor an Anfang des RT-Feldes stellen
« Antwort #3 am: 03.07.08 - 15:10:55 »
Also.

1. Nachdem Du das UIDoc geschlossen hat, ist es am Client nicht mehr verfügbar. Das ist soweit ok.

2. Jetzt speicherst Du die Änderung im Backend, das ist auch soweit ok.

3. Nachdem das geschehen ist (Doc.Save) musst Du Dir das Dokument in das Frontend zurückholen:
Set UIDoc = Workspace.EditDocument(true, Doc)
Jetzt kannst Du zum Feld hinspringen mit
Call uidoc.GotoField( "Auftrag_Beschreibung")

In Deinem Beispiel rufst Du das Feld zu einem Zeitpunkt auf, wo das Dokument am Bildschirm gar nicht dargestellt wird. Das geht natürlich nicht....

Gruß
Ottmar

   

Offline emadowo

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Geschlecht: Männlich
  • Danke für dieses Forum!
Re: Cursor an Anfang des RT-Feldes stellen
« Antwort #4 am: 03.07.08 - 15:34:29 »
OK, habe verstanden.

Erlaube mir, nochmal nachzuhaken: mein Scriptcode ursprünglicherseits funktionierte genauso, wie ich es bräuchte: Cursor wird mit  'uidoc.gotField" an den Anfang gesetzt, Datum, Name und eine Trennzeile eingefügt und der Cursor steht dort, wo man losschreiben soll:

Sub Click(Source As Button)
   Dim ws As New NotesUIWorkspace
   Call ws.EditDocument   
   Dim session As New NotesSession
   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim var As String
   
   Set uidoc = workspace.CurrentDocument
   
   Call uidoc.GotoField("Auftrag_Beschreibung" )
   Zeilen = Chr$(010) + Chr$(010) + "---------------------------------------------------------------------------------"+ Chr$(010)
   Call uidoc.InsertText( Zeilen )
   Call uidoc.GotoField("Auftrag_Beschreibung" )
   
   var =   "<" + Today() + " / " +session.CommonUserName + ">"
   Call uidoc.InsertText( var )
   
   Zeile2 = Chr$(010)
   Call uidoc.InsertText( Zeile2 )
End Sub

Nun möchte Chefchen aber haben, daß Datum und Name fett sein soll, der Rest normal-black. Darum habe ich mit RichTextStyle angefangen und bin aber nur mit AppendText weitergekommen, da mit der Verwendung von InsertText zusammen mit RichtTextStyle nur Fehler kamen.

Vielleicht gibts eine Möglichkeit, den Text formatiert mit Insert einzufügen?

Vielen Dank für alles!
Erwin Maier
IT-Administration Genossenschaftsbank
Notes R9.01
Kenntnisse: Formelsprache, Script

Offline Ottmar

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Geschlecht: Männlich
Re: Cursor an Anfang des RT-Feldes stellen
« Antwort #5 am: 03.07.08 - 16:27:31 »
InsertText geht auf das UIDoc und damit auf das Front-End.

Die RichTextItem-Klasse geht auf das Backend.

Bei Formatieraufgaben in RichTextfeldern bin ich bislang immer über das Backend gegangen, Frontend-Befehle kenne ich dafür nicht.

Vieleicht schießt Du aber auch mit Kannonen auf Spatzen. Wie wär's mit Formelsprache
@Command([EditGotoField]; "Auftrag_Beschreibung");
@Command([TextBold]);
@Command([TextSetFontColor]; );
@Command([EditInsertText]; @Text(@Today) + " " + @Name([CN]; @UserName));
@Command([TextSetFontColor]; );
@Command([TextBold]);

Offline Ottmar

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Geschlecht: Männlich
Re: Cursor an Anfang des RT-Feldes stellen
« Antwort #6 am: 03.07.08 - 16:29:45 »
Ups...

also ich meine so:
@Command([EditGotoField]; "Auftrag_Beschreibung");
@Command([TextBold]);
@Command([TextSetFontColor]; );
@Command([EditInsertText]; @Text(@Today) + " " + @Name([CN]; @UserName));
@Command([TextSetFontColor]; );
@Command([TextBold]);

Offline Ottmar

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Geschlecht: Männlich
Re: Cursor an Anfang des RT-Feldes stellen
« Antwort #7 am: 03.07.08 - 16:31:01 »
Also nochmal ganz langsam:

@Command([EditGotoField]; "Auftrag_Beschreibung");
@Command([TextBold]);
@Command([TextSetFontColor]; 'Red' in eckigen klammern);
@Command([EditInsertText]; @Text(@Today) + " " + @Name([CN]; @UserName));
@Command([TextSetFontColor]; 'Black' in eckigen klammern);
@Command([TextBold]);

Offline emadowo

  • Aktives Mitglied
  • ***
  • Beiträge: 105
  • Geschlecht: Männlich
  • Danke für dieses Forum!
Re: Cursor an Anfang des RT-Feldes stellen
« Antwort #8 am: 03.07.08 - 16:43:28 »
Oh mein Gott - ist das peinlich -  die Formelsprache gibts ja auch noch!! In meinem "ich muß das mit Script machen - Wahn" hab ich überhaupt nicht nach Formelmöglichkeiten gekuckt. Es lebe dieses Forum!!!! 

Vielen vielen herzlichen Dank, Ottmar!    :-*

Das ist nun mein Code:
@Command([EditDocument]);
@Command([EditGotoField]; "Auftrag_Beschreibung");
@Command([EditInsertText]; @NewLine+"----------------------------------------------------------------------------------------------");
@Command([EditGotoField]; "Auftrag_Beschreibung");
@Command([TextBold]);
@Command([TextSetFontColor];);
@Command([EditInsertText]; "<"+@Text(@Today) + " /  " + @Name([CN]; @UserName)+">"+@NewLine);
@Command([TextSetFontColor]; );
@Command([TextBold])
Erwin Maier
IT-Administration Genossenschaftsbank
Notes R9.01
Kenntnisse: Formelsprache, Script

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz