Zum Hauptinhalt springen

Übersicht

Was ist ein DataField?

Ein DataField ist ein auflösbares Feld, das einen einzelnen Datenwert für die Übertragung an ein Procurement-System liefert (z.B. Artikelnummer, Preis, Menge). Jedes DataField hat:

  • einen technischen Namen (technicalName) – über diesen wird es in der Connector-Konfiguration zugeordnet,
  • eine Liste verfügbarer Systeme (availableSystems) – legt fest für welche Systemtypen (OCI, cXML) das Feld auswählbar ist,
  • eine resolve()-Methode – sie erhält einen DataFieldResolutionContext und gibt einen string oder null zurück.

Alle DataFields erben von AbstractDataField:

abstract readonly class AbstractDataField
{
public function __construct(
private string $technicalName,
private array $availableSystems = []
) {}

abstract public function resolve(DataFieldResolutionContext $context): ?string;
}

DataField-Typen

Jedes DataField gehört zu einem Typ. Der Typ bestimmt aus welchem Kontext das Feld seinen Wert bezieht und wird über das PHP-Attribute #[DataFieldTypeAttribute(...)] am Field gesetzt.

Der Connector bringt folgende Built-in-Typen mit:

Typ-WertEnum-FallBeschreibung
contextDataFieldType::ContextAllgemeine Kontextdaten des Sales-Channel (Sprache, Währung u.a.)
line_itemDataFieldType::LineItemDaten einer Warenkorbposition (Menge, Referenz, Preis)
productDataFieldType::ProductProduktdaten aus dem Shopware-Katalog (Artikelnummer, Name, EAN, …)
shippingDataFieldType::ShippingVersanddaten (Versandmethode)
sessionDataFieldType::SessionDaten der aktuellen Connector-Session
systemDataFieldType::SystemDaten des konfigurierten Connector-Systems
customized_productDataFieldType::CustomizedProductDaten für konfigurierbare Produkte (Shopware Customized Products)

Eigene Typen können ergänzt werden – siehe Custom DataField-Typ anlegen.


DataFieldResolutionContext

Beim Auflösen eines DataFields wird ein DataFieldResolutionContext übergeben. Er enthält alle Daten, die für die Wertermittlung benötigt werden könnten:

GetterTypImmer vorhanden?Beschreibung
getSalesChannelContext()SalesChannelContext✅ jaSales-Channel-Kontext
getProduct()ProductEntity|nullNur bei Product-FeldernDas aufgelöste Produkt
getLineItem()LineItem|nullNur bei LineItem-FeldernDie Warenkorbposition
getShippingMethod()ShippingMethodEntity|nullNur bei Shipping-FeldernDie Versandmethode
getCart()Cart|nullOptionalDer aktuelle Warenkorb
getSession()ConnectorSession|nullOptionalDie Connector-Session
getSystem()ConnectorSystemEntity|nullOptionalDas Connector-System
getCustomFieldKey()string|nullNur bei Custom-Field-FeldernDer Key des Shopware Custom Fields

Welche Felder befüllt sind, hängt vom Kontext der Transmission ab. Ein DataField sollte immer auf null prüfen, bevor es auf optionale Felder zugreift.