Kombinationsfeld per Script füllen

  • Ich habe eine Maske mit 4 Kombinationsfeldern. Diese Felder werden auf unterschiedliche Art gefüllt.


    Problem: Ich möchte das Kombifeld nicht per Formel füllen, da die Werte aus einer DB 2 kommen und ich
    nicht Temp-Dokumente anlegen möchte, die ich dann in einem View virtuell anzeige um sie dann von der
    Formel in das Kombifeld zu übertragen.
    Das Ergebnis der Maske wird auch nicht als Dokument abgelegt, sonder in DB 2 Tabellen gespeichert.



    1. ) Formel - funktioniert


    @DbColumn("";"";"RECRM_TYRE_003_TRA";2)


    Ergebnis: 19 Einträge kein DefaultEintrag


    Felder 2,3 und 4 werden über lotusscript ( OnLoad ) versorgt.


    Feld 2
    ( Name = TRA_CODE )
    wird mit document.replaceitemvalue("tra_code",arr)
    der Array direkt in das Kombinationsfeld geschrieben.


    Ergebnis: 1 Eintrag DefaultEintrag ist dieser 1 Eintrag


    Feld 3
    ( Name = TRA_SCRIPT, dark-Feld = T_SCRIPT )


    wird mit source.document.replaceitemvalue("t_script",arr)
    der Array in das Darkfeld geschrieben und das Kombifeld sollte eigentlich über den Eintrag T_script in der Auswahlformel
    die Werte übernehmen.


    Ergebnis: kein Eintrag


    Feld 4
    ( Name = TRA_code2, dark-Feld = T_SCRIPT2 )


    wird mit source.document.replaceitemvalue("t_script2",s_f)
    der String in das Darkfeld geschrieben und das Kombifeld sollte eigentlich über den Eintrag T_script2 in der Auswahlformel
    die Werte übernehmen.


    Der Inhalt von Feld 2 sieht folgendermaßen aus:
    "|Wert1|Wert2|Wert3"


    Ergebnis: kein Eintrag



    Jetzt noch der Source-Code von OnLoad:


    Sub Onload(Source As Notesuidocument)
    If source.EditMode = True Then
    Dim s As New NotesSession
    Dim db As Notesdatabase
    Dim view As NotesView
    Dim Doc As NotesUIDocument
    Dim KeyDoc As NotesDocument
    Dim Feld As NotesItem
    Dim arr() As String
    Dim z As Integer
    Dim s_f As String

    Set db = s.CurrentDatabase
    Set view = db.GetView("RECRM_TYRE_003_TRA")

    Set keydoc = view.GetFirstDocument
    'Set doc = source.document
    '
    'Feld2
    'direkt in das Kombinationsfeld
    ' Ergebins: 1 Eintrag DefaultEintrag ja
    '
    Set feld = New notesitem(source.document,"tra_script"," ")

    Redim arr(view.AllEntries.count) As String
    For i = 1 To view.AllEntries.Count
    z = i - 1
    arr(z)= Keydoc.ColumnValues(1)
    Set keydoc = view.GetNextDocument(keydoc)
    Next i

    Set feld = source.document.replaceitemvalue("tra_script",arr)

    'Feld3
    ' Über verstecktes feld
    ' Ergebnis kein Eintrag
    ' im versteckten Feld sind alle Einträge vorhanden
    '
    Set keydoc = view.GetFirstDocument
    'Set doc = source.document

    Set feld = New notesitem(source.document,"t_script"," ")

    Redim arr(view.AllEntries.count) As String
    For i = 1 To view.AllEntries.Count
    z = i - 1
    arr(z)= Keydoc.ColumnValues(1)
    Set keydoc = view.GetNextDocument(keydoc)
    Next i

    Set feld = source.document.replaceitemvalue("t_script",arr)


    'Feld4
    '
    ' Über verstecktes Feld 2. Versuch
    ' Ergebnis kein Eintrag im Kombinationsfeld
    ' im versteckten Feld sind alle Einträge vorhanden
    '
    S_F = "|"
    Set keydoc = view.GetFirstDocument
    Set view = db.GetView("RECRM_TYRE_003_TRA")
    For i = 1 To view.AllEntries.Count
    z = i - 1
    s_f = s_f & "||" & Keydoc.ColumnValues(1)
    Set keydoc = view.GetNextDocument(keydoc)
    Next i

    Set feld = New notesitem(source.document,"t_script2"," ")
    Set feld = source.document.replaceitemvalue("t_script2",s_f)


    ' ListeGefüllt = True
    End If
    End Sub

    • Offizieller Beitrag

    Dein Problem dürfte daran liegen:

    Zitat

    Der Inhalt von Feld 2 sieht folgendermaßen aus:
    "|Wert1|Wert2|Wert3"


    Ergebnis: kein Eintrag


    Der | ist der Trenner zwischen angezeigtem Wert und dem Alias.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Das waren ja alles nur Versuche und da es das 4. Feld war, ein letzter verzweifelter Versuch.
    Beim Feld 3 stehen die Werte im Darkfeld sauber mit , getrennt im Feld drin.


    Und beim Feld 2 habe ich als Ergebnis ja sogar einen Eintrag im Kombifeld stehen


    Gruß Paul

    • Offizieller Beitrag

    mit
    Set feld = source.document.replaceitemvalue(...)
    befüllst Du das Dokument im BackEnd, davon hat Dein FrontEnd-Dokument (Source) keine Ahnung.


    Schalte mal den Debugger ein und prüfe das BackEnd-Dokument, dort stehen die Werte drin.


    Bei neuen Dokumenten, kannst Du das Dokument auch im Backend erstellen und dann per NotesUIWorkSpace.EditDocument als FrontEnd-Dokument hochholen.


    Gruß
    Dirk

  • Das hört sich gut an ( NotesUIWorkSpace.EditDocument ).
    Kannst du mir einen Tip geben wie das funktioniert, ich bin noch ziemlich am Anfang.


    Mit dieser Variante würde ich dies gerne machen:



    Sub Onload(Source As Notesuidocument)
    If source.EditMode = True Then
    Dim s As New NotesSession
    Dim db As Notesdatabase
    Dim view As NotesView
    Dim Doc As NotesUIDocument
    Dim KeyDoc As NotesDocument
    Dim Feld As NotesItem
    Dim arr() As String
    Dim z As Integer
    Dim s_f As String


    Set db = s.CurrentDatabase
    Set view = db.GetView("RECRM_TYRE_003_TRA")


    Set keydoc = view.GetFirstDocument



    'Feld2
    'direkt in das Kombinationsfeld
    ' Ergebins: 1 Eintrag DefaultEintrag ja
    '
    Set feld = New notesitem(source.document,"tra_script"," ")


    Redim arr(view.AllEntries.count) As String
    For i = 1 To view.AllEntries.Count
    z = i - 1
    arr(z)= Keydoc.ColumnValues(1)
    Set keydoc = view.GetNextDocument(keydoc)
    Next i


    Set feld = source.document.replaceitemvalue("tra_script",arr)



    Dim workspace As New NotesUIWorkspace


    und wie geht es jetzt bitte weiter........



    Danke


    Gruß Paul


    End sub

    • Offizieller Beitrag

    nix onLoad.


    mach einen Agenten, der das Dokument erstellt und nimm die Maske aus dem Menü Erstellen raus.


    Gruß
    Dirk

  • Tut mir leid dass ich nerve, aber mehr als Wert wird nicht angezeigt.


    Das Dokument wird über einen Button aus einem anderen Dokument gestartet. Die onClick-Methode enthält folgende Source:


    ( Ich hätte dir gerne einen Screenshot vom Debugger dazugehängt, funktioniert irgendwie nicht. Aber die Values des Kpmbifeldes sind mit 168 Einträgen gefüllt, kurz vor Call ws.EditDocument(True, doc) )


    Sub Click(Source As Button)

    Dim s As New NotesSession
    Dim ws As New NotesuiWorkSpace
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim view As NotesView
    Dim Feld As NotesItem
    Dim arr() As String
    Dim z As Integer

    Set db = s.CurrentDatabase
    Set doc = New NotesDocument(db)
    doc.Form = "RECRM_TYRE_003"

    Set view = db.GetView("RECRM_TYRE_003_TRA")
    Set keydoc = view.GetFirstDocument

    Set feld = New notesitem(doc,"tra_back"," ")

    Redim arr(view.AllEntries.count) As String
    For i = 1 To view.AllEntries.Count
    z = i - 1
    arr(z)= Keydoc.ColumnValues(1)
    Set keydoc = view.GetNextDocument(keydoc)
    Next i

    Set feld = doc.replaceitemvalue("tra_back",arr)
    '
    '
    Call doc.Save(True, True, True)
    Call ws.EditDocument(True, doc)
    Call doc.RemovePermanently(True)

    End Sub



    Gruß Paul

    • Offizieller Beitrag

    und die Werte stehen auch bei den Schlüsselwörtern im Kombinationsfeld?


    Verwendest Du Aliase?, wenn ja was trägst Du in die Felder ein den sichtbaren Wert oder den Alias?


    Gruß
    Dirk

  • nein ich verwende keine Aliase.
    Ich habe festgestellt wenn ich in das Kombifeld Werte eintrage
    z.B.


    Test1
    Test2



    so bekomme ich als Ergebnis:


    Test1
    Test2
    E1 <- Rillenprofil


    Im Debugging sehe ich das im Gegensatz zum Debugging vor save, dass die Werte nicht mehr in den einzelnen Array-Elementen stehen, sondern alle im value[0] und zwar in folgendem Format 'E1 <-> Rillenprofil||E2 <-> Querprofil||E3 <->.....'
    E ist nichts von den Werten Test1 und Test2 zu sehen.


    Auch das Kombifeld dass ich über eine Formel versorge, sieht man in den values keinen Eintrag.



    Gruß Paul

    • Offizieller Beitrag

    dann übergibst Du kein Array sondern alle Werte als einen String.


    Wie baust Du die Werte für die Felder zusammen?


    Gruß
    Dirk

  • Der Array wird folgendermaßßen gebildet:


    Set view = db.GetView("RECRM_TYRE_003_TRA")
    Set keydoc = view.GetFirstDocument

    Set feld = New notesitem(doc,"tra_back"," ")

    Redim arr(view.AllEntries.count) As String
    For i = 1 To view.AllEntries.Count
    z = i - 1
    arr(z)= Keydoc.ColumnValues(1)
    Set keydoc = view.GetNextDocument(keydoc)
    Next i



    Im Array arr steht jetzt folgender Inhalt:


    [0] "E1 <-> Rillenprofil"
    [1] "E2 <-> Querprofil"
    [3] "E3 <-> ....
    .
    .
    [133] "C1 <-> Glattes Profil"



    Dieser Array wird mit


    Set Feld = doc.replaceitemvalue("tra_back",doc)
    in die ValueListe des Kombifeldes "tra_back" übertragen


    anschließend wird das document mit
    call doc.save ( true, true, true ) gesichert
    und mit
    call ws.document(true, doc) aufgerufen
    sowie mit
    call.docRemoveprmanently(doc) wieder gelöscht



    Gruß Paul

    • Offizieller Beitrag
    Zitat

    Set Feld = doc.replaceitemvalue("tra_back",doc)


    wieso das Dokument übergeben?
    Ich würde einfach das Array arr an das Feld übergeben.
    doc.tra_back = arr


    Gruß
    Dirk

  • Hallo Dirk,
    irgendetwas läuft da komplett schief.
    1. Warum sehe ich beim debuggen die im Designer eingegebene Auswahl (Auswahl eingeben ( eine pro Zeile ) nicht und im Dokument werden sie angezeigt.


    2. Wie spreche ich die Schüsselfelder eines Kombinatioonsfeldes an ( die values sind es ja ganz offentsichtlich nicht ).




    Gruß Paul

  • Es funktioniert jetzt mittlerweile, wenn ich ein darkfeld, bei dem Mehrfachwerte zugelassen sind, in dem Dokument habe und dieses Feld in der Auswahl des Kombifeldes als Formel hinterlege.
    Dieses darkfeld befülle ich dann aus dem button des vorhergehenden Documents.


    Das ist mir aber alles zu viel Action, mir wäre es viel lieber wenn ich die Werteliste des Kombifeldes direkt füllen könnte.



    Gruß Paul

  • Die Wertelist kannst du nicht direkt über Script füllen, sondern nur über den Umweg über ein verstecktes Feld.


    Ich verstehe trotzdem nicht, wieso du das ganze nicht direkt per DBLookup aus der anderen DB holst. Dann brauchst du diese ganzen Umwege nicht

  • Ich hole die Daten nicht aus einer anderen Lotus-Notes Datenbank, sondern aus einer Notes-unabhängigen DB2.
    Das direkte befüllen der Werteliste wäre mir halt unheimlich wichtig gewesen, weil ich 5 -7 Wertelisten haben die in abhängigkeit zu einander stehen.


    Beispiel:


    - zuerst wird der Reifenhersteller gewählt,
    - danach können alle Profile des Herstellers gewählt werden,
    - dann alle Reifengrößen die es in diesem Profil von diesem Hersteller gibt
    - vom Hersteller zugelassene Messfelgen




    Gruß Paul

    • Offizieller Beitrag

    Der Zugriff sollte da sein, denn sonst würde auch das Befüllen über den Agent nicht funktionieren.


    Die über einen DBLookup in der Maske zu machen halte ich da auch für die bessere Variante.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein