implementiert man die Shop-spezifische Funktion daten_holen() mit Ergebnis-Typ Array (indem man wie in der Dokumentation beschrieben $GLOBALS['datakind'] auf 2 setzt und das Ergebnis-Array in $GLOBALS['ErgebnisArray'] ablegt) so erzeugt die weitere Logik der Shopanbindung (neueste Version, vom 27. März 2013) für ein leeres Array ungültiges XML (genaue gesagt: "<OrderNotification></Bestellvorgang><OrderNotification>" ).
Um dies zu vermeiden muss man bei leerem Ergebnis den Wert $GLOBALS['ErgebnisArray'] auf NULL setzen. Ich hatte zunächst angenommen, dass ein leeres Array und NULL gleich behandelt würden.
Es wäre wünschenswert dass dies entsprechend in der Dokumentation beschrieben würde, oder besser noch, wenn der Shop-unabhängige Code das Array-Ergebnis robuster weiterverarbeiten würde.
Aufgefallen ist mir das bei einer Anpassung der gambio.php, in der ich die Funktion daten_holen() folgendermaßen angepasst habe (um sie danach weiter anzupassen) :
$GLOBALS['datakind'] = "2";
$query = "SELECT [...]"; // Originale Query
$rows = array();
$qRes = mysql_query($query);
while ($row = mysql_fetch_assoc($qRes))
{
$rows[] = $row;
}
mysql_free_result($qRes);
if (empty($rows))
{
$rows = NULL;
}
$GLOBALS['ErgebnisArray'] = $rows;
return $GLOBALS['datakind'];
Lässt man das letzte if weg, so liefert der Aufruf der orgamax_osc.php wie oben erwähnt ungültiges XML.
Edit:
Damit das Codeschnipsel funktioniert müssen die Zeilen des Arrays vor dem Ende der Funktion noch nach der Spalte "orderID" sortiert werden, da sie sonst von der weiteren Logik nicht korrekt zu Aufträgen zusammengefasst werden.
Auch bei dieser Info wäre es schön, wenn sie in der Doku stehen würde
Grüße,
Johannes
[Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 10.04.2013 um 10:15.]