Autor Thema: Problem: DocLink im RTField anhängen  (Gelesen 1922 mal)

Offline cfiber

  • Frischling
  • *
  • Beiträge: 46
Problem: DocLink im RTField anhängen
« am: 16.12.05 - 09:17:33 »
Hallo zusammen,

wieder mal folgender Ärger mit dem Richtextfield:

-Dokument ist offen
-Button wird gedrückt, damit ein DocLink angehangen wird

Problem: Ich muss ja mit Set rtitem = New NotesRichTextItem(doc,"linkstodocs") dieses erstmal setzen, dadurch wird der Link aber nie angehangen, sondern überschrieben. Wenn ich Set rtitem = doc.GetFirstItem("linkstodocs") benutze meckert der Compiler, dass er rtitem nicht setzen kann.

Ich habe schon versucht, dass alles abzufangen, abzufragen,...aber nix tuts.


Hat da jemand eine Idee?


Danke!!

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Problem: DocLink im RTField anhängen
« Antwort #1 am: 16.12.05 - 09:26:32 »
Zitat
AppendDocLink method 
Inserts a doclink in a rich text item.

Syntax
Call notesRichTextItem.AppendDocLink( linkTo, comment$ [, HotSpotText$ ] )

Code
Dim session As New NotesSession
Dim db As NotesDatabase
Dim newDoc As NotesDocument
Dim rtitem As NotesRichTextItem
Set db = session.CurrentDatabase
Set newDoc = New NotesDocument( db )
Set rtitem = New NotesRichTextItem( newDoc, "Body" )
Call rtitem.AppendDocLink( db, db.Title )
newDoc.Subject = "Here is a link to the database"
newDoc.SendTo = "Lauri Nodwell"
newDoc.Send( False )

So gehts nicht?
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline cfiber

  • Frischling
  • *
  • Beiträge: 46
Re: Problem: DocLink im RTField anhängen
« Antwort #2 am: 16.12.05 - 09:29:53 »
Hier mein Code: (es ist ein bestehendes Dokument, was nicht gesendet wird)

Code
Dim uiws As New NotesUIWorkspace
	Dim session As New NotesSession
	
	Set db = session.CurrentDatabase
	Set uidoc = uiws.CurrentDocument
	Set doc = uidoc.Document
	
	pick =uiws.Pickliststrings(PICKLIST_CUSTOM,  False, db.Server, db.FilePath,"All","Selection","Choose the doc to link:", 7)
	
	If Isempty(pick) Then Exit Sub
	
	unid = Strleft(pick(0), "~")
	docsubject = Strright(pick(0), "~")
	Set temp = db.GetDocumentByUNID(unid)
	
	[b]Set rtitem = New NotesRichTextItem(doc,"linkstodocs")
	Set rtitem = doc.GetFirstItem("linkstodocs")[/b]
	Call rtitem.AddNewline(1)	
	Call rtitem.appendDoclink(temp,docsubject)
	Call rtitem.AppendText(" - " + docsubject)
	Call doc.save(True, False)
	doc.saveoptions = "0"
	Call uidoc.Close
	Set uidoc = uiws.EditDocument(True, doc)
	Set doc = uidoc.Document

Ich habe keine Idee mehr, wie ich es mit dem fettgedruckten Teil handhaben soll....

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Problem: DocLink im RTField anhängen
« Antwort #3 am: 16.12.05 - 09:33:44 »
Hi,

Das kann so auch nicht gehen.

Set rtitem = New NotesRichTextItem(doc,"linkstodocs")
Set rtitem = doc.GetFirstItem("linkstodocs")

Du musst sich für eine Zeile entscheiden. Wenn in dem Dokument bereits ein RTF-FEld enthalten ist, dann nimm die zweite Zeile und lass die erste weg.

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Problem: DocLink im RTField anhängen
« Antwort #4 am: 16.12.05 - 09:35:09 »
GetFirstItem liefert je nach Feldtyp NotesItem oder NotesRitchTextItem zurück. Also reicht ein:
Code
Dim rtitem As NotesRichTextItem
...
%Rem Set rtitem = New NotesRichTextItem(doc,"linkstodocs")
Das braucht man nicht.
%End Rem
Set rtitem = doc.GetFirstItem("linkstodocs")
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline cfiber

  • Frischling
  • *
  • Beiträge: 46
