Ankündigung

Einklappen
Keine Ankündigung bisher.

Groovy steuern

Einklappen
X

Groovy steuern

Einklappen
  • Filter
  • Zeit
Alles löschen
neue Beiträge

  • Groovy steuern

    Mahlzeit,

    in einer Applikation sollen per Button drei Groovy-Scripts ausgeführt werden.
    ABER, das 2. und 3. Script sollen natürlich erst anlaufen wenn das vorherige abgeschlossen ist.

    Da der Aufruf per Button über Javascript läuft war mein Ansatz ein "setTimeout" aber das fruchtet nicht.
    Könnt Ihr mir weiterhelfen, ich seh den Wald vor lauter Bäumen nicht.

    Anbei mein Ansatz, oder lässt sich das auch innerhalb eines Groovy-Scripts regeln?

    Ansatz:
    Code:
    function call_finish(){
    var el = getElement("74C8867405DCCFE23AA0850999A8A1D412B6C1 85"); /*Finish Button buttoncontrol*/
    ix.ajax().requestAppGroovy("script1.groovy", {
    dataType: "json",
    success: function (data) {
    alert(data);
    },
    ixWaitAnim: {
    element: el,
    type: "overlay"
    }
    }, el);
    
    setTimeout(
    ix.ajax().requestAppGroovy("script2.groovy", {
    dataType: "json",
    success: function (data) {
    alert(data);
    },
    ixWaitAnim: {
    element: el,
    type: "overlay"
    }
    }, el)
    , 5000)
    
    setTimeout(
    ix.ajax().requestAppGroovy("script3.groovy", {
    dataType: "json",
    success: function (data) {
    alert(data);
    makeAppRequest("[GUID]", "[GUID]", false, false, false);
    },
    ixWaitAnim: {
    element: el,
    type: "overlay"
    }
    }, el)
    , 5000)
    }
    Grüße

  • #2
    Sicherer wäre, im success-Fall des ersten Scripts das zweite Script aufzurufen. Also die Scripte zu verschachteln und nicht sequentiell im Code anzuordnen..

    Kommentar


    • #3
      Hallo Martin,

      öhm jetzt wird`s kompliziert.

      Meinst Du so in der Art?
      Code:
      function call_finish(){
      var el = getElement(""); /*Finish Button buttoncontrol*/
      ix.ajax().requestAppGroovy("script1.groovy", {
      dataType: "json",
      success: function (data) {
      
      ix.ajax().requestAppGroovy("script2.groovy", {
      dataType: "json",
      success: function (data) {
      
      ix.ajax().requestAppGroovy("finish3.groovy", {
      dataType: "json",
      success: function (data) {
      alert(data);
      makeAppRequest("", "", false, false, false);
      },
      ixWaitAnim: {
      element: el,
      type: "overlay"
      }
      }, el)
      
      alert(data);
      },
      ixWaitAnim: {
      element: el,
      type: "overlay"
      }
      }, el)
      
      },
      ixWaitAnim: {
      element: el,
      type: "overlay"
      }
      }, el);

      Kommentar


      • #4
        ja genau so

        Kommentar


        • #5
          Okay, werd ich ausprobieren.

          vielen herzlichen Dank

          Kommentar


          • #6
            Schönen guten Morgen,

            leider funktioniert das ganze so gar nicht.
            So schaut das ganze im Moment aus.
            Zur Kontrolle hab ich nach jedem Schritt ein "Alert" eingebaut, aber nach dem ersten Script passiert nix mehr.
            Auch die 2. und 3. Meldung wird nicht ausgelöst.
            Finde auch nix im Log.

            Code:
            function call_finish(){
            var el = getElement("74C8867405DCCFE23AA0850999A8A1D412B6C1 85"); /*Finish Button buttoncontrol*/
            alert("Starte Finish.groovy")
            ix.ajax().requestAppGroovy("finish.groovy", {
            dataType: "json",
            success: function (data) {
            alert("Starte Finish2.groovy")
            ix.ajax().requestAppGroovy("finish2.groovy", {
            dataType: "json",
            success: function (data) {
            alert("Starte Finish3.groovy")
            ix.ajax().requestAppGroovy("finish3.groovy", {
            dataType: "json",
            success: function (data) {
            alert(data);
            makeAppRequest("662381766BD8921D9C646B880D94296ACE 63EF20", "FE6ABBD66024BE1DE83E4D088322D33B30B5D005", false, false, false);
            },
            ixWaitAnim: {
            element: el,
            type: "overlay"
            }
            }, el)
            
            alert(data);
            },
            ixWaitAnim: {
            element: el,
            type: "overlay"
            }
            }, el)
            },
            ixWaitAnim: {
            element: el,
            type: "overlay"
            }
            }, el);
            }

            Kommentar


            • #7
              Wenn das success nicht ausgeführt wird, heißt das, dass das Groovy-Skript entweder gar nicht ausgeführt wird, oder in einen Fehler läuft.
              Mach doch mal ins Groovy-Skript eine Logausgabe (g_syslog.info("script1")) und schau ob das im portal.log landet.
              Öffne im Browser mit F12 auch mal die Konsole, um zu sehen, ob dort Fehlermeldungen kommen.

              Edit: Wie sieht dein Groovy-Skript eigentlich aus? Erzeugt es auch eine Ausgabe?
              Zuletzt geändert von MartinW; 29.10.2020, 07:37.

              Kommentar


              • #8
                Moin Martin,

                am Beginn und am Ende jedes Groovy-Sripts ist eine g_syslog.
                Wenn immer nur einer der Schritte aktiv ist, sprich die beiden anderen auskommentiert sind laufen alle drei Scripts einwandfrei durch.
                So aber bleibt`s irgendwo nach dem ersten Script hängen.
                Der Logeintrag zum Start des 2. Scripts bleibt aus.

                finish (erzeugt "Blankodatensätze")
                Code:
                import de.uplanet.scripting.groovy.util.Safely
                
                def conn = g_dbConnections.systemConnection
                
                
                g_syslog.info("Blankobelege erzeugen")
                // Hier werden die 100 blankobelege ohne Artikelnummer erzeugt
                def pufferbelege = 100
                
                pufferbelege.times {
                def id_artikel = g_dbQuery.executeAndGetScalarValue(conn, "select (max(lid)) from DATAGROUP('0CE77D70212A6D98F420EC7C845D43A5E418B73 F') ") {}
                
                def nummer = g_dbQuery.executeAndGetScalarValue(conn, "SELECT max(l_lfdnummer) from DATAGROUP('0CE77D70212A6D98F420EC7C845D43A5E418B73 F') where l_lfdnummer < 6000 ") {
                }
                
                g_dbQuery.executeUpdate(conn, "INSERT INTO DATAGROUP('0CE77D70212A6D98F420EC7C845D43A5E418B73 F') (LID,L_LFDNUMMER,STR_ARTN, STR_VARTNV, FLT_LAENGE, FLT_BREITE, FLT_STAERKE,STR_VATV, str_kyarv, str_lfnr, l_zaehler) VALUES (?,?,?,?,?,?,?,?,?,?,?)") {
                setInt(1, id_artikel+1)
                setInt(2, nummer+1)
                setString(3, ' ')
                setString(4, ' ')
                setDouble(5, 0)
                setDouble(6, 0)
                setDouble(7, 0)
                setString(8, ' ')
                setString(9, '00000000000000')
                setString(10, ' ')
                setInt(11, 1)
                }
                }
                g_syslog.info("Blankobelege erzeugt")
                finish2 (stößt einen Process zum Generieren von QR-Codes an)
                Code:
                import de.uplanet.scripting.groovy.util.Safely
                
                def conn = g_dbConnections.systemConnection
                
                
                g_syslog.info("QR-Codes erzeugen")
                
                de.uplanet.lucy.server.scheduler.JobStarter.startJ ob("2AA590B548764573897E09D36ED8276D70222D65")
                
                g_syslog.info("QR-Codes erzeugt")
                finish3 (Übergibt das Ergebnis an eine DB2)
                Code:
                import de.uplanet.scripting.groovy.util.Safely
                
                def conn = g_dbConnections.systemConnection
                def connAS400 = g_dbConnections["AS400"]
                def stmt = null
                def rs = null
                def tblAS400 = "S1052F4D.e.INVBEL_20P"
                
                g_syslog.info("Starte Übergabe an DB2")
                // Hier werden die Daten an die AS400 in E.INVBEL_20P übergeben
                
                try
                {
                // Auswahl der Felder
                stmt = g_dbQuery.prepare(conn, """
                SELECT
                l_lfdnummer,
                case when str_tarst1 is null then ' ' else str_tarst1 end as str_tarst1,
                case when str_kyarv is null then ' ' else str_kyarv end as str_kyarv,
                case when str_artn is null then ' ' else str_artn end as str_artn,
                case when str_vartnv is null then ' ' else str_vartnv end,
                case when str_tat1 is null then ' ' else str_tat1 end as str_tat1,
                case when str_tat2 is null then ' ' else str_tat2 end as str_tat2,
                case when str_vatv is null then ' ' else str_vatv end,
                case when str_vkeinheit is null then ' ' else str_vkeinheit end as str_vkeinheit,
                case when str_vlgst is null then ' ' else str_vlgst end ,
                case when flt_laenge = 0 then 0 else flt_laenge end,
                case when flt_breite = 0 then 0 else flt_breite end,
                case when flt_staerke = 0 then 0 else flt_staerke end,
                case when str_frfart04 is null then str_frfart05 else str_frfart04 end as Lagerplatz,
                case when str_lfnr is null then ' ' else str_lfnr end,
                case when str_likuan is null then ' ' else str_likuan end,
                case when str_qrcode is null then ' ' else str_qrcode end,
                case when str_team is null then ' ' else str_team end,
                case when l_zaehler is null then 1 else l_zaehler end,
                ' ',
                ' '
                FROM XDATAGROUPE28928E291
                where LID >= 1
                """)
                
                rs = stmt.executeQuery()
                while (rs.next())
                {
                
                
                // Update der Daten auf Seite "AS400"
                g_dbQuery.executeUpdate(connAS400, "insert into ${tblAS400} (BELEGNR, TARST1, kyarv, artn, vartnv, tat1, tat2, vatv, vk_einheit, vlgst, laenge, breite, staerke, FRFART04, lfnr, likuan, qrcode, team, zaehler, vdi, arvsv ) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)" ) {
                setInt(1, rs.getIntValue(1))
                setString(2, rs.getStringValue(2))
                setString(3, rs.getStringValue(3))
                setString(4, rs.getStringValue(4))
                setString(5, rs.getStringValue(5))
                setString(6, rs.getStringValue(6))
                setString(7, rs.getStringValue(7))
                setString(8, rs.getStringValue(8))
                setString(9, rs.getStringValue(9))
                setString(10, rs.getStringValue(10))
                setDouble(11, rs.getDoubleValue(11))
                setDouble(12, rs.getDoubleValue(12))
                setDouble(13, rs.getDoubleValue(13))
                setString(14, rs.getStringValue(14))
                setString(15, rs.getStringValue(15))
                setString(16, rs.getStringValue(16))
                setString(17, rs.getStringValue(17))
                setString(18, rs.getStringValue(18))
                setInt(19, rs.getIntValue(19))
                setString(20, rs.getStringValue(20))
                setString(21, rs.getStringValue(21))
                }
                
                }
                
                rs = Safely.close(rs)
                stmt = Safely.close(stmt)
                }
                finally
                {
                rs = Safely.close(rs)
                stmt = Safely.close(stmt)
                }
                
                g_syslog.info("Übergabe an DB2 beendet")

                Kommentar


                • #9
                  Wie MartinW schon schrieb hilft hier wohl nur schrittweises Debugging anhand von Ausgaben (Webkonsole und Portallog). Eine Notiz habe ich aber anzumerken: Auch wenn nicht immer nötig, ist es in JavaScript zur Vermeidung von Fehlern empfohlen, nach jeder Anweisung (statement) ein Semikolon zu setzen.

                  Kommentar


                  • #10
                    Schau mal in der Groovy-Bibliothek nach "writeJSON".
                    Das Groovy-Skript wird ja per AJAX aufgerufen. Letztlich ein einfacher HTTP-Call nach dem Request-Response-Verfahren.
                    So wie ich das sehe, erzeugst du zwar im Groovy-Skript eine Logausgabe, aber eben kein Response, welches im JavaScript wieder verarbeitet werden könnte.
                    Irgendwas muss das Groovy-Skript an das JavaScript zurückgeben, sonst funktioniert das nicht.

                    Kommentar


                    • #11
                      Mahlzeit

                      Ah, das heißt das Script bleibt stehen weil es auf die Antwort vom Groovy wartet, die aber nicht kommt weil "response.json()" fehlt?
                      Hab ich das richtig verstanden?

                      Bin ich wieder etwas Schlauer - Danke Forum

                      Kommentar

                      Lädt...
                      X