HomeDev GuideAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunityDoc feedbackLog In
GitHubNuGetDev CommunityDoc feedback


Optimizely Forms is only supported by MVC-based websites and HTML5-compliant browsers.

From version 4.18.0, Optimizely Forms can support multiple external systems. Editors can choose one of the registered systems as connected data source in the user interface.


To make Optimizely Forms support multiple Marketing Automation connectors:

  1. Create an instance of `IExternalSystem` and register this with Forms.

  2. Forms automatically activates `ExternalSystem` with the default constructor and registers this with Forms. You can override this default behavior.

  3. Allow the display name of the `ExternalSystem` by ID. You can get the `DisplayName` localization resource from the XML path:


    If that resource does not exist, fallback to the default one (like previous versions):


## API changes from version 4.18.0

  1. A new service, `ExternalSystemService`, is introduced for working with external systems:

    • `WorkingExternalSystem` – Property to get all currently activated external systems.

    • `HasExternalSystems()` – Determine there is any an implement of `IExternalSystem`.

    • `ActivateFromTypes()` – Automatically try to create instances of `IExternalSystem` by scanning the assembly. This requires the default constructor of the `ExternalSystem`. If you do not want to automatically activate your `ExternalSystem`, override this method and do nothing or do not provide the default constructor for the `ExternalSystem`.

    • `RegisterExternalSystem` – Explicitly register an `ExternalSystem`. Each `ExernalSystem` must have a unique ID. The ID should not contain spaces or special characters.

    • `UnregisterExternalSystem` – Remove an `ExternalSystem`.

    • `GetExternalSystem` – Return instance of an `ExternalSystem` by ID.

    • `GetAllExternalSystems` – Return all instances of `ExternalSystem` (activated, registered)

  2. The property `IPostSubmissionActor.ActiveExternalFieldMappingTable` has been obsoleted since the Actors should not know about the mappings. If you want to have a mapping table in Actors, you can use `IExternalFieldMappingService.GetActiveFieldMappingTables` to retrieve them.