Ich habe weiter getestet und den Code vereinfacht, um mögliche Fehlerquellen auszuschließen.
Es ist schwierig das zu testen, da es ja nur mit einem Plugin nachgestellt werden kann, welches über den Store / Account aktualisiert wird, denn bei manuellen Updates klappt es.
Anbei der Code ein wenig vereinfacht. Per upsert-Befehl soll also ein Feld aktualisiert oder auch angelegt werden:
<?php declare(strict_types=1);
namespace foo\BarFoo;
use Shopware\Core\Content\Category\CategoryDefinition;
use Shopware\Storefront\Framework\ThemeInterface;
use Shopware\Core\Framework\Plugin;
use Shopware\Core\Framework\Plugin\Context\InstallContext;
use Shopware\Core\Framework\Plugin\Context\UpdateContext;
use Shopware\Core\Framework\Context;
class fooBarFoo extends Plugin implements ThemeInterface
{
public function getThemeConfigPath(): string
{
return 'theme.json';
}
public function install(InstallContext $installContext): void
{
parent::install($installContext);
}
public function update(UpdateContext $updateContext): void
{
parent::update($updateContext);
$this->setupCustomFields($updateContext->getContext());
}
public function setupCustomFields(Context $context): void
{
$customFieldSetRepository = $this->container->get('custom_field_set.repository');
$relationCategory = [
'id' => 'bc1f032c888911eb8dcd0242ac130003',
'entityName' => $this->container->get(CategoryDefinition::class)->getEntityName()
];
$customFields = [
[
'id' => 'bc1f0570888911eb8dcd0242ac130003',
'name' => 'foo_bar_field',
'type' => 'CustomFieldTypes::SELECT',
'config' => [
'customFieldPosition' => 10,
'componentName' => 'sw-single-select',
'label' => [
'en-GB' => 'Fooo',
'de-DE' => 'Fooo',
],
'options' => [
[
'value' => 'foo',
'label' => [
'en-GB' => 'Foo',
'de-DE' => 'Foo',
]
],
[
'value' => 'bar',
'label' => [
'en-GB' => 'Bar',
'de-DE' => 'Bar',
]
],
]
],
],
];
$customFieldSets = [
[
'id' => 'bc1f0714888911eb8dcd0242ac130003',
'name' => 'foo_bar_set',
'config' => [
'label' => [
'en-GB' => 'Foo',
'de-DE' => 'Foo',
]
],
'customFields' => $customFields,
'relations' => [$relationCategory]
],
];
$customFieldSetRepository->upsert($customFieldSets, $context);
}
}
Resultat: Das Custom Field erscheint nicht, bzw. wird nicht verändert
Erwartetes Resultat: Das Custom Field wird erstellt, wenn nicht vorhanden. Es wird aktualisiert, wenn vorhanden.
Das Problem kann nur reproduziert werden, wenn über die Administration das Update per „Aktualisieren“-Button angestoßen wird. Bei einem manuellen Update, durch Hochladen des Plugins per FTP oder Plugin Hochladen-Button, funktioniert es.
Wie kann das sein? Vor allem, warum funktioniert es auf einmal, wenn das selbe Update nur durch Zurückstellen der Plugin-Version über „Aktualisieren“ erneut durchgeführt wird?
Liegt der Fehler bei uns oder im Core?
Kann jemand was erkennen?
@Michael_Telgmann irgendeine Idee?