Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: geisslix am 02.06.03 - 14:49:44
-
hallo forum,
ich habe folgendes problem:
in einer maske habe ich ein feld (vom Typ Namen) erzeugt, mit dem ich aus einer kontakt-db eine kontaktperson auswählen kann.
in einem weiteren feld soll dann automatisch nach auswahl der person eine dokumentenverknüpfung zu dieser person eingefügt werden.
soweit die theorie, doch jetzt zur praxis.
wie geht das? ???
hat jemand einen tipp, code oder script, wie das gemacht wird?
ich arbeite mit notes 5.0.11 unter w2k
-
Such mal in der Designer Hilfe nach "AppendDocLink"! :)
-
@Centaury,
erst einmal vielen dank für die prompte hilfe.
soweit ich verstanden habe, beschreibt diese methode (AppendDocLink) den weg, aus einer datenbank x eine mail zu verschicken mit den jeweiligen doclink zur datenbank oder dokument in der datenbank x.
diese methode könnte ich natürlich auch dazu verwenden, ein dokument in der datenbank y zu erstellen, der diesen automatischen doclink in ein bestimmtes feld des types rich text einträgt (als aktion oder agent).
meine frage betrifft aber den umgekehrten weg. ;)
ich bin in der datenbank y, suche über ein dialogfenster (die suche in einem adressbuch) einen namen (kontaktdokument), wähle diesen (durch doppelklick oder durch ok-button) und möchte in einem weiteren feld (vom typ rich text) den doclink automatisch generiert bekommen.
kann ich die oben beschriebene methode auch als eingabeumsetzung nach auswahl oder als aktion bei onSelect (für das feld des typs namen) verwenden?
oder muss ich einen ganz anderen weg beschreiten (per @DialogBox, @PickList, o.ä.)?
mir fehlt da leider der programmiertechnische background.
vielen dank für weitere unterstützung
mfg
geisslix
-
Call notesRichTextItem.AppendDocLink( linkTo, comment$ [, HotSpotText$ ] )
erzeugt in einem RichText Feld einen Doclink zu dem Dokument, Datenbank oder View "linkTo". Du willst ein Dokument suchen und als Doclink (in ein RichTextFeld) anhängen.
Also suchst du dir das Dokument und übergibst es an die Methode...
Oder willst du wissen, wie du an das Dokument herankommst, das du einfügen willst?
-
... wenn du das nicht über ein Namen-Auswahlsfeld machst, sondern über eine Picklist im Backend, dann hast du das doc im Zugriff und kannst zusätzlich einen DocLink platzieren...
ata
-
@ata, @Centaury,
habe aus euren antworten geschlossen, dass der weg über ein Namen-Auswahlfeld wohl der falsche ist. soweit ersteinmal danke.
habe jetzt
@PickList( [Custom] : [Single] ; Server : Datei ; Ansicht ; Titel ; Eingabeaufforderung ; Spalte ; Kategorie )
auf eine schaltfläche gelegt, auf eine ansicht in der adressdatenbak verwiesen, lese dort spaltenwerte aus und lasse diese werte in meiner maske in berechnete felder eintragen.
in dieser ansicht habe ich auch einen spaltenwert, der mit @Text(@DocumentUniqueID) die dokumenten-ID anzeigt, die ich verwenden wollte, um einen DocLink in meiner maske zu erzeugen.
das hat natürlich nicht geklappt.
die dokumenten-ID wird zwar sauber übernommen (jedoch nur, wenn das berechnete feld vom typ text ist, als rich text aktualisiert er das feld nicht, wenn ich einen anderen namen auswähle, es bleibt der bei der ersten auswahl gesetzte eintrag stehen).
weiter weiss ich nicht, wie ich jetzt aus der Dokumenten-ID den DocLink basteln muss, der bei mausklick auf das dokument in der adressdatenbank linkt.
ich bin für weitere anregungen dankbar.
cu
-
rich-text-felder müsser erst gespeichert werden (also das doc). sonst ist da nix drinne...
-
... ich hätte es mit LotusScript gelöst. Wie fit bist du mit LS?
ata
-
@ ata,
ich würde mich eher als engagierten anwender bezeichnen denn als fitten programmierer. :-[
ich glaube jedoch, ls lesen, einigermaßen verstehen und anpassen zu können.
deshalb bin ich auch brennend an einen programmatischen ansatz interessiert, der mein oben beschriebenes problem lösen könnte.
wenn du einen ansatz hättest, der in ls vorhanden ist und für mein problem von mir angepasst werden müsste, wäre ich mehr als zufrieden.
geisslix
-
Hi,
ich hab' mal so was ähnliches realisiert. Ich habe eine Adressdatenbank und eine dazugehörige Vorgangsdatenbank, in der zu den einzelnen Adresse Vorgänge, wie Korrespondenz, Mails etc. gespeichert werden. Aus den Vorgangsdokumenten lassen sich Aufgaben in der jeweiligen Maildatenbnak des Users erzeugen. In den Aufgaben werden zwei DocLinks eingefügt, einmal der zum Vorgangsdokument und zum anderen ein Link zu Adress-Dokument.
Hier ist der Code des Agenten. Er wird über eine Aktion aus dem jeweiligen Dokument ausgeführt.
Sub Initialize
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim maildb As NotesDatabase
Dim adressdb As NotesDatabase
Dim currentdb As NotesDatabase
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim adrdoc As NotesDocument
Dim taskdoc As NotesDocument
Dim taskuidoc As NotesUIDocument
Dim rtitem As NotesRichTextItem
Dim strTemp As String
Dim vDbName As Variant
Dim iAdressDbError As Integer
iAdressDbError = 0
Set currentdb = session.CurrentDatabase
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
'Prüfen ob Mail-DB vorhanden
Set maildb = New NotesDatabase("","")
Call maildb.OpenMail
If Not maildb.IsOpen Then
Messagebox "Mail-Datenbank kann nicht geöffnet werden." + Chr$(10) + "Es wird keine Aufgabe erstellt.", 16, "Adressen"
Exit Sub
End If 'If Not maildb.IsOpen Then
If ConfigLookup("xAdressDB", vDbName) And vDbName(0) = "" Then
iAdressDbError = 1
Else
Set adressdb = New NotesDatabase(currentdb.Server, vDbName(0))
If Not adressdb.IsOpen Then
iAdressDbError = 1
End If 'If Not adressdb.IsOpen Then
End If 'If ConfigLookup("xAdressDB", vDbName) Then
Set adrdoc = adressdb.GetDocumentByUNID(doc.xAdressID(0))
If adrdoc Is Nothing Then
iAdressDbError = 1
End If 'If adrdoc Is Nothing Then
'Neue Aufgabe erstellen
Set taskdoc = New NotesDocument(maildb)
taskdoc.Form = "Task"
Call taskdoc.ComputeWithForm(True, True)
If doc.Kontaktperson(0) = "" Then
strTemp = doc.Firma(0)
Else
strTemp = doc.Kontaktperson(0) + " - " + doc.Firma(0)
End If 'If doc.Kontaktperson(0) = "" Then
taskdoc.Subject = "Aufgabe zu einem Vorgang zu " + strTemp
'Anlegen und füllen des Richtextfeldes
Set rtitem = taskdoc.CreateRichTextItem("Body" )
Call rtitem.AppendText(doc.Aktionen(0))
Call rtitem.AddNewLine(2)
Call rtitem.AppendText("Vorgang -> ")
Call rtitem.AppendDocLink(doc, "")
If Not iAdressDbError Then
Call rtitem.AddNewLine(2)
Call rtitem.AppendText("Adresse -> ")
Call rtitem.AppendDocLink(adrdoc, "")
End If 'If Not iAdressDbError Then
Call taskdoc.Save(True,False) 'Temp. Speichern des Backend-Doc. damit RTF-Feld angezeigt wird.
Set taskuidoc = workspace.EditDocument(True, taskdoc) 'Dokument im Frontend öffnen
Call taskdoc.Remove(True) 'Das Dokument, das im Backend erstellt wurde, löschen
End Sub
-
Hi,
Ich hab das auch über LS gelöst,
bei mir wählt man im Feld "Ort" per Picklist einen Ort aus,
das Querysave-skript sucht in der Ansicht "Tagungsorte" nach dem Dokument mit dem gleichen Titel und generiert im versteckten Feld "OrtsLinkText" einen Link, den ich dann von einem weiteren Feld aus aufrufen kann.
Der Link funktioniert nach dem speichern des Dokumentes.
Das ganze ist besonders praktisch bei Dialoglisten oder Auswahllisten :)
skript:
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim session As New notessession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Dim backendDoc As NotesDocument
Set backendDoc = Source.Document 'get the backend doc
Dim newProjectDoc As NotesDocument
Dim view As NotesView
Dim strOrt As String
Dim server As String, serverNName As NotesName
Dim dbpath As String
server = db.Server
Set serverNName = New NotesName(server)
dbpath = db.FilePath
strOrt = Source.FieldGetText("Ort")
If strOrt <> "" Then
Set view = db.GetView( "Tagungsorte" ) ' Zielview sortiert nach Suchfeld
Set newProjectDoc = view.GetDocumentByKey( strOrt, True ) 'Zieldokument
If Not(newProjectDoc Is Nothing) Then
backendDoc.OrtsLinkText = "notes://" & serverNName.Common & "/" & dbpath & "/" & view.Name & "/" & newProjectDoc.UniversalId & "?OpenDocument"
Call backendDoc.Save( True, False )
Call Source.Refresh
Else
Msgbox "Achtung, Fehler! verlinktes Dokument nicht gefunden"
End If
End If
Gruß, feel_x