Re: Problem: DocLink im RTField anhängen
« Antwort #5 am: 16.12.05 - 09:37:11 »
Dann kommt aber die Fehlermeldung "Object Variable Not Set"

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Problem: DocLink im RTField anhängen
« Antwort #6 am: 16.12.05 - 09:45:15 »
Auf RTF-Inhalte kann man nur zugreifen, NACHDEM das Dok gespeichert wurde. Kann es sein, dass es sich bei dem Dokument um ein neues handelt, das noch nicht gespeichert wurde? Wenn ja, dann ist die Fehlermeldung normal.

HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Problem: DocLink im RTField anhängen
« Antwort #7 am: 16.12.05 - 09:46:46 »
Ich hab letztens auch festgestellt, dass new RichTextItem ein neues RichTextItem erstellt, egal ob schon eins da ist.
Die Aufgabe des Scripts bestand darin von aussen Attachments von Tif-Dateien aus einem RT-Feld zu löschen.
Ging dann mit RTItem = doc.getFirstItem("itemName").
Wenn du das Dokument im Frontend geöffnet hast, ist es schwieriger.

Versuch mal im PostSave oder im QueryClose Event das DocLink im Backend zu setzen.
Besorg dir das RichTextItem mit doc.getFirstItem(itemName). Du mußt aber nach not nothing und nach item.type checken.
Gegebenenfalls ist es notwendig, dass du dir das gerade geschlossene Dokument über db.getDocumentByUNID holst.
Die UniversalID und die Daten für das Ziel des Doclinks kannst du dir in globalen Masken-Variablen speichern.

Gruß Axel
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline cfiber

  • Frischling
  • *
  • Beiträge: 46
Re: Problem: DocLink im RTField anhängen
« Antwort #8 am: 16.12.05 - 09:53:50 »
@kennwort

Genau das ist das Problem. Man hat nur Ärger mit den Richtextfeldern. Gibt es da keine einfachere Lösung? So brech ich mir wieder einen ab....

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Problem: DocLink im RTField anhängen
« Antwort #9 am: 16.12.05 - 10:14:37 »
Man hat nur Ärger mit den Richtextfeldern. Gibt es da keine einfachere Lösung? So brech ich mir wieder einen ab....

Es gibt keine einfachere Lösung mit RTF-Feldern. Ich habe mir da auch schon sehr oft einen abgebrochen.

Bei einem neuen Dokument kannst du auf ein RTF-Feld mit Script-Methoden nur zugreifen wenn das Dokument einmal gespeichert, geschlossen und wieder geöffnet wurde. Mit den normalen Script-Befehlen uidoc.Reload, uidoc.Refresh usw. kommst du hier nicht weit.

Forumsmitglied ata hat da mal eine kleine Funktion für sowas erstellt.

Code
REM Das aktuelle Dokument schließen und wieder öffnen...... 
    Function ReOpen(docThis As NotesDocument) As Integer 
        Dim ws As New NotesUIWorkspace 
        Dim uidoc As NotesUIDocument 
        Dim dbThis As NotesDatabase 
        Dim unid As String 
 
        ReOpen = 0 
        Set dbThis = docThis.ParentDatabase 
        Call docThis.Save(True , True) 
        unid = docThis.UniversalID 
        docThis.SaveOptions = "0" ' # ... Speicherabfrage vermeiden 
        Set uidoc = ws.CurrentDocument 
        Call uidoc.Close 
        Set docThis = dbThis.GetDocumentByUNID(unid) 
        Set uidoc = ws.EditDocument(True , docThis) 
        Set docThis = uidoc.Document 
        If docThis.HasItem("SaveOptions") Then  
            ' # ... das Feld SaveOptions wieder entfernen... 
            docThis.RemoveItem("SaveOptions") 
            Call docThis.Save( True , True ) 
        End If 
        ReOpen = 1 
        Print "Das Dokument wurde erneut geöffnet" 
    End Function 


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz