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
xml:jobdownload [27.08.2012 ]
dstore
xml:jobdownload [15.04.2015 ]
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> ​
xml/jobdownload.txt · Zuletzt geändert: 15.04.2015 von dstore