Ü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 einenDataFieldResolutionContextund gibt einenstringodernullzurü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-Wert | Enum-Fall | Beschreibung |
|---|---|---|
context | DataFieldType::Context | Allgemeine Kontextdaten des Sales-Channel (Sprache, Währung u.a.) |
line_item | DataFieldType::LineItem | Daten einer Warenkorbposition (Menge, Referenz, Preis) |
product | DataFieldType::Product | Produktdaten aus dem Shopware-Katalog (Artikelnummer, Name, EAN, …) |
shipping | DataFieldType::Shipping | Versanddaten (Versandmethode) |
session | DataFieldType::Session | Daten der aktuellen Connector-Session |
system | DataFieldType::System | Daten des konfigurierten Connector-Systems |
customized_product | DataFieldType::CustomizedProduct | Daten 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:
| Getter | Typ | Immer vorhanden? | Beschreibung |
|---|---|---|---|
getSalesChannelContext() | SalesChannelContext | ✅ ja | Sales-Channel-Kontext |
getProduct() | ProductEntity|null | Nur bei Product-Feldern | Das aufgelöste Produkt |
getLineItem() | LineItem|null | Nur bei LineItem-Feldern | Die Warenkorbposition |
getShippingMethod() | ShippingMethodEntity|null | Nur bei Shipping-Feldern | Die Versandmethode |
getCart() | Cart|null | Optional | Der aktuelle Warenkorb |
getSession() | ConnectorSession|null | Optional | Die Connector-Session |
getSystem() | ConnectorSystemEntity|null | Optional | Das Connector-System |
getCustomFieldKey() | string|null | Nur bei Custom-Field-Feldern | Der 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.