Seit 6.7.15 existiert der neue Flow-Trigger Dokument-Erzeugung-Abgeschlossen.
Ich verwende diesen, da ich damit den Mail-Versand des Dokuments automatisieren möchte.
Dies funktioniert auch grundsätzlich. Jedoch ist dabei im Objekt der SalesChannel NULL, wodurch der SalesChannel Name oder auch der Header und Footer der Mail nicht geladen werden kann.
Hier der Fehler: { "source": "core", "environment": "dev", "additionalData": { "message": "Could not render Mail-SenderName with error message: Failed rendering string template using Twig: Impossible to access an attribute ("name") on a null variable in "72d8769ea77caa606f46f95626407b3f" at line 1.", "template": "{{ salesChannel.name }}", "eventName": "document.generation.completed", "exception": "Shopware\Core\Framework\Adapter\AdapterException: Failed rendering string template using Twig: Impossible to access an attribute ("name") on a null variable in "72d8769ea77caa606f46f95626407b3f" at line 1
Hatte dies schon mal jemand?
Ich denke ja, dass dies ein Bug ist?
ich habe es bei mir auch mal angeschaut in einer entsprechenden Umgebung - es ist ein Bug korrekt.
Am besten mal melden - du könntest dir falls nötig, in der Zwischenzeit mit einem kleinen Plugin helfen / Subscriber der auf die FlowSendMailActionEvents schaut und dort den Saleschannel setzt.
b.david hat recht, das ist ein Bug. Die Ursache steht im Code, das hilft vielleicht beim Melden:
Das neue Event (DocumentGeneratedEvent, Trigger document.generation.completed) gibt bei getSalesChannelId() fest null zurück. Der Flow übernimmt diesen Wert für die Mail und greift nicht auf den Verkaufskanal der Bestellung zurück, obwohl er sie geladen hat. So steht es in 6.7.15.1 und auch im aktuellen Entwicklungsstand. Ein Issue dazu habe ich auf GitHub nicht gefunden. Gemeldet wird unter Issues · shopware/shopware · GitHub mit der Vorlage „Bug report“.
Bis zur Korrektur geht es ohne Programmierung, solange alle Mails gleich aussehen dürfen:
Absendernamen fest eintragen. Im E-Mail-Template, das der Flow verschickt, steht im Feld „Absender“ {{ salesChannel.name }}. Dort den Shopnamen als Text eintragen.
Kopf- und Fußzeile ins Template kopieren. Shopware hängt sie nur an, wenn die Mail einen Verkaufskanal kennt. Den HTML-Inhalt aus Einstellungen → E-Mail-Templates, Reiter „Kopf- und Fußzeilen“, deshalb direkt an Anfang und Ende dieses einen Templates setzen. Kommt darin ebenfalls salesChannel vor, durch festen Text ersetzen.
Die übrigen Variablen prüfen.order ist verfügbar, salesChannel nicht. Das Standard-Template für Rechnungen nutzt salesChannel zum Beispiel für die Links zu den barrierefreien HTML-Dokumenten (salesChannel.domains|first.url). Falls du die aktiviert hast, gehört dort die Shop-Adresse als Text hin.
Absenderadresse kontrollieren. Ohne Verkaufskanal nimmt Shopware die Adresse aus den globalen Grundeinstellungen. Eine abweichende Adresse, die nur für einen Verkaufskanal hinterlegt ist, greift hier nicht.
Entstehen die Dokumente ohnehin automatisch, etwa bei einem Statuswechsel der Bestellung, gibt es noch den bisherigen Weg: im Flow zu diesem Bestell-Trigger erst „Dokumente erzeugen“, danach „E-Mail senden“ mit dem Dokumenttyp unter „Anhänge“. Dort kennt die Mail den Verkaufskanal der Bestellung.
Bei mehreren Verkaufskanälen mit eigenem Absender oder eigener Fußzeile bleibt nur der Subscriber, den b.david beschreibt: Er setzt im FlowSendMailActionEvent die salesChannelId der Bestellung, dann funktioniert auch das Template unverändert.