Ankündigung

Einklappen
Keine Ankündigung bisher.

Select Abfrage einer Funktion in einer Fremddatengruppe

Einklappen
X

Select Abfrage einer Funktion in einer Fremddatengruppe

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

  • Select Abfrage einer Funktion in einer Fremddatengruppe

    Hallo,
    ich möchte folgende Select Abfrage (Skalarwertfunktion) auf eine Fremdatengruppe durchführen und das Ergebniss in ein Datenfeld schreiben.

    SELECT [akv].[dbo].[GetBearbeitungsfrist]('Wert_aus_einem_Datenfeld', 'AKV')

    Wir würde dafür die Syntax aussehen ?
    Vielen Dank

  • #2
    Hallo,

    wo soll das denn passieren? In Groovy?
    An der SQL-Abfrage ändert sich nichts, du musst nur die Datenbank mitgeben, die im Reiter Integration hinterlegt ist.

    Code:
    def connfremd = g_dbConnections["DBName"] // Verbindungsname aus Portalmanager Integration
    def stmt = g_dbQuery.prepare(connfremd, "SELECT XYZ .... ")
    def datenfeld = stmt.executeAndGetScalarValue(0)
    Grüße Snixx

    Edit: Sorry, erst jetzt gesehen, dass das im Velocity-Forum ist

    Kommentar


    • #3
      Die prinzipielle Syntax der Abfrage sieht so aus:
      Code:
      #set($statement = $PreparedQuery.prepare($DbConnection, "SELECT <COLUMN> FROM DATAGROUP('<DATAGROUP_GUID>') WHERE <CONDITION>"))
      ##$statement.setString(1, "Example text")
      ##$statement.setInt(2, 123)
      ##$statement.setBoolean(3, true)
      #set($result = $statement.executeAndGetScalarValue(<FALLBACK_VALUE>))
      $statement.close()
      Statt $DbConnetion muss dann die externe DB angebunden werden. Das habe ich mit Velocity auch noch nicht gemacht.
      Vielleicht hilft dabei aber folgender Artikel:https://community.intrexx.com/intrex...ncountered-set

      Kommentar


      • #4
        Vielen Dank für die Antworten,
        habe es leider noch nicht hinbekommen.

        Wenn ich den Code von Snixx benutze werden ja nur Variablen definiert aber die Abfrage nicht ausgeführt.
        Ich möchte einen vorhandenen Wert(Beispiel: E3D0757C-02C1-42DA-AA0C-89EFC41CE712) aus einem Datenfeld der Abfrage mitgeben und bekomme ein Datumswert zurück, welchen ich in ein Datenfeld schreiben möchte.

        Im SQL Management Studio sieht eine Beispielabfrage so aus:

        SELECT [akv].[dbo].[GetBearbeitungsfrist]('E3D0757C-02C1-42DA-AA0C-89EFC41CE712', 'AKV')

        Kommentar


        • #5
          Hallo itproduktion,
          ehrlich gesagt ist mir die übermittelte SQL-Syntax nicht ganz klar.
          '[akv].[dbo].[GetBearbeitungsfrist]' ist die Tabelle, 'E3D0757C-02C1-42DA-AA0C-89EFC41CE712' der Abfrageparameter auf das Feld 'AKV' ?

          Der Code von Snixx wäre nur in Groovy verwendbar. Die Variable 'datenfeld' enthält dann das Ergebnis der Abfage. Natürlich müsste damit noch weiter gearbeitet werden.

          Was soll denn eigentlich erreicht werden?
          Geht es darum, das Datum lediglich auf einer Ansichtsseite anzuzeigen?

          Kommentar


          • #6
            Ich rufe eine Funktion in der Datenbank 'akv' auf. D.h. ich möchte einen Wert übergeben, die Funktion berechnet etwas und gibt mir ein Datum zurück.
            [GetBearbeitungsfrist] ist eine Skalarwertfunktion.

            Kommentar


            • #7
              Kommt denn eine Fehlermeldung wenn es ausgeführt wird?

              Kommentar


              • #8
                ... sorry, diese DB-Funktionen hatte ich jetzt nicht auf dem Schirm und weiß nicht ob das geht.
                Hasts du mal folgendes versucht?
                Code:
                #set($conn = $DbUtil.getConnection("AKV"))
                #set($statement = $PreparedQuery.prepare($conn, "SELECT [akv].[dbo].[GetBearbeitungsfrist](?, ?)"))
                $statement.setString(1, "E3D0757C-02C1-42DA-AA0C-89EFC41CE712")
                $statement.setString(2, "AKV")
                #set($result = $statement.executeAndGetScalarValue($ObjectHelper.getNull()))
                $statement.close()

                Kommentar


                • #9
                  Vielen Dank für die Tipps, bei dem Eintrag von Joerg, kam keine Fehlermeldung mehr.

                  1. Was mir noch fehlt, das Ergebnis der Abfrage muss noch in eine Datenfeld (Datum) geschrieben werden.


                  2. $statement.setString(2, "AKV") hier muss das AKV noch durch einen Wert aus einem Datenfeld ersetzt werden, kann ich da einfach die GUID des Datenfeldes eintragen ?

                  Kommentar


                  • #10
                    zu 2.) nein, der Wert muss als String übergeben werden.
                    Zuletzt geändert von Joerg; 04.02.2022, 09:48.

                    Kommentar


                    • #11
                      Ich würde das gern alles über das Velocity Script abwickeln. D.h. wie bekomme ich die Werte ins Script rein und das Ergebnis wieder raus ? ;-)

                      Kommentar


                      • #12
                        Hallo itproduktion,
                        meinen vorherigen Beitrag habe ich mal geändert. Es war quatsch - da hatte ich den Kontext überhaupt nicht beachtet.

                        Das VTL wird auf einer Eingabeseite der Anwendung ausgeführt)?
                        Dann muss das Datenfeld mit dem AKV-Wert auf der Seite (ggf. im verdeckten Bereich) platziert werden und kann dann im VTL wie folgt ausgelesen werden:
                        Code:
                        $DC.getValueHolder('<CONTROL_NAME>').getValue()
                        Das Ergebnis in meinem Beispiel vom 13.1. ist dann '$result'.
                        Die Variable kann in einem Eingabefeld der Seite direkt verarbeitet werden:
                        Dazu das Binding des Eingabefeldes auf 'Statisch' mit Vorgabe vom Typ 'Velocity' setzen und dort '$result' eintragen (siehe anhängender Screenshot).



                        Angehängte Dateien

                        Kommentar


                        • #13
                          Ich habe jetzt erst wieder Zeit gefunden, mich mit dem Thema zu beschäftigen.
                          Leider funktioniert es immer noch nicht und ich gehe alles noch einmal durch.
                          - in der erste Zeile lege ich die Serververbindung fest, wird dort der identische Name wie bei Datenquellen eingetragen ? (siehe Screenshots)

                          Klicke auf die Grafik für eine vergrößerte Ansicht

