Multiple external systems
Shows how to configure multiple external systems for Optimizely Forms.
Note
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:
-
Create an instance of
IExternalSystem
and register this with Forms.var efmService = ServiceLocator.Current.GetInstance<ExternalSystemService>(); var custom1 = new CustomExternalSystem("Custom_1"); custom1.Datasources = GetSomeDatasources(custom1); var custom2 = new CustomExternalSystem("Custom_2"); custom2.Datasources = GetSomeDatasources(custom2); efmService.RegisterExternalSystem(custom1); efmService.RegisterExternalSystem(custom2);
-
Forms automatically activates
ExternalSystem
with the default constructor and registers this with Forms. You can override this default behavior. -
Allow the display name of the
ExternalSystem
by ID. You can get theDisplayName
localization resource from the XML path:/episerver/forms/externalsystems/{system.Id}/displayname
If that resource does not exist, fallback to the default one (like previous versions):
/episerver/forms/externalsystems/{system.GetType().FullName}/displayname
API changes from version 4.18.0
- 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 ofIExternalSystem
.ActivateFromTypes()
– Automatically try to create instances ofIExternalSystem
by scanning the assembly. This requires the default constructor of theExternalSystem
. If you do not want to automatically activate yourExternalSystem
, override this method and do nothing or do not provide the default constructor for theExternalSystem
.RegisterExternalSystem
– Explicitly register anExternalSystem
. EachExernalSystem
must have a unique ID. The ID should not contain spaces or special characters.UnregisterExternalSystem
– Remove anExternalSystem
.GetExternalSystem
– Return instance of anExternalSystem
by ID.GetAllExternalSystems
– Return all instances ofExternalSystem
(activated, registered)
- 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 useIExternalFieldMappingService.GetActiveFieldMappingTables
to retrieve them.
Updated 5 months ago