Veröffentlicht Mon, 06 Nov 2023 09:01:58 GMT von Oliver Acker Property Manager
Hallo zusammen,

einmal täglich lassen wir einen Workflow über unser Zeiterfassungs-Archiv laufen.
Unter anderem besteht die Aufgabe des Workflows darin, die nächst höhere Doc-ID in  eine Variable zu schreiben, sofern folgende Kriterien übereinstimmen:

DW_ART = 'Zeiterfassung'
AND DW_MITARBEITER = GV_Mitarbeiter


Leider führt folgende Archiv-Abfrage zu einem falschen Ergebnis.

DW_ART = 'Zeiterfassung' AND
DW_MITARBEITER = GV_Mitarbeiter AND
DW_DWDOCID > GV_DocIDAktuell


Ich vermute, dass in der letzten Zeile (DW_DWDOCID > GV_DocIDAktuell) der Fehler liegt, oder?

Vielen Dank für Ihre Hilfe.

MfG Oli Acker
Veröffentlicht Tue, 07 Nov 2023 12:00:27 GMT von Gerardo Lisanti Team Leader Product Management
Hallo Oliver,

um die nächst höhere DOCID zu erhalten würde ich ein Subquery in Verbindung mit der SQL Funktion MIN() nutzen.

WHERE Klausel:
DW_DWDOCID = (SELECT MIN(DW_DWDOCID) FROM [DOKUMENTE] WHERE DW_ART = 'Zeiterfassung' AND DW_MITARBEITER = 'GV_Mitarbeiter' AND DW_DWDOCID > 'GV_DocIDAktuell')

Durch MIN() erhält man die kleinste DWDOCID der Abfrage. Diese sollte entsprechend die nächst höhere sein.
[DOKUMENTE] muss entsprechend mit dem Namen der Archiv-Haupttabelle angepasst werden.


Viele Grüße / With best regards,
--
Gerardo Lisanti
Team Leader Product Management  |  DocuWare GmbH
Veröffentlicht Tue, 07 Nov 2023 12:07:37 GMT von Oliver Acker Property Manager
Hallo Herr Lisanti,

vielen Dank für Ihre Antwort.
Wir erstellen die Abfrage direkt über den Workflow-Designer. Darin sind leider keine "komplexen" SQL Befehle möglich, richtig? (siehe Screenshot)
Veröffentlicht Tue, 07 Nov 2023 21:18:02 GMT von Oliver Acker Property Manager

Hallo Herr Lisanti,

wir haben eine Lösung gefunden (Beispiel der DocIDs 80,78,75,68)

Schritt 1: aktuelle DocID in eine Variable schreiben (z.B. 75)

Schritt 2: Alle weiteren IDs, die dem Suchkriterium entsprechen, in eine Stichwort-Variable schreiben

Schritt 3: alle IDs als String in eine Text-Variable zurückschreiben (Komma getrennt)

Schritt 4:  Mithilfe der InStr-Funktion die Startposition der aktuellen ID als Zahl in eine Zahlen-Variable schreiben:

Schritt 5: Mithilfe der LEFT-Funktion alle Zeichen nach der aktuellen ID löschen. Als Startwert dient hier die Zahl, die mithilfe der InStr-Funktion ermittelt wurde (Left(DW_ALLIDS, GV_InStrINT2 -1))

Schritt 6: die (rechts) übrig gebliebenen IDs zurück in eine Stichwort-Variable schreiben

Schritt 7: Mithilfe der UBOUND-Funktion den letzten Wert aus der Stichwort-Variable in eine neue Zahlen-Variable schreiben

fertig.

Geht man beispielsweise davon aus, dass die aktuelle DocID die 75 ist, wäre die nächst höhere ID die 78. Diese Zahl wird nach dem Workflow einwandfrei ausgegeben (der Test an über 100 Datensätzen hat einwandfrei funktioniert).

Wir danken für Ihre Hilfe.

MfG Oli Acker

Veröffentlicht Wed, 08 Nov 2023 08:57:55 GMT von Gerardo Lisanti Team Leader Product Management
Vielen Dank für das Feedback und die Lösung!
Bzgl. der vorherigen Frage: Ein Sub-Select wie von mir beschrieben, ist im Workflow Designer für die WHERE Klausel möglich.

Viele Grüße / With best regards,
--
Gerardo Lisanti
Team Leader Product Management  |  DocuWare GmbH
Veröffentlicht Wed, 08 Nov 2023 09:10:18 GMT von Oliver Acker Property Manager

Hallo Herr Lisanti,

wie ist es möglich eine Sub-Abfrage zu erstellen (im Bereich Select)?

MfG Oli Acker

Veröffentlicht Wed, 08 Nov 2023 11:08:32 GMT von Gerardo Lisanti Team Leader Product Management
Einfach folgendes Query bei der WHERE Klausel eintragen:
DW_DWDOCID = (SELECT MIN(DW_DWDOCID) FROM [DOKUMENTE] WHERE DW_ART = 'Zeiterfassung' AND DW_MITARBEITER = 'GV_Mitarbeiter' AND DW_DWDOCID > 'GV_DocIDAktuell')

[DOKUMENTE] muss entsprechend mit dem Namen der Archiv-Haupttabelle angepasst werden.
Veröffentlicht Wed, 08 Nov 2023 20:28:11 GMT von Oliver Acker Property Manager
Hallo Herr Lisanti,

das wussten wir gar nicht, dass die WHERE-Klausel mit komplexen Erweiterungsabfragen erweitert werden kann. Das macht die Sache viel einfacher. Somit sind oben genannte Schritt (1-7) gar nicht erforderlich.

vielen Dank für die nützlichen Infos.

MfG Oli Acker

Sie müssen angemeldet sein um Beiträge in den Foren zu erstellen.