CustomFields setzen

$customer = $scope->getSalesChannelContext()->getCustomer();
$customer->setCustomFields(['feldname' => 'meinwert']);

Moin moin,
in einer Rule Extension rufe ich aus dem SalesContext den Customer auf und lese die CustomFields aus mittels getCustomFields. Die ermittelten Werte möchte ich nun bei Bedarf überschreiben.

Es gibt die Methode setCustomFields, welche allerdings die Daten nicht speichert. Wie kann ich die Daten speichern?

 

 

 

Mit setCustomFields änderst du ja nur die Variable im Frontend. Um Änderungen in der Datenbank vorzunehmen, musst du über die Repositories gehen:

$this->container->get('customer.repository')
    ->upsert([[
        'id' => $scope->getSalesChannelContext()->getCustomer()->getId(),
        'customFields' => ['feldname' => 'mein Wert']
    ]], $context);

(ungetestet)

ah, ok. Aber da kommt wieder das Problem das ich aus einer CustomRule nicht auf den Container zurückgreifen kann. Ein DI über die service.xml funktioniert leider auch nicht, da Eigenschaften nach dem __construct auf NULL zurück gesetzt werden. Aktuell bin ich da ein bisschen ratlos…

Das Repo direkt mitgeben funktioniert nicht?

 

Die Übergabe schon. Allerdings „verliert“ die Klasse nach dem __construct die Eigenschaften wieder.

Da gab es vor ein paar Tagen ein passendes Ticket zu Shopware Issuetracker

Status: Gathering Interest

Heißt auf Deutsch, die haben keinen Bock das umzusetzen wie bei 99% der Tickets.

Mir fällt jetzt aber auch nix ein wie man das lösen kann.