Erweiterung Shopware Commercial

Hallo,

nach dem Update auf Shopware 6.6.10.4. habe ich mit der Erweiterung „Shopware Commercial“ Probleme.

Sie läßt sich nicht mehr aktivieren. Im Backend passiert nach einem Aktivierungsversuch gar nix, sie bleibt einfach deaktiviert. Auf der Konsole kommt folgende Fehlermeldung:

[Symfony\Component\ErrorHandler\Error\FatalError]
  Compile Error: Access level to Shopware\Commercial\AdvancedSearch\Elasticsearch\AdvancedSearchTokenFilter::DEFAULT_MIN_SEARCH_TERM_LENGTH must be public (as in class Shopware\Core\Framework\DataAbstr
  actionLayer\Search\Term\Filter\AbstractTokenFilter)

Wozu wird das Plugin eigentlich benötigt? In der Doku steht, dass es für die Shopware Pläne gebraucht wird: Shopware 6 - Erweiterungen - Shopware Commercial

Der Shop hat aktuell noch eine Silver Subscription. Beispielsweise das Feature „Custom Products“ läuft, obwohl das Plugin deaktiviert ist.

Was mich auch wundert: das Plugin ist derzeit als Version 6.6.2 installiert. Scheinbar gibt es bereits eine Version 6.10.0, die aber nicht zum Update angeboten wird.

Heute wird mir plötzlich ein Update auf Version 6.10.4 angeboten. Wenn ich dieses installieren will, kommt folgende Fehlermeldung:

An exception occurred while executing a query: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'db_staging.subscription_address' doesn't exist

Die Tabelle existiert nicht in der Datenbank. Eventuell wurde sie in einer früheren Plugin-Version angelegt?

Hat jemand einen Hinweis, wie man da weiterkommen kann?

Dann wende dich doch bitte an den Shopware Support. Dieser hilft dir sicherlich bei der Lösung der Probleme.

Zum SQL-Fehler. Der sollte eigentlich nicht auftreten, auch wenn man Versionen überspringt. Was natürlich sein kann, dass es entweder ein neue Bug ist oder irgendwann früher eine Migration bei dir nicht durchgelaufen ist.

Unter subscription_address finde ich in GitHub jedoch nichts. Sicher, dass es Shopware ist und nicht ein Plugin?

An den Shopware Support habe ich bereits geschrieben. Mal sehen, wie lange es dauert, bis da eine Antwort kommt. :face_with_peeking_eye:

Es ist ein Plugin von Shopware: „Shopware Commercial“

Allerdings habe ich, trotzt der Doku, noch nicht verstanden, wozu es konkret gebraucht wird. Wie gesagt, der Shop hat eine Silver Subscription. Hat eigentlichn nichts mit Plänen zu tun.

Die Frage ist, ob ich irgendwo Funktionalität verliere, wenn ich es deaktiviert lasse?

Ich glaube, es ermöglicht Verkaufskanäle zu Facebook, Google Merchant, usw. Ob da noch mehr Funktionalität dahinter steckt, weiß ich nicht.

Dann im Plugin nach subscription_address per grep oder ähnlichem suchen. Dann solltest du die früheren Migrations auch sehen und dadurch feststellen können, ob da eine nicht korrekt ausgeführt wurde.

Für das Thema mit den zusätzlichen Verkaufskanälen stellt Shopware die Erweiterung „Social Shopping“ zur Verfügung. Ist übrigens auch installiert aber macht keine Probleme. Das wird hier genutzt, um Produktfeeds für Google zu erstellen.

Wozu „Shopware Commercial“ gebraucht wird, ist immer noch unklar.

Spannend ist folgender Umstand: In der Datenbank des Live-Systems (Version 6.6.6.1) gibt es die Tabelle subscription_address. Im aktualisierten Staging-System (6.6.10.4) ist die Tabelle nicht mehr in der Datenbank vorhanden. Deswegen funktioniert das Update des Plugins wahrscheinlich nicht und wirft die Fehlermeldung:

