Domino 9 und frühere Versionen > ND8: Entwicklung
Felder aus einem anderen Dokument übernehmen
Peter Klett:
Wie ich es schon geschrieben hatte:
SchönesAuswahlfeld|Wert1~Wert2~UNID
Pipe trennt Auswahlwert von Alias
MarkusL:
Hallo Peter,
da meine ganzen Felder aber dynamisch sind, kann ich keinen festen Wert vergeben, um den "schönen Wert" oder den Alias zu definieren.
Jede Auswahlfeld greift hierarchisch auf ein anderes Auswahlfeld zurück. Und das erste Feld könnte sich auch jederzeit ändern.
Ort (kann jederzeit irgendetwas eingegeben oder verändert werden)<- Ressource (Auswahlformel) <- Raum (hier steht die oben genannte Formel in einem Feld)
Mir fehlt daher der logische Denkansatz, wo ich einen Alias platzieren kann.
pram:
Doch das geht schon so wie Peter sagt. Probier mal folgendes, dies ist zwar nicht dein Ausgangsproblem, aber vielleicht fällt dann der Groschen:
1) in deine Ansicht machst du eine (versteckte) Spalte welche sich auf
--- Code: ---Subject + "|" + @DocumentUniqueID()
--- Ende Code ---
berechnet. Ich gehe mal davon aus, dass im Feld "Subject" ein aussagekräftiger, schöner Name drin steht und eine Zuordnung über die UNID reicht. (UNIDs können sich ändern, wenn ein Dokument kopiert wird und das andere gelöscht wird.). Alternativ kannst du hier auch ein eindeutiges Schlüsselfeld angeben, dann würde ich aber das Ganze in Script umsetzen, da es da performanter ist.
2) in dein Dokument machst du dann ein Feld (Dialogliste) mit Namen "RaumID", in die Auswahlformel schreibst du einen @DBcolumn, der die in 1.) berechnete Spalte zurückliefert oder gibst die Ansicht direkt an (bei ersterem tritt ggf. ein 32K Problem auf)
WICHTIG: ImFeld muss auf "Allow Keyword Synonyms"aktiviert sein.
3.) Dann machst du einen Test: Bei Auswahl eines Raums zeigt das Feld den Inhalt von "Subject" an. Über die Feldeigenschaften siehst du aber, dass die UNID drin steht.
4.) Nun kannst du im ganzen Dokument berechnete Felder mit @GetDocField(RaumID;"Feldname") platzieren und auf beliebige Felder im Raum-Dokument zugreifen und dein Problem sollte gelöst sein. ;D ???
Wenn du wie in 1) schon erwähnt allerdings einen eindeutigen Schlüssel anstatt der UNID verwenden willst, dann müsstest du hierfür jedesmal einen DB-Lookup machen, was sich negativ auf die Performance auswirkt. Da würde ich dann Script verwenden.
eine Minimal-Scriptlösung könnte wie folgt aussehen (Achtung nicht getestet, hab vorsichtshaber aber mal einen Errorhandler eingebaut!)
--- Code: ---Sub Queryrecalc(Source As Notesuidocument, Continue As Variant)
On Error Goto handle
If False Then
handle: Msgbox "Fehler " & Error & " in Zeile " & Erl
Exit Sub
End If
' --------- Errorhandler ende ---------
Dim myDoc As NotesDocument ' aktuelles Dokument
Dim myView As NotesView
Dim db As NotesDatabase
Dim raumDoc As NotesDocument ' das Dokument aus dem die Werte übernommen werden sollten
Set myDoc = Source.Document
Set db = myDoc.ParentDatabase
If myDoc.RaumID(0) = "" Then Exit Sub ' wenn kein Raum gewäht, dann Ende
Set myView = db.GetView("viewRessourcen")
Set raumDoc = myView.GetDocumentByKey( myDoc.RaumID(0), True)
' Alternativ, wenn UNID verwendet wird: Set raumDoc = db.GetDocumentByUNID(myDoc.RaumID(0))
'--------- Das Gröbste ist geschafft, nun müssen nur noch die Felder von raumDoc in myDoc kopiert werden:
myDoc.Raum_Ort = parentDoc.Ort
myDoc.Raum_Raum= parentDoc.Raum
End Sub
--- Ende Code ---
Gruß
Roland
MarkusL:
Hallo Roland,
vielen Dank für die Erklärung. Das war genau das, was ich brauchte. Jetzt funktioniert meine Auswahl so, wie ich es will und das auch noch in schön.
Danke auch an die anderen.
Gruß
Markus
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln