# Custom Products und LineItem Payload - wie Werte ändern?

**URL:** <https://forum.shopware.com/t/custom-products-und-lineitem-payload-wie-werte-aendern/97226>\
**Category:** Shopware 6 (German)\
**Created:** [22. November 2022 um 16:19 UTC](https://forum.shopware.com/t/custom-products-und-lineitem-payload-wie-werte-aendern/97226 "2022-11-22T16:19:42Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Max\_Shop](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@Max\_Shop](https://forum.shopware.com/u/Max_Shop)\
**Post date:** [22. November 2022 um 16:19 UTC](https://forum.shopware.com/t/custom-products-und-lineitem-payload-wie-werte-aendern/97226/1 "2022-11-22T16:19:43Z")

</div>

Ich hatte eben das Vergnügen mich mit der Kombination Custom Products und LineItem Payload herumzuschlagen.

Anscheinend ist es nicht möglich per setPayloadValue() den Wert der LineItem Payloads zu ändern, da Custom Products, zur Wahrung der Integrität, stets das Payload anhand des Templates lädt und nicht des LineItems.

Hat jemand Erfahrung hierzu und konnte das Problem lösen?

---

<div class="post-metadata">

**Author:** ![abdullah](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@abdullah](https://forum.shopware.com/u/abdullah)\
**Post date:** [22. November 2022 um 22:15 UTC](https://forum.shopware.com/t/custom-products-und-lineitem-payload-wie-werte-aendern/97226/2 "2022-11-22T22:15:00Z")

</div>

Normalerweise sollte genau mit `setPayloadValue` der Paylod Wert eines LineItems gesetzt und somit auch geändert werden können.

Ich kenne jetzt den Code des Custom Products Plugins nicht, eventuell wird der Payload im `CartProcessor` gesetzt und somit auch mehrmals gesetzt, so dass deine Änderungen eventuell überschrieben werden?

Was ist mit „stets das Payload anhand des Templates lädt und nicht des LineItems“ gemeint?

An welcher Stelle versuchst du den Payload Wert zu ändern?

---

<div class="post-metadata">

**Author:** ![Max\_Shop](https://avatars.discourse-cdn.com/v4/letter/m/58f4c7/32.png) [@Max\_Shop](https://forum.shopware.com/u/Max_Shop)\
**Post date:** [23. November 2022 um 08:19 UTC](https://forum.shopware.com/t/custom-products-und-lineitem-payload-wie-werte-aendern/97226/3 "2022-11-23T08:19:19Z")

</div>

Der ProductLineItemProviderDecorator mit

```auto
 public function getProducts(Cart $cart): LineItemCollection
    {
        $collection = $this->decorated->getProducts($cart);

        $customProductsCollection = $cart->getLineItems()->filterType(CustomizedProductsCartDataCollector::CUSTOMIZED_PRODUCTS_TEMPLATE_LINE_ITEM_TYPE);

        foreach ($customProductsCollection as $item) {
            $existingItems = $collection->filter(static function (LineItem $lineItem) use ($item) {
                return $lineItem->getId() === $item->getId();
            });

            if (\count($existingItems->getElements()) > 0) {
                continue;
            }

            $collection->add($item);
        }

        return $collection;
    }

```

ist glaube ich mein Problem. Wenn ich das recht verstehe, wird hier das Template geladen.

Ich habe per CartProcessorInterface versucht mittels setPayloadValue die Werte zu setzen. Habe es kurz per Log debugged, mein Code wurde ausgeführt und später auch nicht durch einen anderen setPayloadValue überschrieben. Sprich, das komplette LineItem wurde vermutlich ausgetauscht.

---

<div class="post-metadata">

**Author:** ![abdullah](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@abdullah](https://forum.shopware.com/u/abdullah)\
**Post date:** [23. November 2022 um 08:48 UTC](https://forum.shopware.com/t/custom-products-und-lineitem-payload-wie-werte-aendern/97226/4 "2022-11-23T08:48:49Z")

</div>

In der oben genannten Methode werden die Produkt-LineItems um die CustomProduct LineItems, LineItems vom Type `Customized_Product_Template_Line_Item_Type`, erweitert.

Die Payloads der CustomProduct LineItems werden wahrscheinlich, falls vorhanden, über ein (CustomaProducts)LineItemFactory gesetzt.  
Wenn die LineItems neu erzeugt statt aktualisiert werden, wie du es meinst, dann geht deine Änderung verloren.

Hast du Mal in deren CartProcessor nachgeguckt, was da gemacht wird?

Falls die im CartProcessor das LineItem neu erzeugen, könntest du versuchen die Priorität deines CartProcessors ändern, so dass dein CartProcessor später ausgeführt wird?
