Domino 9 und frühere Versionen > ND6: Entwicklung

Tipp zur Umsetzung eines Links zum Kontakt

<< < (4/7) > >>

Axel:
Hi,

so auf den ersten Blick sieht der Code richtig aus.

Auf jeden Fall solltest du noch eine Fehlerbehandlung einbauen. Zumindest nach der Suche in der Ansicht.

...
Set view = db.GetView("Person" )
Set ldoc = view.GetDocumentByKey(key)
If ldoc Is Nothing Then
  'Dokument nicht gefunden
  'Tu was
Else
  'Dokument gefunden
  'Der Link kann eingefügt werden.
End If
...

Hast du mal mit dem Debugger geprüft, ob ldoc wirklich gefüllt ist? Du kannst dir auch mal zum Test ein Feld aus ldoc anzeigen lassen. Füge nach dem GetDocumentByKey mal sowas ein wie
 
  Messagebox ldoc.NameEinesFeldesDasInDemDokumentVorhandenIst(0)


Anmerkung: Hat das einen Grund den Code in das Exiting-Event zu packen? Du solltest bedenken, dass dieses Event nicht immer ausgeführt wird.


Axel

dabjoern:
Hi Axel,
ich hab das alles schon im Debugger geprüft. ldoc und doc sind unterschiedliche Dokumente (z.B. weichen die created Zeiten ab). Also ldoc ist wirklich gefüllt. Hatte auch eine solche Ausgabe vorgenommen (ldoc.FirstName). Ging auch und hat gestimmt. Deswegen bin ich auch so verwirrt.
Das mit Exiting habe ich auch bemerkt, dass das nicht immer erfüllt ist. Bin noch beim Überlegen, wo ich das Einfügen kann. Was ist ein angemesseneres Event? Ich will es aber nicht in irgendwelche Events des Forms legen, da ich einige solcher Funktionen und Felder haben werde (4 an der Zahl). Für alle diese 4 Felder muss ich dieses Skript ausführen.
Heute abend werde ich mich mal auf weitere Fehlersuche begeben, jetzt ruft die Natur:-)
Gruß und vielen Dank
Björn

Axel:
Hi,

wenn du es nicht in ein Form-Event packen willst, dann leg de nCode doch in einen Button oder einem Hotspot in der Nähe des entsprechenden Feldes.


Axel

dabjoern:
Hi auch,
hab das Ganze jetzt in das Postrecalc Event gepackt. Mein 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

Set db = session.CurrentDatabase
Set uidoc = ws.CurrentDocument

Call uidoc.Save
Set doc = uidoc.Document

For i = 1 To 4
key = doc.GetItemValue(("SO_Name_" + Cstr(i)))
Set rtitem = New NotesRichTextItem(doc,("SO_Link_" + Cstr(i)))
Set view = db.GetView("Person" )
Set ldoc = view.GetDocumentByKey(key(0))

If ldoc Is Nothing Then
Exit Sub
Else
Call doc.ReplaceItemValue(("SO_Link_" + Cstr(i)),"")
Call rtitem.AppendDocLink(ldoc, "Link")
Call ReOpen(doc)
End If
Next i
End Sub
--- Ende Code ---

Mit der Zeile

--- Code: ---Call doc.ReplaceItemValue(("SO_Link_" + Cstr(i)),"")
--- Ende Code ---
bin ich mir unsicher. Mal geht der Code, mal nicht. Ziel ist es, das Rich Text Feld zunächst zu leeren, bevor der Link gesetzt wird. Falls man einen bestehenden Namen im Feld SO_Name_3 bspw. leert, möchte ich, dass der Link in SO_Link_3 gelöscht wird und kein Link mehr dasteht. Ist der Code so in Ordnung? Was ist euere Meinung.
Danke und viel Spaß noch
Björn

Axel:

--- Zitat von: dabjoern am 28.07.05 - 22:21:45 ---... Mal geht der Code, mal nicht.

--- Ende Zitat ---

Hi,

was heißt das? Gibt's 'ne Fehlermeldung

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.


Axel

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln