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:

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:

Es ist eine HTTP-Auth-Anmeldung mit einem dStore-User erforderlich.

Die Rückmeldung im Erfolgsfall ist

Ist es zu einem Fehler gekommen (Jobname falsch o.ä.) ist die Rückmeldung:

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