An exception occurred while executing a query: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'db_staging.subscription_address' doesn't exist

Wie geht man damit um, bzw. was kann man machen?

Da habe ich mich wohl beim Pluginname verlesen :laughing:

Schauen, was die Migration macht und ggf. die ursprüngliche Migration (Erstellung der Tabelle) noch einmal ausführen.

meinst Du den SQL Aufruf aus dem Migrationsskript rauskopieren und in phpMyAdmin ausführen?

private function createSubscriptionAddressTable(Connection $connection): void
    {
        $connection->executeStatement('
            CREATE TABLE IF NOT EXISTS `subscription_address` (
              `id`                          BINARY(16)      NOT NULL,
              `country_id`                  BINARY(16)      NOT NULL,
              `country_state_id`            BINARY(16)      NULL,
              `salutation_id`               BINARY(16)      NULL,
              `subscription_id`             BINARY(16)      NOT NULL,
              `first_name`                  VARCHAR(50)     NOT NULL,
              `last_name`                   VARCHAR(60)     NOT NULL,
              `street`                      VARCHAR(255)    NOT NULL,
              `zipcode`                     VARCHAR(50)     NOT NULL,
              `city`                        VARCHAR(70)     NOT NULL,
              `company`                     VARCHAR(255)    NULL,
              `department`                  VARCHAR(35)     NULL,
              `title`                       VARCHAR(100)    NULL,
              `vat_id`                      VARCHAR(50)     NULL,
              `phone_number`                VARCHAR(40)     NULL,
              `additional_address_line1`    VARCHAR(255)    NULL,
              `additional_address_line2`    VARCHAR(255)    NULL,
              `custom_fields`               JSON            NULL,
              `created_at`                  DATETIME(3)     NOT NULL,
              `updated_at`                  DATETIME(3)     NULL,
              PRIMARY KEY (`id`),
              CONSTRAINT `json.subscription_address.custom_fields` CHECK (JSON_VALID(`custom_fields`)),
              CONSTRAINT `fk.subscription_address.subscription_id` FOREIGN KEY (`subscription_id`)
                REFERENCES `subscription` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
              CONSTRAINT `fk.subscription_address.country_id` FOREIGN KEY (`country_id`)
                REFERENCES `country` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE,
              CONSTRAINT `fk.subscription_address.country_state_id` FOREIGN KEY (`country_state_id`)
                REFERENCES `country_state` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
              CONSTRAINT `fk.subscription_address.salutation_id` FOREIGN KEY (`salutation_id`)
                REFERENCES `salutation` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
        ');
    }

Genau, die würde ich dann einfach noch einmal ausführen. Dann schlägt die nachfolgende Migration auch nicht mehr fehl.

Die Frage der Fragen nun: wieso wurde die Tabelle gelöscht?

Ich hatte ein Staging-System, aus dem Backup des Live-Systems, gebaut.

Da waren es 383 Tabellen, inklusive der subscription_address.

Nach dem Update von Version 6.6.6.1 zu 6.6.10.4 sind es nur noch 356 Tabellen und die subscription_address fehlt?

Es sind übrigens eine ganze Reihe von Tabellen, die mit subscription_xxx beginnen. Die sind alle nach dem Update weg.

Mal schauen, ob der Support dazu etwas Sinnvolles beisteuern kann???

Der Shopware Support hat bin/console system:update:finish empfohlen, was nichts gebracht hat. Die Tabellen fehlten weiterhin.

Da es vorerst ja nur ein Staging System ist, habe ich das Ganze einfach nochmal neu gemacht. Diesmal habe ich aber nicht auf Shopware 6.6.10.4, sondern auf Shopware 6.6.10.3 aktualisiert. Es wurden alle Tabellen migriert und die Erweiterung „Shopware Commercial“ lässt sich wieder aktivieren.

Vielleicht war die Version 6.6.10.4 „zu neu“. Wurde ja vorgestern erst veröffentlicht :thinking:.