Autor Thema: Tipp zur Umsetzung eines Links zum Kontakt  (Gelesen 8651 mal)

Offline dabjoern

  • Junior Mitglied
  • **
  • Beiträge: 95
  • Geschlecht: Männlich
Re: Tipp zur Umsetzung eines Links zum Kontakt
« Antwort #20 am: 29.07.05 - 10:20:29 »
Hi Axel und natürlich auch die anderen,
das ist eine gute Idee. Aber ich hab jetzt in der Hilfe nochmal nachgelesen und mich mit getFirstItem, GetItemValue und FieldGetText beschäftigt. Ich verstehe, welche Klassen vorausgesetzt werden. Was mich verwundert, ist das folgender Code nicht funktionsfähig ist.

Code
Dim session As New NotesSession
Dim db As NotesDatabase
Dim uidoc As NotesUIDocument
Dim ws As New NotesUIWorkspace
Dim doc As NotesDocument

Set db = session.CurrentDatabase
Set uidoc = ws.CurrentDocument
	
Call uidoc.Save
Set doc = uidoc.Document
Set rtitem = doc.GetFirstItem("SO_Name_1")

Der Fehler ist: Type Mismatch in der letzten Zeile bei set rtitem. Es handelt sich doch bei doc um ein NotesDocument, welches die Methode GetFirstItem unterstützt. Ich finde in NotesUIDocument keine alternative Methode. Also, was machen? Sorry für die vielen Fragen und tausend Dank!

Gruß
Björn

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: Tipp zur Umsetzung eines Links zum Kontakt
« Antwort #21 am: 29.07.05 - 10:48:36 »
Hi,

du musst die Variable rtitem auch deklarieren.

Dim rtitem As NotesRichTextItem


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

Offline dabjoern

  • Junior Mitglied
  • **
  • Beiträge: 95
  • Geschlecht: Männlich
Re: Tipp zur Umsetzung eines Links zum Kontakt
« Antwort #22 am: 29.07.05 - 11:14:21 »
Die habe ich so, wie du vorschlägst, deklariert. Habe den Code nur ausschnittsweise gepostet. Hier nochmal mein Testcode:

Code
Sub Postrecalc(Source As Notesuidocument)	
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim view As NotesView
	Dim uidoc As NotesUIDocument
	Dim ws As New NotesUIWorkspace
	Dim doc As NotesDocument
	Dim ldoc As NotesDocument
	Dim rtitem As NotesRichTextItem
	Dim key As Variant	
	Dim counter As Integer
	
	Set db = session.CurrentDatabase
	Set uidoc = ws.CurrentDocument
	
	Call uidoc.Save
	Set doc = uidoc.Document
	Set rtitem = doc.GetFirstItem("SO_Name_1")
	
	counter = uidoc.FieldGetText("EB_counter")
	
	For i = 1 To counter
		key = uidoc.FieldGetText(("SO_Name_" + Cstr(i)))
		Messagebox(key)
	Next i
End Sub

Gruß
Björn

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: Tipp zur Umsetzung eines Links zum Kontakt
« Antwort #23 am: 29.07.05 - 11:31:57 »
Hi,

ja und..., läuft?


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

Offline dabjoern

  • Junior Mitglied
  • **
  • Beiträge: 95
  • Geschlecht: Männlich
Re: Tipp zur Umsetzung eines Links zum Kontakt
« Antwort #24 am: 29.07.05 - 11:43:32 »
Hi auch,
Sorry, Missverständnis. Ich hatte den Code schon so. Er läuft nicht. Immer wieder Type Mismatch Fehler.
Gruß
Björn

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: Tipp zur Umsetzung eines Links zum Kontakt
« Antwort #25 am: 29.07.05 - 11:54:26 »
Hi,

was für ein Typ ist den das Feld "SO_Name_1" ?


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

Offline dabjoern

  • Junior Mitglied
  • **
  • Beiträge: 95
  • Geschlecht: Männlich
Re: Tipp zur Umsetzung eines Links zum Kontakt
« Antwort #26 am: 29.07.05 - 11:59:32 »
Das Feld ist vomTyp Dialog List / Editable, keine Multiple Values, mit Formel als Choices --> @DbColumn("":"NoCache";"";"Person";1)
Gruß
Björn

Edit: ich sehe gerade meinen Fehler. Danke! Ich habe das falsche Feld angesprochen, ich will ja das Feld SO_Link_(i) und nicht SO_Name_(i) --> das Feld SO_Link_(i) ist natürlich ein RichText Feld. Mist! Danke für deine Geduld. Ich probiere weiter...
« Letzte Änderung: 29.07.05 - 12:03:04 von dabjoern »

Offline dabjoern

  • Junior Mitglied
  • **
  • Beiträge: 95
  • Geschlecht: Männlich
Re: Tipp zur Umsetzung eines Links zum Kontakt
« Antwort #27 am: 29.07.05 - 13:21:19 »
Was mir aufgefallen ist, du legst immer ein neues RTF-Feld an. Vielleicht klemmts darum. Besser ist es, erstmal zu prüfen, ob es das RTF-Feld schon gibt (GetFirstItem aus der NotesDocument-Klasse). Wenn es vorhanden ist kannst du es leeren. Wenn GetFirstItem Nothing zurückliefert, kannst du ein neues anlegen.

