Da hier eine variable Anzahl von Spalten konfiguriert werden kann, müssen wir einen List-Parameter auflösen:
Zur Erinnerung die XML Konfiguration des List-Parameters fieldList
<?php
...
<field id='fieldDelimiter' name='CONST_SA_CSV_FIELD_DELIMITER' desc='CONST_SA_CSV_FIELD_DELIMITER_DESC' worktable='yes' subtable='no' fixed='yes' datatype='varchar' required='yes'/>
<list id='fieldList' name='CONST_SA_CSV_COLUMN_MAPPING' worktable='no' subtable='yes' fixed='no' datatype='varchar' required='no' udl='yes'/>
...
So konnten in der Systemaktivität beliebige Spalten für den Export konfiguriert werden.
Um die Werte aus der Untertabelle Zeile für Zeile einzulesen, müssen immer die Werte der aktuellen Zeile anhand der konfigurierten Liste aufgelöst werden. Dies erfolgt mit der Methode resolveInputParameterListValues:
Daten aus der Untertabelle auflösen und in die CSV-Datei schreiben
<?php
class csvSystemActivity extends AbstractSystemActivityAPI
{
...
private $fieldDelimiter;
private $csvFile;
private $csvFilePointer;
protected function exportCsv()
{
$this->debug('exportCsv start');
$this->loadGlobalSettings();
$this->openCsvFile('w');
$this->debug('exportCsv end');
}
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);
$this->debug('executeMethodForSubtable for '. $this->getFixSubtableName());
$this->executeMethodForSubtable('writeSubtableLineIntoFile', $this->getFixSubtableName());
}
protected function writeSubtableLineIntoFile()
{
$this->debug('writeSubtableLineIntoFile for '. $this->getFixSubtableName());
$subtableValues = $this->resolveInputParameterListValues('fieldList');
$csvLine = implode($this->fieldDelimiter, $subtableValues)."\r\n";
fwrite($this->csvFilePointer, $csvLine);
}
}
Führen wir nun die Systemaktivität aus, wird die Untertabelle mit dem konfigurierten Trennzeichen in die Datei test.csv im JobRouter-Temp-Verzeichnis exportiert.