Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
|
xml:jobdownload [22.08.2012 ] dstore |
xml:jobdownload [15.04.2015 ] (aktuell) dstore [Pollen in Intervallen] |
||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== Download von Jobs ====== | ||
| + | Um Jobs unabhängig ihres Typs (Artikel, Personen, Aufträge) vom Server abzurufen verwenden Sie die folgende URL | ||
| + | |||
| + | https://<Partner>-<Projekt>.dstore.de/xml/job | ||
| + | |||
| + | mit den Pflichtparametern: | ||
| + | |||
| + | * Interfacename : Name der Schnittstelle, also in der Regel "orders_out", "persons_out". Es können natürlich auch Jobs von "_in"-Schnittstellen abgerufen werden | ||
| + | * Jobname : Name des Jobs der abgerufen werden soll. Die Namen der noch nicht abgerufenen Jobs erhalten Sie über [[jobmanagement|die Liste der Jobs in der Warteschleife (jobqueue)]]. | ||
| + | |||
| + | Optional ist es seit Version 2.5.4 des xml_SmartGates möglich den Job Server-seitig per XSLT zu transformieren. Dazu wird folgender Parameter verwendet: | ||
| + | |||
| + | * xslt : Name der Stylesheet Datei (ohne Dateiendung) die zur Transformation angewendet werden soll. Alle Stylesheets liegen auf dem Server im Verzeichnis "xslt", es kann hier also insbesondere keine URL angegeben werden. | ||
| + | |||
| + | Es ist eine HTTP-Auth-Anmeldung mit einem [[dstoreterm>dStoreUser|dStore-User]] erforderlich. | ||
| + | | ||
| + | Die Rückmeldung im Erfolgsfall ist | ||
| + | |||
| + | * HTTP-Status 200 OK | ||
| + | * Body (application/xml) mit dem Inhalt des Jobs | ||
| + | |||
| + | Ist es zu einem Fehler gekommen (Jobname falsch o.ä.) ist die Rückmeldung: | ||
| + | |||
| + | * HTTP-Status ungleich 200, in der Regel ist das dann: | ||
| + | * Falls eine Änderung der Parameter den Fehler beheben kann: 400 Bad Request | ||
| + | * Falls der Request unverändert zu einem späteren Zeitpunkt erfolgreich sein kann: 503 Service Unavailable | ||
| + | * Falls http statt https verwendet wurde ist der HTTP-Status 403 Forbidden | ||
| + | * Body (text/plain) mit weiteren Informationen (i.d.R. sind dies die Fehlermeldungen) | ||
| + | |||
| + | ==== Pollen in Intervallen ==== | ||
| + | |||
| + | Gerade bei den _out-Schnittstellen möchte man in Intervallen die Schnittstelle auf neue, exportierte Jobs in Intervallen abfragen und die empfangenen Dateien dann verarbeiten. Wir verwenden hierzu oft bash-Skripte die so aufgebaut sind: | ||
| + | |||
| + | <code bash poll_queue.sh> | ||
| + | #!/bin/bash | ||
| + | |||
| + | USAGE="Usage: $0 | ||
| + | --hostname <partner-project.dstore.de> | ||
| + | --interface <eg. orders_out> | ||
| + | --username <username> | ||
| + | --password <password> | ||
| + | [--sleep <sleep between polls in seconds>] | ||
| + | " | ||
| + | # default values | ||
| + | SLEEPTIME=120 | ||
| + | |||
| + | # read parameters | ||
| + | while :; do | ||
| + | case "$1" in | ||
| + | --hostname) | ||
| + | shift; HOSTNAME="$1"; shift | ||
| + | ;; | ||
| + | --interface) | ||
| + | shift; INTERFACE="$1"; shift | ||
| + | ;; | ||
| + | --username) | ||
| + | shift; USERNAME="$1"; shift | ||
| + | ;; | ||
| + | --password) | ||
| + | shift; PASSWORD="$1"; shift | ||
| + | ;; | ||
| + | --sleep) | ||
| + | shift; SLEEPTIME="$1"; shift | ||
| + | ;; | ||
| + | -*) | ||
| + | # Unexpected option | ||
| + | echo $USAGE | ||
| + | exit 2 | ||
| + | ;; | ||
| + | *) | ||
| + | break | ||
| + | ;; | ||
| + | esac | ||
| + | done | ||
| + | |||
| + | # Required Parameters | ||
| + | if [ -z "$HOSTNAME" -o -z "$INTERFACE" -o -z "$USERNAME" -o -z "$PASSWORD" ]; then | ||
| + | echo $USAGE | ||
| + | exit 2 | ||
| + | fi | ||
| + | |||
| + | function GetNextJobInQueue { | ||
| + | local HOSTNAME=$1 | ||
| + | local INTERFACE=$2 | ||
| + | local USERNAME=$3 | ||
| + | local PASSWORD=$4 | ||
| + | JOBS_IN_QUEUE=$(curl 'https://'${HOSTNAME}'/xml/jobqueue' --data-urlencode "Interfacename=${INTERFACE}" --user ${USERNAME}:${PASSWORD} --silent --fail --show-error ) | ||
| + | RETVAL=$? | ||
| + | if [ $RETVAL -ne 0 ]; then | ||
| + | echo "Could not get jobqueue via http request: https://${HOSTNAME}/xml/jobqueue?Interfacename=${INTERFACE}. Maybe username:password wrong? Please check." | ||
| + | return 255; | ||
| + | fi | ||
| + | if [ "$JOBS_IN_QUEUE" == "" ]; then | ||
| + | FOUND_JOBFILE=""; | ||
| + | echo "No job in ${INTERFACE} queue" | ||
| + | return; | ||
| + | fi | ||
| + | JOBS_IN_QUEUE=($JOBS_IN_QUEUE); | ||
| + | FOUND_JOBFILE=${JOBS_IN_QUEUE[0]} | ||
| + | } | ||
| + | |||
| + | function GetJob { | ||
| + | local HOSTNAME=$1 | ||
| + | local INTERFACE=$2 | ||
| + | local JOBNAME=$3 | ||
| + | local USERNAME=$4 | ||
| + | local PASSWORD=$5 | ||
| + | |||
| + | HTTP_STATUS=$(curl --output ${JOBNAME} --write-out "%{http_code}" --data-urlencode "Interfacename=${INTERFACE}" --data-urlencode "Jobname=${JOBNAME}" 'https://'${HOSTNAME}'/xml/job' --user ${USERNAME}:${PASSWORD} --silent --fail --show-error) | ||
| + | RETVAL=$? | ||
| + | if [ $RETVAL -ne 0 -o $HTTP_STATUS -ne 200 ]; then | ||
| + | echo "Could not get job via http request: https://${HOSTNAME}/xml/job?Interfacename=${INTERFACE}. Maybe username:password wrong? Please check." | ||
| + | return 255; | ||
| + | fi | ||
| + | echo "Fetched ${JOBNAME} (HTTP-status-code ${HTTP_STATUS})" | ||
| + | } | ||
| + | |||
| + | function ProcessJob { | ||
| + | local JOBNAME=$1 | ||
| + | echo "Processing ${JOBNAME}" | ||
| + | } | ||
| + | |||
| + | # Loop endless | ||
| + | while [ 1 == 1 ]; do | ||
| + | GetNextJobInQueue $HOSTNAME $INTERFACE $USERNAME $PASSWORD | ||
| + | if [ "$FOUND_JOBFILE" != "" ]; then | ||
| + | GetJob $HOSTNAME $INTERFACE $FOUND_JOBFILE $USERNAME $PASSWORD | ||
| + | ProcessJob $FOUND_JOBFILE | ||
| + | fi | ||
| + | # Sleep until next poll-cycle | ||
| + | sleep $SLEEPTIME | ||
| + | done | ||
| + | </code> | ||