Benutzer-Werkzeuge

Webseiten-Werkzeuge


xml:jobdownload

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 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 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:

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