Implement actors
Explains the use of actors and how to configure them.
NoteOptimizely Forms is only supported by MVC-based websites and HTML5-compliant browsers.
Optimizely Forms actors
After a visitor submits a form, Forms.Core calls actors to perform additional processing on the server.
- You can extend and plug in the actor, and a third-party developer can implement it.
 - You can run Actors in a sync or async manner.
 - Each actor is provided with several data, including 
SubmissionDataand theHttpRequest. - Sync-actor can have (and can modify) the 
HttpResponse, so the actor can modify the response and cookie before returning the result to a visitor's browser. 
By default, Optimizely Forms has two built-in Actors:
CallWebhookAfterSubmissionActorSendEmailAfterSubmissionActor
Handle submission actor's result
From version 4.16.0, you can let actors:
- Return a signal to cancel a form submission when an actor fails.
 - Return an error message to be displayed to visitors.
 
To be able to cancel form submissions and to display error messages, you need to implement the following changes:
- Actors must implement 
ISyncOrderedSubmissionActor. Actors implementing this interface run synchronously in ascending order, regardless of theIsSyncedWithSubmissionProcessvalue. (Actors are forced to run synchronously because you cannot control the result of async actors). - Actors must return an object instance of a class that implements 
EPiServer.Forms.Core.PostSubmissionActor.Internal.ISubmissionActorResult.
By implementing this interface, the returned result will have two properties:
-CancelSubmit(boolean): determines whether the form submission should be canceled.
-ErrorMessage(string): this error message is displayed to visitors. 
Implement customized actors
Third-party developers can implement their actor by:
- Inheriting a 
PostSubmissionActorBasebase class. - Starting from scratch with the 
IPostSubmissionActorinterface and interfaceIUIPropertyCustomCollectionfor edit view user interface of configuring the Actor model. 
See the sample code for implementing an actor in the open-source project on GitHub.
Updated 2 months ago