Du meinst es klemmt an der Stelle
Code
Set rtitem = New NotesRichTextItem(doc,("SO_Link_" + Cstr(i)))
? Ich verstehe nicht ganz, was das bringt, wenn ich prüfe, ob das item vorhanden ist. Ich habe doch die Felder SO_Link_1 bis SO_Link_5 als Rich Text Felder "manuell" angelegt. So würde doch eine Item Prüfung immer positiv ausfallen. Müsste ich nicht prüfen, ob rtitem schon gesetzt ist? Oder habe ich hier einen Denkfehler?
Gruß
Björn

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Tipp zur Umsetzung eines Links zum Kontakt
« Antwort #28 am: 29.07.05 - 13:24:39 »
Wenn SO_Name_1 ein Textfeld ist, warum weist Du dieses denn dann einem RichtTextItem zu ? Das muss ja schiefgehen.

Bernhard

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Tipp zur Umsetzung eines Links zum Kontakt
« Antwort #29 am: 30.07.05 - 00:29:14 »
Zur Verdeutlichung der Problematik habe ich hier nochmal den eindeutigen Hinweis aus DesignerHelp kopiert:

 4.   This script gets an existing rich text item called ProjectDescription and adds a carriage return and a text value to it. Notice how rtitem is declared a variant, since the GetFirstItem method returns a NotesItem that may or may not be a NotesRichTextItem. Since Type is a property defined in NotesItem, you can use it with a NotesRichTextItem as well. The script tests the variant to see if it is rich text; if so, it uses NotesRichTextItem methods on the variant. For more information, see the GetFirstItem method in NotesDocument.

Dim doc As NotesDocument
Dim rtitem As Variant
'...set value of doc...
Set rtitem = doc.GetFirstItem( "ProjectDescription" )
If rtitem.Type = RICHTEXT Then
  Call rtitem.AddNewLine( 1 )
  Call rtitem.AppendText _
  ( "Book is 64 pages, full color." )
End If
Call doc.Save( False, True )


Was mir aber nach wie vor unklar ist: Warum versuchst Du ein ein Item, das Dir als Nicht-RTI bekannt ist, als RTI zu instantiieren ? Du weisst doch dann schon vorher, dass dies in die Hose gehen muss ...

Bernhard

Offline dabjoern

  • Junior Mitglied
  • **
  • Beiträge: 95
  • Geschlecht: Männlich
Re: Tipp zur Umsetzung eines Links zum Kontakt
« Antwort #30 am: 30.07.05 - 19:23:47 »
@koehlerbv
Also ich hab in meinen letzten Posts die Felder verwechselt. Ich wollte das Feld SO_Link_1 auslesen (Typ Rich Text) und nicht das Feld SO_Name_1 (Typ Dialog List). In meinem Skript habe ich immer versucht, SO_Name_1 anzusprechen. Mein Fehler.
Ich weiß jetzt nicht genau, was du meinst. Sorry.

@All
Mittlerweile habe ich eine Methode gefunden, dass Rich Text Feld zu leeren:
Code
Call uidoc.FieldClear(("SO_Link_" + Cstr(i)))
Der gesamte Code sieht jetzt so aus:
Code
Sub Postrecalc(Source As Notesuidocument)
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim view As NotesView
	Dim uidoc As NotesUIDocument
	Dim ws As New NotesUIWorkspace
	Dim doc As NotesDocument
	Dim ldoc As NotesDocument
	Dim rtitem As NotesRichTextItem
	Dim key As Variant
	Dim counter As Integer
	
	Set db = session.CurrentDatabase
	Set uidoc = ws.CurrentDocument
	
	Call uidoc.Save
	Set doc = uidoc.Document
	
	counter = uidoc.FieldGetText("EB_counter")
	
	For i = 1 To counter
		key = uidoc.FieldGetText(("SO_Name_" + Cstr(i)))
		Set rtitem = New NotesRichTextItem(doc,("SO_Link_" + Cstr(i)))
		Set view = db.GetView("Person" )
		Set ldoc = view.GetDocumentByKey(key)
		If (key <> "") Then
			If ldoc Is Nothing Then
				Messagebox("Could not find document for " & key & ".")
				Exit Sub
			Else
				Call rtitem.AppendDocLink(ldoc, "Link")
				Call ReOpen(doc)
			End If
		Else
			Call uidoc.FieldClear(("SO_Link_" + Cstr(i)))
		End If
	Next i
End Sub

Eigentlich funktioniert jetzt alles so, wie ich es haben wollte. Falls ihr noch was findet, bitte posten :-)

Kurze Frage noch: Gibt es noch ein alternatives Event zu Postrecalc, was für mein Skript zweckdienlich ist?

Gruß und schönes Wochenende. Sorry für meine blöden Fragen...
Beste Grüße
Björn

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz