# Custom Entity im Backend mit Auslesen anderer Extension

**URL:** <https://forum.shopware.com/t/custom-entity-im-backend-mit-auslesen-anderer-extension/91537>\
**Category:** Programmierung\
**Created:** [18. November 2021 um 10:54 UTC](https://forum.shopware.com/t/custom-entity-im-backend-mit-auslesen-anderer-extension/91537 "2021-11-18T10:54:30Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![RobC](https://avatars.discourse-cdn.com/v4/letter/r/e9a140/32.png) [@RobC](https://forum.shopware.com/u/RobC)\
**Post date:** [18. November 2021 um 10:54 UTC](https://forum.shopware.com/t/custom-entity-im-backend-mit-auslesen-anderer-extension/91537/1 "2021-11-18T10:54:30Z")

</div>

EDIT:

Nachdem ich Stunden damit verbracht habe, eine Lösung zu finden, kam ich Minuten nach meinem Post hier, selbst auf die Lösung. (Rubberduck-Debugging lässt grüßen)

Natürlich muss man in der main.js die Extension, auf die ich mich im Subscriber beziehe, mit einbinden:

```auto
Component.override('sw-product-list', {
    computed: {
        productCriteria() {
            const criteria = this.$super('productCriteria');
            criteria.getAssociation('DIEANDEREEXTENSION');
            return criteria;
        },
        productColumns() { (...)

```

* * *

Hallo zusammen!

Ich habe eine neue benutzerdefinierte Produkt-Entität (Nicht-DB) erstellt, die eine Eigenschaft einer **anderen** Erweiterung für ein Produkt überprüft.

CustomExtension.php

```auto
//(...) namespace unduses...

class CustomExtension extends EntityExtension
{
    public function extendFields(FieldCollection $collection): void
    {
        $collection->add(
            (new StringField('newcustom', 'newcustom'))->addFlags(new Runtime())
        );
    }

    public function getDefinitionClass(): string
    {
        return ProductDefinition::class;
    }
}

```

services.xml:

```auto
<service id="XMPL\MYEXTENSIONNAME\Extension\Content\Product\CustomExtension">
	<tag name="shopware.entity.extension"/>
</service>

<service id="XMPL\MYEXTENSIONNAME\Subscriber\ProductSubscriber">
	<tag name="kernel.event_subscriber"/>
</service>

```

struct:

```auto
class myStruct extends Struct
{
    public $boolcheck1 = false;
    public $boolcheck2 = false;
}

```

subscriber:

```auto
class ProductSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents(): array
    {
        return [
            ProductEvents::PRODUCT_LOADED_EVENT => 'onProductsLoaded'
        ];
    }

    public function onProductsLoaded(EntityLoadedEvent $event): void
    {
        /** @var ProductEntity $productEntity */
        foreach ($event->getEntities() as $productEntity) {

            $myStruc = new myStruct();
            $boolcheck1 = false;
            $boolcheck2 = false;

			// die andere Extension checken
			$otherExtension = $productEntity->getExtension('otherExtension');
            if( $otherExtension->property1 === true (UND EIN PAAR WEITERE ÜBDRPRÜFUNGEN) )	{
				$boolcheck1 = true;
			}
			if( $otherExtension->property2 === true (UND EIN PAAR WEITERE ÜBDRPRÜFUNGEN) )	{
				$boolcheck2 = true;
			}

            $myStruc->boolcheck1 = $boolcheck1;
            $myStruc->boolcheck2 = $boolcheck1;
            $productEntity->addExtension('newcustom', $myStruc );
        }

    }
}

```

Wenn ich das Produkt im Frontend per dump() ausgebe (z.B. auf einer Produktdetailseite), sehe ich die richtigen Felder mit dem richtigen Wert. Alles ist soweit in Ordnung.

Nun möchte ich dieses Feld als Wert in einer zusätzlichen Spalte in der Produktliste im Backend ausgeben.

main.js

```auto
const { Component } = Shopware;

Component.override('sw-product-list', {
    computed: {
        productColumns() {
            const columns = this.$super('productColumns');

            
            columns.push({
                property: 'extensions.newcustom.boolcheck1',
                dataIndex: 'boolcheck1',
                label: 'Boolcheck1',
                inlineEdit: 'string',
                allowResize: true,
                align: 'left'
            });
            return columns;
        }
    }
});

```

Beim Öffnen der Produktliste im Backend liefert der Ajax-Request für die Produktliste einen 500er-Fehler mit der Meldung „Notice: Trying to get property ‚boolcheck1‘ of non-object“ (zeigt auf den Subscriber), als ob die Erweiterung oder die Association, die ich auslesen möchte, noch gar nicht geladen ist.

Wo liegt mein Denkfehler? Geht mein Vorhaben überhaupt?
