Bei Plugin-Installation Artikel per API anlegen

Hallo,

ich versuche, bei der Installation eines Plugins einen (später mehrere) Artikel per API anzulegen. Mein bisheriger Code, der insoweit funktioniert, daß der Artikel angelegt wird, sich die Installation im Backend aber aufhängt und bei der Installation per bin/console der Fehler lautet:

Entity has to be managed or scheduled for removal for single computation Shopware\Models\Plugin\Plugin@3257

Der bisherige Code:

    public function install(InstallContext $context)
    {
            $test = \Shopware\Components\Api\Manager::getResource('Article');
            $params = array(
                'name' => 'MeinArtikelname',
                'active' => true,
                'tax' => '19',
                'supplier' => 'MeinHersteller',
                'categories' => [
                    'id' => 2169
                ],                        
                'mainDetail' => [
                    'number' => 'MeineNumber',
                    'active' => true,
                    'prices' => [
                        [
                        'customerGroupKey' => 'EK',
                        'price'=> 999.88
                        ]
                    ]                            
                ]
            )
            ;
            $test->create($params);
    }

In diesem Forumsbeitrag hat es mit der getResource()-Methode wohl noch funktioniert.

Ich konnte sehen, daß \Shopware\Components\Api\Manager::getResource(‚Article‘); nicht mehr verwendet werden soll (@deprecated with 5.6, will be removed with 5.8. Inject the resource instead). Somit würde ich gern den aktuellen Weg für Version 5.7.14 benutzen, weiß aber nur, daß dazu \Shopware\Components\Api\Resource\Article verwendet werden müsste. Wie kann ich denn diese in der install-Methode implementieren? Oder geht das nur über (das dekorieren eines) Service? Wie muss dieser dann aussehen?

Danke für eure Denkanstösse!

Ich habe in der Zwischenzeit selbst herausgefunden, wie ich den ArtikelService benutzen kann. Der Fehler lautet aber per bin/console weiterhin

Entity has to be managed or scheduled for removal for single computation Shopware\Models\Plugin\Plugin@3231

Nur die Zahl am Ende ist anders.

Der angepasste Code lautet jetzt:

    public function install(InstallContext $context)
    {

            $container = Shopware()->Container();
            $articleApi = $container->get('shopware.api.article');

            $params = array(
                'name' => 'MeinArtikelname',
                'active' => true,
                'tax' => '19',
                'supplier' => 'MeinHersteller',
                'categories' => [
                    'id' => 2169
                ],                        
                'mainDetail' => [
                    'number' => 'MeineNumber',
                    'active' => true,
                    'prices' => [
                        [
                        'customerGroupKey' => 'EK',
                        'price'=> 999.88
                        ]
                    ]                            
                ]
            )
            ;
            $articleApi->create($params);

    }

Da der Artikel angelegt wird gibt es wohl eher ein Problem bei der Install-Methode, vermute ich.
Aber welches?

Zusätzlich zu der Fehlermeldung gibt es den Hinweis auf die Zeile 546 in UnitOfWork.php in vendor/doctrine/orm/lib/Doctrine/ORM/. Dort steht

    private function computeSingleEntityChangeSet($entity): void
    {
        $state = $this->getEntityState($entity);

        if ($state !== self::STATE_MANAGED && $state !== self::STATE_REMOVED) {
            throw new InvalidArgumentException('Entity has to be managed or scheduled for removal for single computation ' . self::objToStr($entity));
        }
...

Der Status der Entity darf also NICHT STATE_MANAGED und NICHT *STATE_REMOVED" sein…?