Benutzer-Werkzeuge

Webseiten-Werkzeuge


xml:jobdownload

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte Überarbeitung Beide Seiten der Revision
xml:jobdownload [27.08.2012 ]
dstore
xml:jobdownload [07.01.2015 ]
dstore
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?​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}"​ '​https://'​${HOSTNAME}'/​xml/​job?​Interfacename='​${INTERFACE}'&​Jobname='​${JOBNAME} --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> ​
xml/jobdownload.txt · Zuletzt geändert: 15.04.2015 von dstore