Damit die exportierte Datei im weiteren Prozessverlauf zur Verfügung steht, müssen Pfad und Name der Datei in die Prozesstabelle zurück geschrieben werden. Darüber hinaus soll die Anzahl der exportierten Zeilen in einem weiteren Prozesstabellenfeld hinterlegt werden. Um dies zu erreichen führen wir zunächst eine Zählvariable ein, die die Anzahl der geschriebenen Zeilen speichert. Um die so ermittelten Werte in der Prozesstabelle zu speichern wird die API-Methode storeOutputParameter verwendet:
Ausgabeparameter in der Prozesstabelle speichern
<?php
class csvSystemActivity extends AbstractSystemActivityAPI
{
...
private $fieldDelimiter;
private $csvFile;
private $csvFilePointer;
private $numberOfRows;
protected function exportCsv()
{
$this->debug('exportCsv start');
$this->loadGlobalSettings();
$this->openCsvFile('w');
$this->debug('executeMethodForSubtable for '. $this->getFixSubtableName());
$this->initLineCounter();
$this->executeMethodForSubtable('writeSubtableLineIntoFile', $this->getFixSubtableName());
$this->storeOutputParameter('targetFile', $this->csvFile);
$this->storeOutputParameter('numberOfRows', $this->numberOfRows);
}
protected function loadGlobalSettings()
{
$this->fieldDelimiter = $this->resolveInputParameter('fieldDelimiter');
}
protected function openCsvFile($mode)
{
$this->csvFile = $this->getTempPath() . DIRECTORY_SEPARATOR . 'test.csv';
$this->debug('csvFile: '.$this->csvFile);
$this->csvFilePointer = fopen($this->csvFile, $mode);
}
protected function initLineCounter()
{
$this->numberOfRows = 0;
}
protected function writeSubtableLineIntoFile()
{
$this->debug('writeSubtableLineIntoFile for '. $this->getFixSubtableName());
$subtableValues = $this->resolveInputParameterListValues('fieldList');
$csvLine = implode($this->fieldDelimiter, $subtableValues)."\r\n";
fwrite($this->csvFilePointer, $csvLine);
$this->numberOfRows++;
}
}
Ein Blick auf die Schritt-Details im Simulator zeigt uns, dass die Daten korrekt in die Prozesstabelle geschrieben wurden: