Quality Guidelines for Apps based on our extension system in the Shopware Store

Changelog

08/06/21: SW6: Added URL and infos rearding our docker envirnoment we use for testing SW6 apps.
07/06/21: Template Tests: Now using Scheme.org Structured Data Testing Tool. instead of Google Structered Testing Tool.
07/06/21: Account app description: Subprocesseor and/or Further subprocessors informations maybe required four your app.
17/04/21: Restructure of the quality guidelines. No new content added.
12/05/20: Add app Checklist for your Quality assurance.
22/04/20: SW6: Menu entries in the main menu of the administration are not allowed anymore because of Look & Feel.

Checklist for app-testing

Please note that this checklist may be edited at any time. Be sure you are using the most recent testing checklist from Shopware, and not from any other provider. We also ask that you pay attention to every single point in the Quality Guide for apps based on the extension system these will be reviewed by us in order to release your app.

The way we test apps based on the extension system

It's always a good idea to review the process of how we conduct tests prior to submitting your app for review - this ensures the quickest way for your app to be published.

Start Testing: If successfull we test the app once again with the most current Shopware version. The Shopware installation is located in a subfolder and has a language subshop with a virtual URL as well as an independent subsshop with its own URL, which is also located in a subfolder. E.g. myshop.com/subfolder/backend oder myshop.com/pulic/admin.
The app must not produce any error messages - neither in the backend nor in the frontend.

SW6: The app is tested with the latest official Shopware 6 CE Version.
Our testing environment are built of following components: Nginx Webserver, PHP 7.4 as FPM, MariaDB latest, Shopware installed in Subfolder /shop/public, Default Shopware Language Netherland.
The environment is built using Docker and is published on Git Hub. You can use the following command to run it on your system:


docker run --rm -p 80:80 -e VIRTUAL_HOST=localhost ghcr.io/shopwarelabs/testenv:6.x.x

The shop will be accessible at http://localhost/shop/public
Admin-User and Admin-Password: demo

Note: We always test with the actual SW6 version. So set 6.4.3. in docker run --rm -p 80:80 -e VIRTUAL_HOST=localhost ghcr.io/shopwarelabs/testenv:6.4.3 always to the actual SW6 version. E.g. shopware/testenv:6.4.3.
When start testing we always test with the app`s highest supported shopware version.

SW5: The app is tested with PHP 7.2, Shopware 5.6.2 CE Version (including the activated and current versions of the Cookie Consent Tool for Shopware > 5.2.11), the Shopware security app and with the current Shopware version without the security app.

Every app based on the extension system

  1. If using external fonts (e.g. from Google Fonts) or external services, the app store description must contain this information, and please be aware that you might have to edit your "data protection information". This info could be otherwise placed as a tooltip near to the font settings of the app configuration.
  2. App store description: Mandatory number of characters set in short and long description. No blank spaces as filler are allowed (EN/DE).
  3. App store description: Does the description makes sense, and does it include step-by-step instructions on how to use and test your app?
  4. App store description: Did you include enough screenshots showing the app in action in the storefront AND administration (please add a screenshot of the app in the Extension manager settings).
  5. We pay attention to the automatic code review and look for security issues.
  6. Cookie check in the browser console: If the app sets cookies in any way in the checkout, these cookies must be registered to the cookie configuration box in the frontend.
  7. Every external link in the adminstration or storefront must be marked as rel="noopener" AND target="_blank".
  8. We check for styling errors on every viewport.
  9. We check the complete functionality of the app (including deinstallation & reinstallation procedure)
  10. We want to improve the quality in the Shopware Community Store and offer as many different apps as possible.We check for a functional comparison with other apps already present in the Shopware Community Store: If there is an app with exactly the same function, the app can be rejected if your app does not provide any added value, such as a function that the other apps does not contain. For further information write an Email to ecosystem@shopware.com.

App Descriptions in your Shopware Account

  • The app short description must have at least 150 characters.
  • The app description must contain at least 200 characters and should clearly represent the app functions in detail.
  • Include several screenshots from the frontend and backend. They must show the app "in action" and show its configuration options and how to use the app.
  • Be sure that the app is assigned to the appropriate categories.
  • If you provide a demo shop, the link must be valid (the URL cannot contain http: or https:).
  • The description must be a 1:1 translation.
  • App store description: If necessary, personal data protection information had to be set. If personal data of the customers (store operator and/or his customers) are processed with this extension according to Art. 28 DSGVO, the following information of the data processing company must be stored in the field "Subprocessor". If other companies are involved in the data processing of the personal data, the same information must be stored accordingly for them in the field "Further subprocessors".
  • Your manufacturer profile must contain accurate English and German descriptions as well as a manufacturer logo.

Note: iframes, external scripts or tracking pixels are not allowed in the source code of the descriptions, profiles, and instructions. Custom styles may not overwrite the original Shopware styles. External sources must be included via https.

Short description: Min. 150 - max. 185 characters.

  • Tip: Use the short description wisely as the text will be used to tease your app in the overview along with the "Customers also bought" and "Customers also viewed" recommendations. The short description is also published as the meta-description. This description should be a minimum of 155 characters long and unique.

Description: Min. 200 characters.

Inline styles will be stripped.The following HTML tags are allowed:


<a> <p> <br> <b> <strong> <i> <ul> <ol> <li> <h2> <h3> <h4> <h5>
  • Tip: When it comes to increasing your app sales, it's important that potential customers feel completely informed about your products and services. To this end, you should provide a description that is meaningful, detailed and easy to understand - when possible, even make it understandable for people with very little technical knowledge. Explain step by step how your app works and how to use it to achieve the desired result. Of course, your app description should be accompanied by clean HTML source code.
  • Tip: Video content increases awareness, trust, and has proven to convert potential customers better than other content types. Help your customers better understand your app or service with explainer videos, product demos, tutorials, etc. You can embed max. 2 YouTube videos in your app description.

In addition, you should include descriptive images that represent the app functionality. Show the app "in action" in both the frontend and backend.

Note: You are no longer able to advertise your Shopware certificates within the app description, in your app images, or in your manufacturer profile. The manufacturer/partner certificates are dynamically loaded at the end of each app description and published by us.

As an app is to be released in both stores (German and International), the content must be accurately translated 1:1 from/to German/English.​​​

A complete manufacturer profile in German and English is mandatory. The English or German text must be translated 1:1. You can find the manufacturer profile in your account under Shopware Account > Extension Administration > Manufacturer profile.

Template tests

  • Tests with Scheme.org's Structured Data Testing Tool: We test categories and product pages (available products, unavailable products, available products plus reviews, and products to be released in future). Testing tools: Schema Markup Validator of schema.org and Google Lighthouse

Theme apps

  1. There must be a preview image available in the Theme Manager.
  2. Links must include a title-tag and images must have an alt-tag.
  3. Use Google's Structured Data Testing Tool to check the homepage, categories, and various product detail pages (incl. products with no review, 1 review, 9 reviews with various ratings, out of stock products, or any other kind of product configuration). We check for any new bugs.
  4. We do a Lighthouse Audit to check the performance and quality of your frontend app. There should not be any drastic change in performance or accessibility values when activating the app.
  5. The price and shopping cart button may not be covered by customizations as for example "badges". Furthermore, the shopping cart button must always be clickable. 

Shopping Worlds/Storytelling elements

  1. Links must include a title-tag and images must have an alt-tag.
  2. We test the frontend and the checkout with the Debug Console – we also pay attention to new JavaScript errors.
  3. Use Google's Structured Data Testing Tool to check the homepage, categories, and various product detail pages (incl. products with no review, 1 review, 9 reviews with various ratings, out of stock products, or any other kind of product configuration). We check for any new bugs.
  4. We do a Lighthouse Audit to check the performance and quality of your frontend app. There should not be any drastic change in performance or accessibility values when activating the app.

Frontend apps

  1. Links must include a title-tag and images must have an alt-tag.
  2. If you create custom controller URLs in the sales channel, please note that we check for SEO and a valid canonical-tag.
  3. Use Google's Structured Data Testing Tool to check the homepage, categories, and various product detail pages (incl. products with no review, 1 review, 9 reviews with various ratings, out of stock products, or any other kind of product configuration). We check for any new bugs.
  4. We check for new errors throughout the entire storefront using the Browser Debug Console. We also pay attention to new JavaScript errors.
  5. We do a Lighthouse Audit to check the performance and quality of your frontend app. There should not be any drastic change in performance or accessibility values when activating the app.

Backend apps

  1. We check the complete functionality of the app and test wherever the administration is impacted by the app.

API/Payment apps

  1. We check for an API test button. Apart from that, you can validate the required credentials while saving them in the app settings. In this case, a status message must be displayed in the backend and Shopware log.
  2. The functionality of an app will be tested together with the app developer in a live session!

Quality Guidelines for Shopware 6 Apps based on the extension System

Extension master data / license

Please enter the valid license you set in your shopware account. You have to identify this license in the composer.json as well.

Note: The choosen license can not be changed after adding your app to your account. If you want to change the licence afterwards, you have to add a new apps based on the extension system (with a new technical name) and upload the extension again with the new technical name.

App dependencies

If your app requires other apps to run properly, you have to check that these apps are installed. For example: If your app only works with an activated base app, you have to check the installation of the base app.

Info:Requiring apps

Fallback language

The installation is not always in English or German.So make sure that your app works in other languages as well.
An example: The customer has his installation in Spanish, your app is not yet available in this language.
So you should use the English translation as fallback. Our Test-Environment includes Netherland as Standard language.

Translations

If your app is available in more than one language (e.g. English and German), these can be defined using the option "Translations into the following languages are available" (located in the “Description & images” section of your Extension management). The translations / text snippets must be maintained in the json files.

Valid app favicon for the Shopware Administration

You have to upload a valid favicon named plugin.png (png / 40 x 40 px) for the app. This favicon will make it easier to identify your app in the Extension Manager module in the backend. The favicon has to be stored under src/Resources/config/

Error messages must be entered in the event log

Error/informational messages can only be recorded in the event-log of Shopware's log folder ( /var/log/ ). You have to develop you own logging-service / app-specific logger. Never write app exceptions into the Shopware-Default-log or outside the Shopware System-Log folder. This ensures that the log file can never be accessed via URL

Avoid 400/500 errors at any time!

Untrusted content should not be included

See Untrusted content should not be included in SonarQube Rules.

Own media folder

If it is possible for the customer to upload images, own media folders should be created or existing ones should be used.

With "Install/Uninstall" the user must decide whether the data/tables are to be deleted or not

When clicking on the "Install / Uninstall" option in the Extension Manager, the user must be presented with the options "completely delete" or "keep the app data, text snippets and table adjustments".

It is not allowed to extend the Extension Manager

The Extension Manager must not be extended or overwritten.

Extension Manager

The Debug Console controls the reinstallation, uninstallation, installation and deletion of the app. No 400 errors or exceptions are allowed to appear.
If the app requires special PHP options, these must be queried during installation. If the query is negative, a growl message must appear in the backend.

Reloading of files not allowed

Apps may not load other files during and after the installation in the Extension Manager.

App pages with their own URL must appear in the sitemap.xml

If the app creates its own pages that are set to "index,follow" and the URLs are accessible via the frontend, then these "app URLs" must also appear in the sitemap.xml. In addition, these pages must include their own "Meta description" and "Title tag", which can be entered individually via the backend or as a text snippet.

We expect that every cookie set from the store-URL is registered in our Cookie Consent Manager. We differentiate between "Technically required", "Comfort functions" and "Statistics & Tracking". All cookies have to appear in cookie configuration box in the frontend.

Info:Registering cookies in the Cookie Consent Manager for Shopware 6

Shopping Worlds / Shopping Experiences

Shopping Worlds elements must include an element icon. If the app is deleted, Shopping Worlds should continue to work flawlessly in the frontend.

Payment apps

We check if the "pluginlogger" service is used for the debug/error.log and that logs are written in the directory /var/log/. Log files must use this folder in every circumstance. Another solution is to store them into the database.

Every app accessing external API services

A test button for optional API access data must be available. If the API data is incorrect, an entry must appear in the event log file in the Shopware folder /var/log/ respectively in the database.

Apart from that, you can validate the required credentials while saving them in the app settings. In this case, a status message must be displayed in the backend and Shopware log.

Github:Example for implementing a API Test Button into the System Config form

Menu entries in the main menu of the administration are not allowed because of Look & Feel.

Automatic code reviews with PhpStan and SonarQube

Our most current code review configurations that we use when uploading apps via the Shopware Acccount can be found on GitHub.

Automated code tests with Cypress

There are Cypress tests for 6 on GitHub. The project is driven by the Friends of Shopware group. You can contribute at any time:

Helpful tools for app developers

Description entered in the Shopware Account

  • The apps short description must have at least 150 characters.
  • The app description must contain at least 200 characters and should clearly represent the app functions in detail.
  • Include several screenshots from the storefront and administration. They must show the app "in action" and show its configuration options and how to use the app.
  • Be sure that the app is assigned to the appropriate categories.
  • If you provide a demo shop, the link must be valid (the URL cannot contain http:or https:).
  • The description must be a 1:1 translation.
  • Your app manufacturer profile must contain accurate English and German descriptions as well as a manufacturer logo.

Note: iframes, external scripts or tracking pixels are not allowed in the source code of the descriptions, profiles, and instructions. Custom styles may not overwrite the original Shopware styles. External sources must be included via https.

Short description: Min. 150 - max. 185 characters.

  • Tip: Use the short description wisely as the text will be used to tease your app in the overview along with the "Customers also bought" and "Customers also viewed" recommendations. The short description is also published as the meta-description. This description should be a minimum of 155 characters long and unique.

Description: Min. 200 characters.

Inline styles will be stripped.The following HTML tags are allowed:


<a> <p> <br> <b> <strong> <i> <ul> <ol> <li> <h2> <h3> <h4> <h5>
  • Tip: When it comes to increasing your app sales, it's important that potential customers feel completely informed about your products and services. To this end, you should provide a description that is meaningful, detailed and easy to understand - when possible, even make it understandable for people with very little technical knowledge. Explain step by step how your app works and how to use it to achieve the desired result. Of course, your app description should be accompanied by clean HTML source code.
  • Tip: Video content increases awareness, trust, and has proven to convert potential customers better than other content types. Help your customers better understand your app or service with explainer videos, product demos, tutorials, etc. You can embed max. 2 YouTube videos in your app description.

In addition, you should include descriptive images that represent the app functionality. Show the app "in action" in both the frontend and backend.

Note: You are no longer able to advertise your Shopware certificates within the app description, in your app images, or in your manufacturer profile. The manufacturer/partner certificates are dynamically loaded at the end of each app description and published by us.

An app is to be released in both stores (German and International), the content must be accurately translated 1:1 from/to German/English.​​​

Quality Guidelines for Shopware 5 Apps

Master data / license

Please enter the valid license you set in your shopware account. You have to identify this license in the plugin.xml as well.

Note: The choosen license can not be changed after adding your app to your account. If you want to change the licence afterwards, you have to add a new app (with a new technical name) and upload the extion again with the new technical name.

plugin.xml - App metadata

All apps must contain the following metadata:


<? xml version="1.0" encoding="utf-8"?>

<plugin xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../engine/Shopware/Components/Plugin/schema/plugin.xsd">

<label>My app name</label>

<label lang="de">Name of the app (German translation)</label>

<version>1.0.0</version>

<copyright>app supplier</copyright>

<license>license set in the account. e.g. MIT, proprietary, etc.</license>

<link>optional</link>

<author>Author of the app</author>

<compatibility minVersion="5.2.0" />

<changelog version="1.0.0">

   <changes>

        <![CDATA[

        First release Shopware Community Store

        ]]>

   </changes>

   <changes lang="de">

        <![CDATA[

        Erstveröffentlichung Shopware Community Store

        ]]>

   </changes>

</changelog>

<description>

   <![CDATA[

   <b>My app</b>

   <p>CSS,INLINE-Styles,BASE64-IMAGES OR SCRIPTS NOT ALLOWED! Describes app and contains a Link to manual/description in the community-store.</p>

   ]]>

</description>

<description lang="de">

   <![CDATA[

   <b>Meine Erweiterung</b>

   <p>CSS,INLINE-Styles,BASE64-IMAGES NICHT ERLAUBT! Beschreibt Erweiterung und enthält einen Link zur Anleitung/Beschreibung im Community Store und Erweiterung Anleitung.</p>

   ]]>

</description>

</plugin>

Note: The changelog must contain a minimum of 20 characters. Please note that the minVersion must be the same version as you have stored for the app in your account.

Note: Pay attention to the fallback language. Use e.g. instead of

plugin.xml - App dependencies

If your app requires other app to run properly, you have to check that these apps are installed. For example: If your app only works with an activated base app, you have to check the installation of the base app in the plugin.xml:


    <requiredPlugins>

        <requiredPlugin pluginName="BasePlugin" minVersion="1.0.0" />

    </requiredPlugin> 

Fallback language

The installation is not always in English or German.
So make sure that your app works in other languages as well.
An example: The customer has his installation in Spanish, your app is not yet available in this language.
So you should use the English translation as fallback.

Translations

If your app is available in more than one language (e.g. English and German), these can be defined using the option "Translations into the following languages are available" (located in the “Description & images” section of your Extension Management). The translations / text snippets must be maintained in the respective XML and TPL files.

Valid app favicon for the Shopware backend

You have to upload a valid favicon (16 x 16 px) for the app. This favicon will make it easier to identify your app in the Extension Manager module in the backend.

Error messages must be entered in the app log

Error/informational messages can only be recorded in the app-log of Shopware's log folder ( /var/log/ ). The service "pluginlogger" from the DI container has to be used for this. As of Shopware 5.6, you can also create your own app-specific logger. Never write app exceptions into the Shopware core.log or outside the Shopware System-Log folder. This ensures that the log file can never be accessed via URL.
Error messages had to be written into the original plugin.log of shopware.

Avoid 500 errors at any time.

Changes to the database and data records must not be removed with "Reinstall"

If a user clicks on "Reinstall", be sure that any stored data remains intact.

With "Install/Uninstall" the user must decide whether the data/tables are to be deleted or not

When clicking on the "Install / Uninstall" option in the Extension Manager, the user must be presented with the options "completely delete" or "keep the app data, text snippets and table adjustments".

Standard prefix for your own database tables

The prefix for your unique database table is s_plugin_. If you use your own tables, the structure should be as follows: s_plugin_my_plugin_name

Untrusted content should not be included

See Untrusted content should not be included in SonarQube Rules.

Email templates

App email templates must be stored in the folder "User emails". All email templates must be deleted after the app is uninstalled.

Using attributes

Attributes created by the app may not be deleted via the free text administration in the backend.

It is not allowed to extend the Extension Manager

The Extension Manager must not be extended or overwritten.

Extension Manager

The Debug Console controls the reinstallation, uninstallation, installation and deletion of the app. No 400 errors or exceptions are allowed to appear.
If the app requires special PHP options, these must be queried during installation. If the query is negative, a growl message must appear in the backend.

Reloading of files not allowed

Apps may not load other files during and after the installation in the Extension Manager.

App pages with their own URL must appear in the sitemap.xml

If the app creates its own pages that are set to "index,follow" and the URLs are accessible via the frontend, then these "app URLs" must also appear in the sitemap.xml. In addition, these pages must include their own "Meta description" and "Title tag", which can be entered individually via the backend or as a text snippet.

Info:Extend the sitemap.xml with Shopware 5 apps.

We expect that every cookie set from the store-URL is registered in our Cookie Consent Manager. We differentiate between "Technically required", "Comfort functions" and "Statistics & Tracking". All cookies have to appear in cookie configuration box in the frontend.

Info:Registering cookies in the Cookie Consent Manager

Clear only the necessary caches when installing or uninstalling a app.

Do not empty the template-/http-Cache or recompile the theme when installing the app. Also please consider which caches actually need to be cleared for your app to work, since regenerating caches may cause a high load on the server. Clear only the necessary caches when the activate-method is called.

Info:

Shopware App Guidelines

Shopping Worlds / Shopping Experiences

Shopping Worlds elements must include an element icon. If the app is deleted, Shopping Worlds should continue to work flawlessly in the frontend.

Payment apps

We check if the "pluginlogger" service is used for the debug/error.log and that logs are written in the directory /var/log/. Log files must use this folder in every circumstance. Another solution is to store them into the database.

Every app accessing external API services

A test button for optional API access data must be available. If the API data is incorrect, an entry must appear in the app log file in the Shopware folder /var/log/ respectively in the database.

Apart from that, you can validate the required credentials while saving them in the app settings. In this case, a status message must be displayed in the backend and Shopware log.

Github: Example app for implementing a API Test Button into the System Config form

Automatic code reviews with PhpStan and SonarQube

Our most current code review configurations that we use when uploading apps via the Shopware Acccount can be found on GitHub.

Automated code tests with Cypress

There are Cypress tests for Shopware 5 and 6 on GitHub. The project is driven by the Friends of Shopware group. You can contribute at any time:

Helpful tools for app developers

Shopware 5.0 SDK License

The Shopware 5 backend is completely based on Ext JS framework by Sencha (www.sencha.com). If you are developing Shopware 5 apps which build upon or alter the Shopware/ExtJS layer and wish to offer them with a proprietary license (apps that are not licensed under the GNU Affero General Public License version 3 or a compatible license), you require a Shopware SDK license.

Thanks to an OEM agreement with Sencha, Shopware is able to offer this license on a per developer basis, allowing the license holder to make use of this framework for their own apps.

When do I need a SW5 SDK-License?

  1. Apps will be sold and uses extJS

When do I NOT need a SW5 SDK-License?

  1. App will be sold and uses no extJS
  2. App is for free and uses extJS
  3. App is for free and uses no extJS

If you need a license, please write an email to ecosystem@shopware.com.

Automatic code review - Errors

The required composer.json file was not found."

Cause: Error in composer.json
One possible cause is that the technical app name from the Community Store or account does not match the technical name entered in composer.json or the app is incorrectly zipped.
The technical app name had to be stored in the last part of the composer.json: composore.json > extra > shopware-plugin-class. So take a look at the bootstrap class. Most of the error were caused by the wrong technical name. For example "Swag\\MyPlugin\\SwagMyPluginSW6" instead of "Swag\\MyPlugin\\SwagMyPlugin".

Here is an example of a valid composer.json.
See "Plugin-Base Class" for more information. 

Make sure this cross-domain message is being sent to the intended domain."

No bootstrapping file found. Expecting bootstrapping in...

The bootstrap cannot be found. Either the folder structure in the ZIP file is incorrect or there is a typo/case sensitive error in the app source (e.g. in the technical name).

Warning: ExtJS was detected in your app.

(SW5 related only)
The app manufacturer needs an SDK license for a commercial app which uses ExtJS. For more information, please write an email to ecosystem@shopware.com.
See Shopware 5 SDK License for more information.

Class Shopware\Storefront\* not found.

Missing requirements in the composer.json (e.g. "require": {"shopware/frontend": "*"},)
See "Shopware App Development: App Meta Information - Explanation of the properties" for more information.

Be sure you set cookies as secure. Don`t forget to register your to Cookie to the Coookie Consent Manager.

