Beiträge von Tobias Neumohr

    @taurec


    Ich weiß nicht ob ich deinen Gedankengang genau verstehe. Was hast du denn gewonnen, wenn dein Feld im Maskendesign auftaucht? Das Feld muss im Anschluss ja sowieso durch einen Agenten oder manuell von den Dokumenten gelöscht werden. Oder wie willst du das über das Maskendesign machen?



    Zu Programmieren:


    2 Agenten "Setze Flag" & "Entferne Flag" erstellen.
    1 Funktion "X" auslagern um in bestehenden Agenten zu prüfen was zu tun ist (If/Else existiert Feld & If/Else stehe mein Agentenname in dem Feld). Die Funktion in alle Agenten an den Anfang setzen.


    Der Ablauf würde wie folgt aussehen:


    1. Agent "SetzeFlag" läuft über alle Dokumente und setz ein Flag das in etwa so aussieht:
    Feldname: "AgentenDieDieseDokumenteNichtBearbeitenSollen"
    Werte: Agent1, Agent2, Agent3


    2. Bestehende Agenten laufen los. Jeder Agent dieser Agenten, prüft ob das Feld auf dem Dokument existiert (Dadurch wird zwischen neu erstellten Dokumenten und alten Dokumenten unterschieden).
    Existiert das Feld prüft der Agent ob er in diesem Feld steht, falls ja wird das Dokument über "UpdateProcessedDoc" für diesen Agent als bereits bearbeitet markiert.
    Steht der Agent nicht in dem Feld läuft er ganz normal und bearbeitet das Dokument wie im Code vorgesehen.


    3. Agent "EntferneFlag" läuft über alle Dokumente und entfernt das Flag "AgentenDieDieseDokumenteNichtBearbeitenSollen".


    Ergebnis:
    - Alle Dokumente sind für alle Agenten als "processed" markiert, ob sie tatsächlich bearbeitet wurden oder nicht, spielt keine Rolle. Und das für einen echt geringen Aufwand :)



    Lg Tobi


    PS. Die Namen (Falg, Agenten etc.) bitte nicht ernst nehmen ;)

    Da könnte man dann ja unterschiedliche Flags verwenden. Oder du erstellst über den "Flag"-Agenten ein Multivalue-Feld, welches die Namen der Agent enthält, welche nur neue Dokumente (oder eben alle) bearbeiten sollen. Dann kannst du über eine kleine Funktion in einer Scriptbibliothek in allen Agenten abfragen ob er das jeweilige Dokument bearbeiten soll. Der Übersicht halber würde ich nach dem Umzug und dem Lauf aller Agenten das Feld wieder über einen anderen Agenten entfernen.


    Bezüglich Flag sehe ich das etwas differenzierter, denn es gibt auch Agenten, die gerade dann eben doch wieder alle Dokumente verarbeiten sollen, wenn dieser geändert wurde.Wenn ich allerdings nur ab diesem Zeitpunkt geänderte Dokumente verarbeiten will, dann ist so ein Flag die besser Variante, muss halt nur im Maskendesign auch berücjsichtigt werden

    Was meinst du mit "Das muss im Maskendesign berücksichtigt werden"? Das Feld muss ja nicht auf der Maske existieren, es reicht wenn es über den Agent auf das Dokument geschrieben wird.

    :D oh mann jetzt verstehe ich die Fehlermeldung anders^^, dachte erst die "Datatype Map" hätte einen Datentyp nicht - aber wenn der Datentyp Map fehlt, ist das ja schonmal ein guter Hinweis! Danke dafür ;)


    An einem Java Consumer haben wir auch schon gedacht bzw. erste Versuche gemacht. Aber Lotusscript wäre uns da doch schon etwas lieber, da bei uns nicht alle Java können/Lotusscript hingegen schon.


    Mit dem Type Statement kann ich in Lotusscript ja auch Datentypen definieren...wäre das ein Ansatz??


    Der Result sieht wie folgt aus (da ist auch tatsächlich der type Map drin^^):


    <return xsi:type="ns2:Map">
    <item>
    <key xsi:type="xsd:string">error</key>
    <value xsi:type="xsd:int">0</value>
    </item>
    <item>
    <key xsi:type="xsd:string">message</key>
    <value xsi:type="xsd:string">successfully executed</value>
    </item>
    <item>
    <key xsi:type="xsd:string">result</key>
    <value SOAP-ENC:arrayType="ns2:Map[4]" xsi:type="SOAP-ENC:Array">
    <item xsi:type="ns2:Map">
    <item>
    <key xsi:type="xsd:string">id</key>
    <value xsi:type="xsd:float">7</value>
    </item>
    <item>
    <key xsi:type="xsd:string">name</key>
    <value xsi:type="xsd:string">Liste C</value>
    </item>
    <item>
    <key xsi:type="xsd:string">description</key>
    <value xsi:type="xsd:string">Beispielbeschreibung</value>
    </item>
    </item>
    <item xsi:type="ns2:Map">
    <item>
    <key xsi:type="xsd:string">id</key>
    <value xsi:type="xsd:float">5</value>
    </item>
    <item>
    <key xsi:type="xsd:string">name</key>
    <value xsi:type="xsd:string">Liste B</value>
    </item>
    <item>
    <key xsi:type="xsd:string">description</key>
    <value xsi:type="xsd:string"></value>
    </item>
    </item>
    <item xsi:type="ns2:Map">
    <item>
    <key xsi:type="xsd:string">id</key>
    <value xsi:type="xsd:float">3</value></item>
    <item>
    <key xsi:type="xsd:string">name</key>
    <value xsi:type="xsd:string">Liste A</value>
    </item>
    <item><key xsi:type="xsd:string">description</key>
    <value xsi:type="xsd:string"></value>
    </item>
    </item>
    <item xsi:type="ns2:Map">
    <item>
    <key xsi:type="xsd:string">id</key>
    <value xsi:type="xsd:float">1</value>
    </item>
    <item>
    <key xsi:type="xsd:string">name</key>
    <value xsi:type="xsd:string">Testabonnenten</value>
    </item>
    <item>
    <key xsi:type="xsd:string">description</key>
    <value xsi:type="xsd:string"></value>
    </item>
    </item>
    </value>
    </item>
    </return>


    Hat jemand eine Idee wie man das als Type in Lotusscript definieren kann?


    Beste Grüße


    Tobi

    Zusatzinfo zu RockWilder's Antwort:


    Sobald ein Agent, der als Ziel New or Modified etc. hat, neu gespeichert wird verliert er seine "Liste" der bearbeiten Dokumente. ;) Also beim ändern des $OnBeahlfOf-Feldes wird der auf jedenfall beim nächsten Lauf alle Dokumente neu bearbeiten.


    Um das zu umgehen, kann über einen neuen temporären Agent ein Flag auf allen Dokumenten gesetzt werden, anhand welches der Agent die Dokumente erkennt und nicht nochmal neu bearbeitet. Sollte meiner Meinung nach grundsätzlich für Agenten genutzt werden, welche über ein "UpdateProcessedDoc", die bearbeiteten Dokumente markieren.


    Hoffe das war verständlich^^


    Beste Grüße


    Tobi

    Hallo liebe Notes & Domino-Gemeinde,


    Ich versuche mich gerade an WebServices und hänge leider bereits ganz am Anfang. Ich bilde den WebService Consumer über den Link zur WSDL Datei ab, nutze diesen Consumer in meinem Code und rufe die Funktionen auf. Leider lande ich immer wieder bei folgender Fehlermeldung.


    Bild 1.png


    Der Link zu der WSDL-Datei lautet: http://login.mailingwork.de/webservice/webservice/soap3?wsdl


    Hier den Code den ich in meinem Agent nutze:



    Option Public
    Option Declare


    Use "WebServiceConsumerTest"
    Sub Initialize
    Dim soap As New SoapPort_n0()
    Dim varTemp As Variantarray_holder

    Set varTemp = soap.Test("Hallo")
    End Sub


    Laut der Dokumentation des Webservices wird ein String übergeben und ein Array zurückgegeben.


    Bild 2.png


    Eine weitere Sache, welche mich etwas verwirrt ist der Rückgabe-parameter in dem Webservice-Consumer. Er wird mit dem Dateityp "VariantArray_Holder" angegeben.


    Ich habe es ebenfalls probiert meine Variable varTemp zum Typ "Variant" zu ändern und über die Funktion .Value des Aufrufs einen Variant zu erhalten. Leider endet alles was ich versuche in der oben erwähnten Fehlermeldung.


    Falls mir jemand einen Hinweis geben kann woran es liegt oder was diese Meldung bedeutet, wäre ich sehr dankbar.


    Beste Grüße


    Tobi