Eine Position je Bestellnummer
Gerade bei SAP Projekten kann es erforderlich sen, je Bestellnummer eine Position erzeugen zu müssen. In diesem Fall kann der folgende UserExit genutzt werden, um nach der Extraktion des Beleges eine Position je gefundener Bestellnummer zu erzeugen.
Voraussetzungen dieses UserExits:
- Das Kopffeld für Bestellnummern heißt "OrderNumber"
Das Feld für die Positionen heiß"LineItems"- Es existiert eine Feld in der Positionstabelle mit dem Namen "
OrderNumber"PosOrderNumber" - Das Feld für die Positionen heiß "LineItems"
<?php
use Squeeze\xDoc;
use Squeeze\xDocumentField;
function AfterExtraction(xDoc $xDoc)
{
$logger = Logger::getLogger("main");
createLineItemsByHeadField($xDoc, $logger, "Kopffeld Bezeichnung"OrderNumber", "Zeilenfeld Bezeichnung"PosOrderNumber", "LineItems");
return true;
}
/**
* @param xDoc $xDoc
* @param Logger $logger
* @param string $originHeadField
* @param string $targetLineField
* @param string $lineItemName
*/
function createLineItemsByHeadField(xDoc $xDoc, Logger $logger, string $originHeadField, string $targetLineField, string $lineItemName){
$head = $xDoc->getDocumentFieldByName($originHeadField);
$lines = $xDoc->getDocumentFieldByName($lineItemName);
$head->alternatives = getUniqueAlternatives($head, $logger);
if (count($head->alternatives) > 1){
$head->getValue()->value = '';
$head->getValue()->text = '';
for ($i = 0; $i < count($head->alternatives); $i++)
{
$line = new Squeeze\xDocValue(0, "", "", "string", 100, 0, 99999, 99999, 0, 0);
$line->subfields[$targetLineField] = $head->alternatives[$i];
$line->subfields[$targetLineField]->subFieldName = $targetLineField;
$lines->alternatives[] = $line;
}
}
}
/**
* @param xDocumentField $field
* @param Logger $logger
* @return xDocumentField[]
*/
function getUniqueAlternatives($field, $logger){
// ==========================================================
// Only keep unique alternatives
// ==========================================================
$tmpStore = array();
$uniqueAlternatives = array();
$logger->debug('The field '. $field->name .' has ' . count($field->alternatives) . ' alternatives');
for ($i = 0; $i < count($field->alternatives); $i++)
{
$logger->debug('Alternative = ' . $field->alternatives[$i]->value);
if(!in_array ($field->alternatives[$i]->value, $tmpStore))
{
$logger->debug('Alternative will be kept ' . $field->alternatives[$i]->value);
$tmpStore[] = $field->alternatives[$i]->value;
$uniqueAlternatives[] = $field->alternatives[$i];
}
}
if(count($uniqueAlternatives) > 0)
{
$field->alternatives = $uniqueAlternatives;
}
return $field->alternatives;
}