Call to static method jsonEncode() on an unknown class...

Shopware always uses json_Encode exclusively - there is no other fallback.

The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.

The composer.lock in the app archive has to be deleted.

Class Shopware\Core\System\Snippet\Files\SnippetFileInterface not found and could not be autoloaded.

In the Shopware 6 Early Access version, the mentioned class did not exist, therefore, the code review failed.
The reason for the problem is the following specification in the composer.json:


"require": {

    "shopware/core": "*",

    "shopware/storefront": "*"

},

Composer resolves this to "Whatever is the latest from these repositories" and then installs the Early Access version instead of the current Release Candidate. This happens because an EA is not known by composer as a stability level (like stable or RC) and is therefore ultimately considered "stable".
The solution is to amend the requirement as follows:


"require": {

    "shopware/core": "^6.1",

    "shopware/storefront": "^6.1"

},

"minimum-stability": "RC"

This ensures that at least version Shopware 6.1 is installed, even if it is a Release Candidate. It will be preferred as soon as the final 6.1 is released.

Unauthorized file formats or folders detected in the app. Please remove the following files/folders:

Not allowed folders and files:


.gitignore,.DS_Store, Thumbs.db, .git, __MACOSX, .zip, .tar, .tar.gz, .phar

Note on Shopware Technology Partner contract for interfaces

You have now read the complete list of requirements for developing and releasing apps based on our extension system in the Shopware Community Store.

If your app is a software app/interface with downstream costs, transaction fees, or service fees for the customer, we need to complete a technology partner agreement in order activate your apps.

If you have any questions regarding the technology partner agreement, please contact our sales team by writing an email to ecosystem@shopware.com or calling +44 (0) 203 095 2445 (UK) / 00 800 746 7626 0 (worldwide) / +49 (0) 25 55 / 928 85-0 (Germany).

Was this article helpful?

Version

5.5.0 or newer

Contents