Skip to main content

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"
<?php

use Squeeze\xDoc;
use Squeeze\xDocumentField;

function AfterExtraction(xDoc $xDoc)
{

    $logger = Logger::getLogger("main");
    createLineItemsByHeaderOrderNumber($xDoc, $logger);

    return true;
}

/**
 * @param xDoc $xDoc
 * @param Logger $logger
 */
function createLineItemsByHeaderOrderNumber(xDoc $xDoc, Logger $logger){

    $order = $xDoc->getDocumentFieldByName("OrderNumber");
    $lines = $xDoc->getDocumentFieldByName("LineItems");

    $order->alternatives = getUniqueAlternatives($order, $logger);
    if (count($order->alternatives) > 1){
        $order->getValue()->value = '';
        $order->getValue()->text = '';
        for ($i = 0; $i < count($order->alternatives); $i++)
        {
            $line = new Squeeze\xDocValue(0, "", "", "string", 100, 0, 99999, 99999, 0, 0);
            $line->subfields['OrderNumber'] = $order->alternatives[$i];
            $line->subfields['OrderNumber']->subFieldName = 'OrderNumber';
            $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;
}