Name: velo2.jpg
Ansichten: 74
Größe: 68,0 KB
ID: 12314 Klicke auf die Grafik für eine vergrößerte Ansicht

Name: image_1301.jpg
Ansichten: 78
Größe: 39,0 KB
ID: 12313
                          Angehängte Dateien

                          Kommentar


                          • #14
                            Das sieht korrekt aus. Wlche Fehlermeldung erscheint denn, bzw. was genau geschieht und was geschieht nicht?

                            Kommentar


                            • #15
                              Es passiert eigentlich gar nix, im Zielfeld steht einfach nur "$result".
                              Zu Testzwecken habe ich natürlich einen Wert in die Abfrage eingetragen. (Wert aus Eingabefeld...)
                              Er soll den Wert aus dem Eingabefeld "id_akvBOX" in die Selectabfrage eintragen und das Ergebnis in das Eingabefeld "bearbeitungsfrist" zurück schreiben

                              Klicke auf die Grafik für eine vergrößerte Ansicht

Name: velo3.jpg
Ansichten: 81
Größe: 104,6 KB
ID: 12317

                              Klicke auf die Grafik für eine vergrößerte Ansicht

Name: velo4.jpg
Ansichten: 73
Größe: 83,2 KB
ID: 12319
                              Angehängte Dateien

                              Kommentar


                              • #16
                                Schieb das VTL-Include mal über die Eingabefelder
                                Alternativ kannst du das Velocity Skript auch in den Seiteneigenschaften unter "Allgemein > Velocity-Datei zur Initialisierung" einbinden.

                                Kommentar


                                • #17
                                  Hallo tobiz, das hat geklappt, vielen Dank an alle.

                                  Kommentar

                                  Lädt...
                                  X