Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: FC am 01.08.05 - 13:32:07
-
Hallo Zusammen,
ich würde gerne in einem Auswahlfeld einer Maske a) alle Felder einer anderen Maske b) zur Auswahl anzeigen lassen.
Nach Möglichkeit in Formelsprache.
Mit @DocFields kann ich ja alle Felder der aktuellen Maske anzeigen, aber wie geht das mit Feldern einer anderen Maske ???
Oder besser scripten ?
Danke
Djahan
-
Nur mit Script.
-
Dies hatte ich mir fast gedacht, schade auch.
Dann werde ich mal Dimmen 8)
Danke Thomas.
-
Hmm komme trotzdem nicht weiter.
Ich habe jetzt die möglichen Felder der Maske b) in einem String.
Aber wie bekomme ich die einzelnen Werte aus dem String als Vorgabewerte in das Auswahlfeld?
Da komme ich ja nur mit Formelsprache ran ???
-
Deine Ergebnisse schreibst Du in ein Item, das als Feld nicht mal in der Maske erscheinen muss. Dein Auswahlfeld bezieht sich dann eben auf dieses Feld ("Formel für Auswahl verwenden").
HTH,
Bernhard
-
Danke Bernhard,
nimms mir nicht über, aber kannst Du mir evtl noch verraten, mit welchem Formelbefehl ich dann das Item anspreche :-:
-
Das ist ganz einfach der Feldname ...
-
Hmm, hatte ich fast befürchtet :-[
Also ich habe folgendes Script, was mir mein Item füllt:
Sub Onload(Source As Notesuidocument)
Dim session As New NotesSession
Dim maske As Variant
Dim msgString (40) As String
Dim i As Integer
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim txt_Item As NotesItem
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
Set db = session.CurrentDatabase
maske = "gefahrstoff"
Forall form In db.Forms
If Lcase(form.Name) = maske Then
If Isempty(form.Fields) Then
Messagebox form.Name & " hat keine Felder"
Else
i = 0
msgString (i) = " "
Forall field In form.Fields
msgString (i)= field
i = i + 1
End Forall
End If
Set txt_Item = New NotesItem (doc, "Felder",msgString)
Exit Sub
End If
End Forall
End Sub
In der Auswahlbox beziehe ich mich dann als Vorgabewert auf : txt_Item oder Felder ???
Bekomme immer nur: "Fehler - Schlüsselwörter müssen aus Text bestehen"
-
Du musst dich auf "Felder" beziehen. Schließlich ist das der Name des Feldes das du intern erzeugt hast.
Aber wenn ich mir deinen Code so anschaue, dann hast du Das Feld zwar erzeugt, aber das UIDOC hat keine Ahnung das es das Feld gibt. Deswegen der Fehler.
-
Abgesehen davon: Warum dimensionierst Du das StringArray starr und nicht dynamisch ? Und warum so kompliziert ?
Mit NotesDatabase.GetForm holst Du Dir die Gefahrstoff-Maske. Mit Form.Fields holst Du Dir auf einen Schlag alle dortigen Feldnamen in ein Variant - und Du bist schon fertig.
Bernhard
-
Bernhard, warum einfach wenn es kompliziert auch geht?
-
Stimmt auch wieder, Thomas ;D
Aber dann hätte ich die Designelemente erstmal alle via API ausgelesen und dann nach dem Typ geschaut und dann nach der Herkunftsmaske ...
Bernhard
-
Abgesehen davon: Warum dimensionierst Du das StringArray starr und nicht dynamisch ? Und warum so kompliziert ?
Mit NotesDatabase.GetForm holst Du Dir die Gefahrstoff-Maske. Mit Form.Fields holst Du Dir auf einen Schlag alle dortigen Feldnamen in ein Variant - und Du bist schon fertig.
Sorry, bin noch am lernen :-[
Hatte ursprünglich aus der Hilfe nen Script genommen und an dem rumgeschraubt ........
... das kommt davon, ja ja ..... :-[
So habe mir die Sache durch den Kopft gehen lassen, dabei ist das rausgekommen:
Sub Onload(Source As Notesuidocument)
Dim db As NotesDatabase
Dim felder As Variant
Set session = New NotesSession
Set uidoc = Source.Document
Set Db=Session.CurrentDatabase 'die aktuelle Datenbank
Set doc = db.GetForm("gefahrstoff") 'holen der Maske, mit den Feldern
Forall field In doc.Fields
felder = felder + field & Chr(10)
End Forall
Set item = uidoc.ReplaceItemValue( "hilfsfeld", felder )
End Sub
Ich beziehe mich jetzt in meinem Auswahlfeld auf "hilfsfeld", das klappt jetzt auch.
Ich habe hier nur noch das Problem, das ich nicht genau weis, wie ich den String so zusammenbaue,
dass dieser einzelne Werte im Auswahlfeld anzeigt, so wie oben wird nur das letzte Feld angezeigt ???
Gruß
Djahan
-
Jetzt weis ich worauf du raus willst und welchen Fehler du machst. Du musst ja deinem Auswahlfeld einen Auswahlwert zuweisen. Du willst diesen Wert aber im Onload Event anpassen(erzeugen) lassen. Dazu musst du hergehen und über ein zweites internes Feld erst einmal alle Werte die du brauchst sammeln und dann im Auswahlfeld eine Formel hinterlegen und die Listbox zu füllen. Tust du das nicht dann hast du einfach nur einen Textstring den das System anzeigt.
Sub Onload(Source As Notesuidocument)
Dim db As NotesDatabase
Dim felder As Variant
Dim form As notesform
Set session = New NotesSession
Set uidoc = Source.Document
Set Db=Session.CurrentDatabase 'die aktuelle Datenbank
Set form = db.GetForm("frmDeadlineCalculation") 'holen der Maske, mit den Feldern
' Das hier gibt dir die Werte in ein Hilfsfeld zurück aus dem du dann wiederum deine Auswahl per formel mit @explode(IntHilfsfeld,"~~") füllst, wobei intHilfsfeld nur CFD sein muss, also nicht mit gespeichert wird.
Set item = uidoc.ReplaceItemValue( "IntHilfsfeld", join(form.fields,"~~"))
' Das hier liefert dir das direkt zurück. Der Haken daran ist, das alle Werte ausgewählt sind und das im Feld bei der Auswahl mindestens ein "" eingetragen sein muss
Set item = uidoc.replaceitemvalue("KeyHilfsfeld_1",form.Fields)
' und das hier ist das was du warscheinlich die ganze Zeit geliefert bekommst.
Set item = uidoc.replaceitemvalue("KeyHilfsfeld_2",form.Fields)
End Sub
Hier ist eine Datenbank mit einer Testmaske wo du das Ergebnis der
unterschiedlichen Verfahrensweisen siehst.
-
Jetzt weis ich worauf du raus willst und welchen Fehler du machst.
Upps, hatte ich mich so mißverständlich ausgedrückt ? Werde mich bemühen in Zukunft deutlicher zu posten.
Auf jedem Fall vielen Dank Thomas jetzt funzt es natürlich, danke auch für die TestDB ;D
Vielen Dank auch an Bernhard, du hast mir die richtigen Hinweise gegeben, eine fertige
Lösung hätte mich nicht so richtig (selber denkend) auf den Weg gebracht ::)
Gruß
Djahan