Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: awagner am 08.10.08 - 13:18:11

Titel: Text hinter Doc-Link in RT-Feld schreiben
Beitrag von: awagner am 08.10.08 - 13:18:11
Hallo zusammen,

Folgendes Problem:
Ich habe ein Doc mit einem Richtextfeld (heißt Body).
In diesem Feld sind etliche Doc-Links hinterlegt (die auf eine Mail-DB verweisen).

Jetzt möchte ich hinter diesen Links den Betreff der Mail schreiben, auf den der Doc-Link verweist.

Ich bin momentan soweit, dass ich mir die Infos bereits per Messagebox ausgeben lassen kann,
aber ich schaffe es nicht, dass ich hinter diesen aktuellen Doc-Link einen Text schreibe.

Bitte um Hilfe ;-)

Viele Grüße
Andi
Titel: Re: Text hinter Doc-Link in RT-Feld schreiben
Beitrag von: Kadlec am 08.10.08 - 14:10:05
Hast Du dir schonmal die Hilfe angesehen?
Call notesRichTextItem.AppendDocLink( linkTo, comment$ [, HotSpotText$ ] )

Boris
Titel: Re: Text hinter Doc-Link in RT-Feld schreiben
Beitrag von: awagner am 08.10.08 - 14:15:16
Hallo Boris,

ja ich habe mir die Designer-Hilfe bereits intensiv angeschaut  ;)
Aber leider nicht das passendes gefunden.

Es soll auch kein DocLink eingefügt werden, sondern hinter dem DocLink ein Text hinzugefügt werden (in diesem Fall der Betreff der E-Mail), wo auch zur Zeit mein Problem liegt.
Titel: Re: Text hinter Doc-Link in RT-Feld schreiben
Beitrag von: klaussal am 08.10.08 - 14:18:40
Vielleicht wäre ein bisschen Code nicht schlecht, damit man sehen kannst, was du da machst.
Titel: Re: Text hinter Doc-Link in RT-Feld schreiben
Beitrag von: Driri am 08.10.08 - 14:20:09
Du bastelst das RTF dann aber selber zusammen per Script, oder wie darf ich das verstehen ?

Häng doch einfach nach dem AppendDocLink noch mit AppendText das Thema dahinter.


Call rtf.AppendDocLink(maildoc, "Blabla")
Call rtf.AppendText(maildoc.GetItemValue("Subject")(0))
Call rtf.AddNewLine(1)
...
Titel: Re: Text hinter Doc-Link in RT-Feld schreiben
Beitrag von: Axel am 08.10.08 - 14:20:47
Hast du es schon mal mit

Call notesRichTextItem.AppendText( text$ )

probiert?


Axel
Titel: Re: Text hinter Doc-Link in RT-Feld schreiben
Beitrag von: awagner am 08.10.08 - 14:24:00
@Axel: ja hab ich schon probiert, aber er hängt mir das immer am Ende des Feldes dran.

@Diri: nein, die DocLinks hat der User per Drag&Drop reingehängt. Ich möchte jetzt hinter den Link einen Text schreiben, der den DocLink näher beschreibt.

@klauss: Ist eigentlich 1zu1 der code aus der Designer-Hilfe, nur ich möchte halt jetzt das bisschen anpassen
Code
	Dim session As NotesSession
	Dim db As NotesDatabase
	Dim dc As NotesDocumentCollection
	Dim doc As NotesDocument
	Dim rti As NotesRichTextItem
	Dim rtnav As NotesRichTextNavigator
	Dim rtlink As NotesRichTextDocLink
	
	Dim doc_neu As NotesDocument 
	Dim db_neu As NotesDatabase 
	Dim rtRange As NotesRichTextRange
	
	Set session = New NotesSession
	Set db = session.CurrentDatabase
	Set dc = db.UnprocessedDocuments
	Set doc = dc.GetFirstDocument
	Set rti = doc.GetFirstItem("Body")
	Set rtnav = rti.CreateNavigator
	
	'Mail-DB von User
	Set db_neu = New NotesDatabase("Server", "mail.nsf")
	
	If Not rtnav.FindFirstElement(RTELEM_TYPE_DOCLINK) Then
		Messagebox "No doclinks in Body item",, "No doclinks"
		Exit Sub
	End If
	Do
		Set rtlink = rtnav.GetElement
		
		msg$ = "Replica ID = " & rtlink.DbReplicaID
		If  rtlink.ViewUNID <> String$(32, "0") Then
			msg$ = msg$ & Chr(13) & "View UNID = " & rtlink.ViewUNID
		End If
		If  rtlink.DocUNID <> String$(32, "0") Then
			msg$ = msg$ & Chr(13) & "Doc UNID = " & rtlink.DocUNID
		End If
		Messagebox msg$,, rtlink.DisplayComment
		Set doc_neu = db_neu.GetDocumentByUNID(rtlink.DocUnID)
		Messagebox doc_neu.subject( 0 )
		
		'Betreff bei Kommentar einfügen und speichern
		rtlink.DisplayComment = doc_neu.subject( 0 ) 
		Call doc.Save( True, False ) 
	Loop While rtnav.FindNextElement
Titel: Re: Text hinter Doc-Link in RT-Feld schreiben
Beitrag von: Driri am 08.10.08 - 14:29:12
AppendText fügt immer am Ende des RTF ein (siehe Designer-Hilfe). In dem Fall müßtest Du also über den RichTextNavigator und SetPosition die Position zum Einfügen erst festlegen und dann mit AppendText den Text einfügen.
Titel: Re: Text hinter Doc-Link in RT-Feld schreiben
Beitrag von: awagner am 08.10.08 - 14:38:18
Hallo Diri,

das war auch meine Überlegung, nur irgendwie hab ich das mit SetPosition nicht hinbekommen.

Vielleicht kannst du mir hierzu weiterhelfen?

Danke
Titel: Re: Text hinter Doc-Link in RT-Feld schreiben
Beitrag von: Driri am 08.10.08 - 15:55:49
Den NotesRichTextNavogator hast Du ja schon. Du mußt jetzt erstmal prüfen, ob dieser überhaupt DocLinks enthält und dann z.B. in einer Do-Schleife die Texte einfügen. Das könnte etwa so aussehen :

Zitat
If rtnav.FindFirstElement(5) Then
  Do   
    Call body.BeginInsert(rtnav)
    Call body.AppendText("Text")
    Call body.EndInsert
  Loop While rtnav.FindNextElement(5)

...

Titel: Re: Text hinter Doc-Link in RT-Feld schreiben
Beitrag von: awagner am 08.10.08 - 16:09:33
Jetzt kann ich auf jeden Fall schon was schreiben  :) :) :)

nru leider kommt jetzt in der Zeile
"Loop While rtnav.FindNextElement" die Fehlermeldung
"Position is not valid"

 ??? ??? ???
Titel: Re: Text hinter Doc-Link in RT-Feld schreiben
Beitrag von: Driri am 08.10.08 - 16:30:34
Kannst Du bitte noch einmal den Code posten, wie er jetzt ist ?
Titel: Re: Text hinter Doc-Link in RT-Feld schreiben
Beitrag von: awagner am 08.10.08 - 16:32:49
klar...

Code
Sub Initialize
	Dim session As NotesSession
	Dim db As NotesDatabase
	Dim dc As NotesDocumentCollection
	Dim doc As NotesDocument
	Dim rti As NotesRichTextItem
	Dim rtnav As NotesRichTextNavigator
	Dim rtlink As NotesRichTextDocLink
	
	Dim doc_neu As NotesDocument 
	Dim db_neu As NotesDatabase 
	Dim rtRange As NotesRichTextRange
	
	Set session = New NotesSession
	Set db = session.CurrentDatabase
	Set dc = db.UnprocessedDocuments
	Set doc = dc.GetFirstDocument
	Set rti = doc.GetFirstItem("Body")
	Set rtnav = rti.CreateNavigator
	
	'Mail-DB von User
	Set db_neu = New NotesDatabase("Server", "mail.nsf")
	
	If Not rtnav.FindFirstElement(RTELEM_TYPE_DOCLINK) Then
		Messagebox "No doclinks in Body item",, "No doclinks"
		Exit Sub
	End If
	Do
		Set rtlink = rtnav.GetElement
		msg$ = "Replica ID = " & rtlink.DbReplicaID
		If  rtlink.ViewUNID <> String$(32, "0") Then
			msg$ = msg$ & Chr(13) & "View UNID = " & rtlink.ViewUNID
		End If
		If  rtlink.DocUNID <> String$(32, "0") Then
			msg$ = msg$ & Chr(13) & "Doc UNID = " & rtlink.DocUNID
		End If
		'Messagebox msg$,, rtlink.DisplayComment
		Set doc_neu = db_neu.GetDocumentByUNID(rtlink.DocUnID)
		'Messagebox doc_neu.subject( 0 )
		
		Call rti.BeginInsert( rtnav )
		Call rti.AppendText( doc_neu.subject( 0 ) & " => ")
		Call rti.EndInsert
		
		'Betreff bei Kommentar einfügen und speichern
		Call doc.Save( True, False ) 
	Loop While rtnav.FindNextElement
End Sub
Titel: Re: Text hinter Doc-Link in RT-Feld schreiben
Beitrag von: Driri am 08.10.08 - 16:34:44
Da fehlt auch ein Parameter bei FindNextElement im Loop.

Das Save würde ich auch hinter die Schleife stellen, sonst speicherst Du ja in jedem Durchgang das Dokument einmal.
Titel: Re: Text hinter Doc-Link in RT-Feld schreiben
Beitrag von: awagner am 08.10.08 - 16:37:48
und welche wären das?
habs jetzt mit Loop While rtnav.FindNextElement(5, 1)
und es kommt die gleiche Fehlermeldung
Titel: Re: Text hinter Doc-Link in RT-Feld schreiben
Beitrag von: awagner am 08.10.08 - 16:41:55
DANKE!!!!

Es funktioniert.

Das Problem war das SAVE in der Schleife.

 :)
Titel: Re: Text hinter Doc-Link in RT-Feld schreiben
Beitrag von: Driri am 08.10.08 - 16:43:59
Ah, okay. Vermutlich wird durch das Save dann der Navigator zerschossen.
Titel: Re: Text hinter Doc-Link in RT-Feld schreiben
Beitrag von: awagner am 08.10.08 - 16:45:08
jup, kann durchaus möglich sein.

Aber nochmals besten Dank Ingo ;)