Custom Entity im Backend mit Auslesen anderer Extension

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:

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

//(...) 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:

<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:

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

subscriber:

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

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?