OCI Response Generator
Der OciConnectorResponseGenerator erzeugt aus dem Warenkorb eine OciFormData-Struktur, die im Storefront-Template als HTML-Formular gerendert wird und beim Transfer an die Hook-URL des Procurement-Systems gesendet wird.
buildForm()
public function buildForm(
Cart $cart,
OciSystemEntity $system,
ConnectorSession $session,
SalesChannelContext $context
): OciFormData
Ablauf:
- Für jede Warenkorbposition → passenden
LineItemContextResolversuchen - Für jedes OCI-Feld mit Target
LINE_ITEM: Wert über Fallback-Kette auflösen + Filter anwenden - Optional: Versandposition anhängen (wenn
attachShippingaktiv und Lieferungen vorhanden) OciResponseGenerationEventfeuern →OciFormDatakann noch modifiziert werden
OciFormData-Struktur
OciFormData
├── hookUrl (string) – Rückgabe-URL des Procurement-Systems
└── lineItems[] (list)
└── OciLineItemData
└── fields[]
└── OciFieldData
├── name (string) – z.B. "NEW_ITEM-DESCRIPTION[1]"
├── value (string) – aufgelöster Wert
└── type (OciFieldType: standard|long)
Feldname-Konvention
OCI-Feldnamen werden nach folgendem Schema gebildet:
Standard-Felder:
NEW_ITEM-{FELDNAME_UPPERCASE}[{INDEX}]
Long-Text-Felder (OciFieldType::LONG):
NEW_ITEM-{FELDNAME_UPPERCASE}[{INDEX}]:132[]
Der Suffix :132[] ist der OCI 5.0 Long-Text-Marker für Felder, die den Standard-Zeichenlimit überschreiten.
Beispiele:
NEW_ITEM-DESCRIPTION[1](Standard)NEW_ITEM-MATNR[1](Standard)NEW_ITEM-LONGTEXT[1]:132[](Long-Text)
Der Index ([1], [2], …) entspricht der Position des LineItems im Warenkorb.
Field-Targets
Jedes OCI-Feld hat einen konfigurierten Target:
| Target | Enum | Beschreibung |
|---|---|---|
line_item | OciFieldTarget::LINE_ITEM | Feld gehört zu einer Warenkorbposition |
shipping_item | OciFieldTarget::SHIPPING_ITEM | Feld für die Versandposition (nur wenn attachShipping aktiv) |
Die Versandposition wird als eigenständige OCI-Position ans Ende der LineItems angefügt.
Wert-Filter
Nach der Fallback-Auflösung können optionale Filter auf den Wert angewendet werden:
| Filter | Konfiguration | Beschreibung |
|---|---|---|
| Substring | substr.start, substr.end | Schneidet den String auf den definierten Bereich zu |
| Zahlenformat | number_format, decimals | Formatiert den Wert als Dezimalzahl mit definierten Nachkommastellen (Punkt als Trennzeichen, kein Tausender-Trennzeichen) |
| Dividieren | divine.value | Dividiert den numerischen Wert durch den angegebenen Divisor |
OciResponseGenerationEvent
Kurz vor der Rückgabe der OciFormData feuert der Generator:
| Event | Event-Name | Was kann geändert werden? |
|---|---|---|
OciResponseGenerationEvent | agiqon_connector.oci.response.generation | Komplette OciFormData (LineItems hinzufügen, ändern, entfernen) |
Beispiel:
use AgiqonConnector\Connector\System\OCI\Event\OciResponseGenerationEvent;
use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
#[AsEventListener(event: OciResponseGenerationEvent::EVENT_NAME)]
final class MyOciResponseListener
{
public function __invoke(OciResponseGenerationEvent $event): void
{
$formData = $event->getFormData();
// Eigene Logik: z.B. LineItems anpassen
// $event->setFormData($modifiedFormData);
}
}