Felder einer Ansicht in Maske übernehmen

  • Hallo Leute,


    ich habe eine Maske, die mit Daten aus einer Ansicht gefüllt werden sollen. Ein Teil davon funktioniert auch schon.


    Die Ansicht ist in Hauptdokument und Antwortdokument gegliedert.


    Folgendermaßen sieht das Ganze aus. Aus dem Hauptdokument generiert sich die Antwort. In der Antwortmaske ist ein FeldA, welches aus dem Hauptdokument gezogen wird. Das geht auch prima.
    Nun will ich in einer anderen Maske (beim Anlegen eines neuen DS) das Feld aus dem Hauptdokument (das funktioniert auch) und aus dem Antwortdokument (FeldN) anzeigen lassen. Ich weiß allerdings nicht, wie ich das FeldN aus dem Antwortdokument in die neue Maske bekomme.


    So wie ich mir das denke, müßte ich ja dann sowohl auf das Hauptdokument als auch auf das Antwortdokument referenzieren???


    Hier die Formel für den LookUp auf das Hauptdokument (funktioniert)


    @If(@IsNewDoc;FeldA;@GetDocField($Ref; "Thema"))


    Hat jemand einen Tipp? Bin schon ganz verzweifelt.

  • Die Frage ist vor allem: Welches Dokument ist beim Erstellen markiert ?


    Denn von diesem kannst du die Werte ja direkt übernehmen, für alle anderen wirst du wohl um Script nicht herumkommen um darauf zuzugreifen

  • Hallo,


    aktiviert ist das Hauptdokument.


    Ich habe auch schon ein Script für einen Agenten geschrieben.
    Allerdings bekomme ich dann den Fehler Object variable not set!


    Hier mal der Scriptcode
    Dim AuswahlDoc As NotesDocument
    Dim ZuordnungsDoc As NotesDocument
    Dim db As NotesDatabase
    Dim Vorname As String
    Dim Nachname As String


    Sub Initialize
    Dim s As New NotesSession
    Dim ws As New NotesUIWorkspace

    Set db = s.CurrentDatabase
    Set AuswahlDoc = s.DocumentContext
    Set ZuordnungsDoc = db.CreateDocument

    ZuordnungsDoc.Form = "DauerMgl"
    Vorname = AuswahlDoc.GetFirstItem("Vorname").Text
    Nachname = AuswahlDoc.GetFirstItem("Name").Text
    ZuordnungsDoc.Name = Vorname +" " +Nachname

    If AuswahlDoc.HasItem("PLZ2") Then
    ZuordnungsDoc.tel = AuswahlDoc.GetFirstItem("PLZ2").TEXT
    Else
    ZuordnungsDoc.tel = AuswahlDoc.GetFirstItem("PLZ").TEXT
    End If

    Call ZuordnungsDoc.ComputeWithForm(True, False)
    Call ws.EditDocument(True, ZuordnungsDoc)
    End Sub


    Erklärung: Feld PLZ2 wird berechnet und mit dem Wert PLZ gefüllt, eine Doc-ID wurde auch als verstecktes Feld eingefügt.



    Funktioniert es, dass ein Feld über die Elten/Kind - Methode und das andere über den Argenten gefüllt wird?

  • Ich hab am Script nochmal was geändert.


    Jetzt bekomm ich den Fehler: Um diesen Agenten ausführen zu können muss mindestens ein Dokument ausgewählt sein. Ich habe aber ein Dokument ausgewählt!
    Der Agent wird durch einen Button gestartet.


    Sub Initialize
    Dim s As New NotesSession
    Dim ws As New NotesUIWorkspace

    Set db = s.CurrentDatabase
    Set AuswahlDoc = s.DocumentContext
    Set ZuordnungsDoc = db.CreateDocument

    ZuordnungsDoc.Form = "DauerMgl"
    Vorname = AuswahlDoc.GetFirstItem("Vorname").Text
    Nachname = AuswahlDoc.GetFirstItem("Name").Text
    ZuordnungsDoc.Name = Vorname +" " +Nachname

    If AuswahlDoc.HasItem("PLZ2") Then
    ZuordnungsDoc.PLZ = AuswahlDoc.GetFirstItem("PLZ2").TEXT
    Else
    ZuordnungsDoc.PLZ = AuswahlDoc.GetFirstItem("PLZ").TEXT
    End If

    Call ZuordnungsDoc.ComputeWithForm(True, False)
    Call ws.EditDocument(True, ZuordnungsDoc)
    End Sub

  • hast du in den eigenschaften von dem agent vielleicht ne falsche angabe beim "Auslösen:" ?

    -*-*-*-*-*-*-*-*-*-*-*-


    woher soll ich wissen was ich denke, bevor ich höre was ich sage???

  • Ich vermute hier 2 Dinge:


    1.) Die Ansicht ist kategorisiert.


    2.) Es wurde zwar ein Dokument markiert (Haken) aber der Cursor, also die aktive Zeile der View, steht auf einer Kategorie.


    Zitat Hilfe: For an agent activated in a view through the Notes client UI, the in-memory document is the document highlighted in the view.


    Hier ist vom hervorgehobenen, also per Cursor markiertem Dokument die Rede.


    Um stattdessen auf die Markierungen (Häkchen) zuzugreifen muß stattdessen auf notesDatabase.UnprocessedDocuments zurückgegriffen werden.


    Achtung: notesDatabase.UnprocessedDocuments gibt eine Collection zurück, da ja mehrere Dokumente markiert sein können. Hier ist gegebenenfalls eine entsprechende Abfrage/Fehlerbehandlung vorzusehen.

  • Hallo,


    der Agent ist durch Ereignis Auswahl im Menü Aktionen und auf alle ausgewählten Dokumente gesetzt.


    Ich habs mal ausprobiert. wenn ich das Dokument in der Ansicht ausgewählt habe und dann meinen Button drücke kommt: Agent nicht vorhanden. Wenn ich dann den Agenten manuell durch den Menübutton aktiviere kommt das Dokument ist noch nicht gespeichert. Irgendwo liegt im Code wohl noch ein Fehler...

  • Hallo Elfriede,


    da du fast zeitgleich mit mir gepostet hast - hast du meine Antwort gelesen gehabt und ggf. mal versucht, auf UnprocessedDocuments umzustellen?


    (erfordert einige Änderungen, da hier kein Einzeldokument sondern eine Collection zurück kommt, siehe DesignerHilfe, da gibt es ein gutes Beispiel für die nötige Schleife).


    Wenn die Ausschrift "Agent nicht vorhanden" kommt klingt das für mich danach als hättest du dich beim Aufruf verschrieben oder den Namen des Agenten mit einem Alias versehen und den Namensteil dann nicht korrekt angegeben.

  • Ok, wie sieht der Agent-Code jetzt aus (also was du denn geändert?)?


    Wie sieht der Code hinter der Schaltfläche aus, die nicht funktioniert und wo befindet sich diese Schaltfläche (ist es ein Button, wenn ja wo oder ist es eine Aktion in der Ansicht)?


    Kannst du bitte einmal einen Screenshot posten, wo man den von dir eingetragenen Namen des Agenten sehen kann?

  • Ich bin jetzt vom Agenten weggegangen und habe das Script in die Aktion einer Ansicht (Click-Ereignis) gepackt. Der Code ist vom Prinzip der gleiche. Irgendwie komm ich mit der Hilfe nicht weiter. Um notesDocumentCollection = notesDatabase.UnprocessedDocuments zu verwenden muss ich sicher noch die Notesview dimmen oder?

  • Welche View ?


    UnprocessedDocuments gibt dir die durch die Auswahl des Agenten definierten Dokumente zurück.


    Mit Views hat das da gar nichts zu tun.


    Und wenn du konsequent die Fragen bzw Bitten der dir Helfenden ignorierst, dann wird dir bald keiner mehr helfen wollen.

  • Das würde ich ja gern aber irgendwie versteh ichs nicht. In der Ansicht soll ein Dokument ausgewählt werden, dessen Feldinhalte für eine neue Maske (neues Dokument) benötigt werden. Diese Maske wird durch eine Aktion in der Ansicht geöffnet.

  • Was ist an CarstenH's Fragen nicht zu verstehen ?


    Zitat


    Ok, wie sieht der Agent-Code jetzt aus (also was du denn geändert?)?


    Wie sieht der Code hinter der Schaltfläche aus, die nicht funktioniert und wo befindet sich diese Schaltfläche (ist es ein Button, wenn ja wo oder ist es eine Aktion in der Ansicht)?


    Kannst du bitte einmal einen Screenshot posten, wo man den von dir eingetragenen Namen des Agenten sehen kann?

  • Hier ist der geänderte Code:


    Sub Click(Source As Button)
    Dim ws As New NotesUIWorkspace
    Dim AuswahlDoc As NotesDocument
    Dim ZuordnungsDoc As NotesDocument
    Dim collection As NotesDocumentCollection
    Dim db As NotesDatabase
    Dim Vorname As String
    Dim Nachname As String

    Dim s As New NotesSession


    Msgbox"A"
    Set db = s.CurrentDatabase
    Set collection = db.UnprocessedDocuments
    Set AuswahlDoc = s.DocumentContext
    Set ZuordnungsDoc = db.CreateDocument
    Msgbox "1"

    ZuordnungsDoc.Form = "DauerMgl"
    Vorname = AuswahlDoc.GetFirstItem("Vorname").Text
    Nachname = AuswahlDoc.GetFirstItem("Name").Text
    ZuordnungsDoc.Name = Vorname +" " +Nachname

    If AuswahlDoc.HasItem("PLZ2") Then
    ZuordnungsDoc.PLZ = AuswahlDoc.GetFirstItem("PLZ2").TEXT
    Else
    ZuordnungsDoc.PLZ = AuswahlDoc.GetFirstItem("PLZ").TEXT
    End If

    Call ZuordnungsDoc.ComputeWithForm(True, False)
    Call ws.EditDocument(True, ZuordnungsDoc)

    End Sub


    Der Button ist eine Aktion in der Aktionsleiste der Ansicht. Den Aufruf für einen Agenten, den ich vorher mit ToolsRunMacro Agentenname hatte, habe ich durch das Clickereignis des Buttons ersetzt.

  • Das geänderte Script wird so nicht gehen können, da du zwar auf "UnprocessedDocuments" zugreifst, das dann aber nicht weiter verwendest.


    ------------------------------------------------------------------


    Wenn es wirklich "nur" darum geht, die Werte eines markierten Dokuments zu übernehmen brauchst du weder Agenten noch irgendwelche Scripte. Das kann Notes von Hause aus.


    In jeder Maske gibt es eine Eigenschaft im zweiten Reiter der Maske, die sich nennt: "Formeln übernehmen Werte aus gewähltem Dokument".


    Wenn du diesen Haken setzt geht es völlig von allein. Du mußt nur noch in den Feldern, die sich füllen sollen den eigenen Feldnamen oder eine Formel (z.b. bei deinen PLZ-Feldern) als ->Vorgabewert<- eintragen. Vorgabewerte findest du unten im Designer, wenn du ein Feld markiert hast.


    (Wenn du nur manchmal die Übername wünschst, also nicht immer, dann empfiehlt es sich, deine Originalmaske zu duplizieren, wenn das so sein soll frag bitte nochmal getrennt danach.)


    ------------------------------------------------------------------


    Die andere Alternative, wenn du lieber per Script arbeitest, ist, den Code wieder in einen Agenten zu packen und dort wie folgt abzuändern:


    Code
    Msgbox"A"
    Set db = s.CurrentDatabase
    Set collection = db.UnprocessedDocuments
    Set AuswahlDoc = collection.GetFirstDocument
    Set ZuordnungsDoc = db.CreateDocument
    Msgbox "1"


    Sofern deine Aktionsschaltfläche nicht geht, übers Menü aber doch geht, poste bitte einen Screenshot, wo wir den Namen deines Agenten sehen können und zusätzlich die Formel, die du jetzt in der Schaltfläche hast.

  • Ich habe das Script wie folgt geändert:


    Sub Initialize
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim collection As NotesDocumentCollection
    Dim ws As New NotesUIWorkspace
    Dim AuswahlDoc As NotesDocument
    Dim ZuordnungsDoc As NotesDocument
    Dim Vorname As String
    Dim Nachname As String

    Msgbox"A"
    Set db = s.CurrentDatabase
    Set collection = db.UnprocessedDocuments
    Set AuswahlDoc = collection.GetFirstDocument
    Set ZuordnungsDoc = db.CreateDocument
    Msgbox "1"

    ZuordnungsDoc.Form = "DauerMgl"
    Vorname = AuswahlDoc.GetFirstItem("Vorname").Text
    Nachname = AuswahlDoc.GetFirstItem("Name").Text
    ZuordnungsDoc.Name = Vorname +" " +Nachname

    If AuswahlDoc.HasItem("PLZ2") Then
    ZuordnungsDoc.PLZ = AuswahlDoc.GetFirstItem("PLZ2").TEXT
    Else
    ZuordnungsDoc.PLZ = AuswahlDoc.GetFirstItem("PLZ").TEXT
    End If

    Call ZuordnungsDoc.ComputeWithForm(True, False)
    Call ws.EditDocument(True, ZuordnungsDoc)
    End Sub


    und lasse jetzt durch eine Aktion in der Aktionsleiste mit dem Befehl
    @Command([RunAgent])
    den Agenten laufen. Der startet auch allerdings geht dann gleich der Debugger auf und bringt gleich am Anfang (beim dimensionieren) den Fehler "Object variable not set". Lass ich den Debugger fortsetzen bringt er mir dann auch beide Msgboxen.
    Also stimmt mit der Dim etwas nicht?

  • Ich habe mal einen leeren Agenten erzeugt mit den von dir genannten Optionen (Auswahl im Menü 'Aktionen' und Ziel 'Alle ausgewählten Dokumente') und deinen Code unverändert übernommen.


    Bei mir kommt kein Fehler. Ich habe jetzt natürlich keine Dokumente, die deine Feldnamen haben, aber immerhin läuft der Agent bis zur Zeile Vorname tadellos. Ich habe dann mal in meiner DB ein Feld Vorname und Nachname in einem Dokument angelegt und dann lief der Agent auch bis zu deiner PLZ-Abfrage weiter.


    Insofern mußt du noch irgendwas anders haben als du bisher beschrieben hast, dein Script funktioniert bei mir jedenfalls.


    Warum nimmst du nicht einfach die Variante mit der Feldübernahme, wenn das Script zu kompliziert ist? Dann muß deine Schaltfläche nur noch ein @Command([Compose];"Maskenname") bekommen und alles läuft (Vorgabefelder setzen nicht vergessen).


    Wenn du es trotzdem weiter per Script versuchen möchtest wäre es wahrscheinlich sinnvoll, wenn du jemandem von uns einmal deine Datenbank zum Draufschauen zuschickst oder sie hier anhängst, anhand deiner Beschreibung ist leider kein Fehler zu sehen.