Die Datei bapi.php dient der Aufbereitung der input-Felder für die Weitergabe an das SAP-System und zum Behandeln der zurückgelieferten Daten.
<?php
class jobsapbapi_Z_ACC_DOCUMENT_POST
extends BapiHandler
{
private $nextItemNo;
private $currencyAmount;
public function __construct($webServiceId, $inputValues)
{
$this->nextItemNo = 1;
$this->currencyAmount = array();
parent::__construct($webServiceId, $inputValues);
}
...
Der Klassenname entspricht dem Format jobsapbapi_<JobLink for SAP Bausteinname>. Die Klasse erweitert die JobRouter-Klasse BapiHandler. Sind zusätzliche Aktionen im Konstruktor notwendig, kann er überschrieben werden. Der Konstruktor der BapiHandler-Klasse muss auch aufgerufen werden.
Des Weiteren enthält die Klasse Funktionen, die für bestimmte Tabellen aus dem tables-Element die Feldwerte nach Bedarf aufbereiten. Hier können auch Abhängigkeiten zwischen Feldern aus verschiedenen Tabellen behandelt werden. Die Abarbeitung der Tabellen entspricht der Reihenfolge in der bapi.xml - Datei. Die Sichtbarkeit der Funktionen muss auf protected gesetzt werden, damit die BapiHandler-Klasse darauf zugreifen kann. Die Funktionsnamen entsprechen dem Format get<Tabellenname>. Als Eingabeparameter werden die Tabellenname und ein BapiDefinition-Objekt übergeben. Jede Funktion muss ein Array mit Daten für die jeweilige Tabelle zurück liefern.
protected function getACCOUNTPAYABLE($tableName, BapiDefinition $bapiDefinition)
{
$inputParameters = array();
$inputParameterRow = array();
$tableInputFields = $bapiDefinition->getInputFields($tableName);
foreach ($tableInputFields as $field) {
$fieldName = $field['name'];
$fieldType = $field['type'];
$fieldValue = $this->getInputFieldValue($fieldName, $fieldType);
$inputParameterRow[$fieldName] = $fieldValue;
}
$inputParameterRow['ITEMNO_ACC'] = $this->nextItemNo++;
$inputParameters[] = $inputParameterRow;
$currency = $this->getInputFieldValue('CURRENCY');
$totalAmount = $this->getInputFieldValue('TOTAL_AMOUNT') * -1;
$this->currencyAmount[] = array(
'CURRENCY' => $currency, 'AMT_DOCCUR' => $totalAmount, 'ITEMNO_ACC' => $inputParameterRow['ITEMNO_ACC'],
'AMT_BASE' => 0.00
);
return $inputParameters;
}
Die Funktion getOutputParameter kann überschrieben werden, um output-Feldern in passenden SAP-Felder zu überführen. Die Sichtbarkeit der Funktion muss auf protected gesetzt werden, damit die BapiHandler-Klasse darauf zugreifen kann.
protected function getOutputParameter($name)
{
switch ($name) {
case 'FISCALYEAR':
return 'OBJ_KEY';
break;
case 'INVOICEDOCNUMBER':
return 'OBJ_KEY';
break;
default:
throw new JobRouterException('Unknown name for userdefined output parameter: ' . $name);
break;
}
}
Die Funktion getOutputValue kann überschrieben werden, um Rückgaben aus dem SAP-System in den passenden Tabellenfeldern in JobRouter zu speichern. Die Sichtbarkeit der Funktion muss auf public gesetzt werden, damit JobRouter-Klassen darauf zugreifen können.
public function getOutputValue($fieldName, $result)
{
switch ($fieldName) {
case 'FISCALYEAR':
$objectKey = $result['OBJ_KEY'];
return substr($objectKey, -4);
break;
case 'INVOICEDOCNUMBER':
$objectKey = $result['OBJ_KEY'];
return substr($objectKey, 0, 10);
break;
default:
throw new JobRouterException('Unknown field for userdefined output parameter: ' . $fieldName);
break;
}
}
Hinweis: Für die Übergabe von Daten an das SAP-System werden für die Tabellen jeweils eine get<Tabellenname>-Funktion benötigt (Eingabeparameter und Eingabelisten). Die Übernahme von Daten aus dem SAP-System erfolgt anhand der Definition in der bapi.xml und der Konfiguration der Systemaktivität bzw. des Bausteins (Ausgabeparameter und Ausgabelisten).