Provider.cs
Version Info: This topic applies to Episerver.ConnectForMarketingAutomation 4.0.0 and lower. For later versions, see Sample Connector - IMarketingConnector.
using System;
using System.IO;
using System.Text;
using EPiServer.MarketingAutomationIntegration.Core;
using EPiServer.ServiceLocation;
using EPiServer.XForms.Util;
using EPiServer.MarketingAutomationIntegration.Services;
using EPiServer.Framework.Localization;
using System.Web;
using System.Xml;
using EPiServer.MarketingAutomationIntegration.Helpers;
namespace DemoConnector.Services
{
/// <summary>
/// This is the main interface that the marketing automation Interface (MAI)
/// plugin uses to load the connector. During the intitialize process, MAI uses
/// the Service locator to load the connector.
/// Note: Only one connector can exist in the solution or be installed with the MAI framework.
/// </summary>
[ServiceConfiguration(ServiceType = typeof(IProvider), Lifecycle = ServiceInstanceScope.Singleton)]
public class Provider : ProviderBase
{
/// <summary>
/// The name of the connector.
/// </summary>
public override string Name
{
get { return "DemoConnector"; }
}
/// <summary>
/// The settings for the connector.
/// </summary>
/// <remarks>
/// Typically, use an IDynamicData implementation to store configuration data required for the connector.
/// This connector has no configuration data.
/// </remarks>
public override IProviderSettings Settings
{
get { return this.Settings; }
}
/// <summary>
/// As a connector author, you can attach a url to the main connector button
/// at the top of the configuration screen. You can attach an external url,
/// the url of the configuration page, or another url of a page of your choosing.
/// </summary>
/// <returns>A url.</returns>
/// <remarks>
/// This code demonstates how to re-direct the url to the location
/// of the configuration page for the connector.
/// </remarks>
public override string GetDashboardUrl()
{
//Build EPiServer URL to the configuration page
var uri = new Uri(HttpContext.Current.Request.Url.ToString());
var port = string.Empty;
if (uri.Port != 80)
port = ":" + uri.Port;
var requested = uri.Scheme + "://" + uri.Host + port;
string settingsUrl = ModuleHelper.GetConnectorSettingsUrlString();
return string.Format("{0}{1}", requested, settingsUrl);
// Or return the url to the end point if there is one.
// return "http://www.google.com";
}
/// <summary>
/// Called by the MAI framework at startup, you can use this method
/// to add services to the default Episerver IoC container.
/// </summary>
/// <param name="serviceConfigurationContext">The service context </param>
public override void Init(ServiceConfigurationContext serviceConfigurationContext)
{
serviceConfigurationContext.Container.Configure(sp =>
{
//List or Contact List Service.
sp.For<IListService>().Use<ListService>();
//Targeting content services.
sp.For<IProfileService>().Use<ProfileService>();
sp.For<IProgramService>().Use<ProgramService>();
sp.For<IScoringService>().Use<ScoringService>();
//Interface for authentication with the provider
sp.For<IAuthenticationService>().Use<AuthenticationService>();
sp.For<IProviderServices>().Use<ProviderServices>();
});
}
/// <summary>
/// Called periodically by the MAI framework to verify that the connector is ready to use.
/// </summary>
/// <returns>Result stating whether the framework is ready for use.</returns>
public override bool IsReady()
{
return true;
}
/// <summary>
/// Temporary static cache to hold form data from the process function.
/// </summary>
public static class FormData
{
/// <summary>
/// Sample string to hold processed data from our demo connector form.
/// </summary>
public static string Output { get; set; }
}
/// <summary>
/// This function received the connector data that was collected from the user. Read it in as Xml and
/// process it however you like. This loops over the Xml tags and parses out data for each one for processing.
///
/// This code is executed when the Submit button is clicked on a form.
/// </summary>
/// <param name="sender">Object</param>
/// <param name="e">Form data is passed in through this. You can retrieve the data as innerHtml or Xml.
/// You also can loop through the nodes to get the user data.</param>
public override void ProcessXFormData(object sender, XFormDataEventArgs e)
{
// This is where one has access to the form data from the user. This is where the business logic would start.
var output = new StringBuilder();
var innerXml = e.FormData.Data.InnerXml;
// Form data comes out as xml, it can easily be read and then do whatever you want with it.
using (var reader = XmlReader.Create(new StringReader(innerXml)))
{
var ws = new XmlWriterSettings {Indent = true};
using (var writer = XmlWriter.Create(output, ws))
{
// Read each line of xml and act accordingly. In this case we are just writing it back out as xml
// as an example.
while (reader.Read())
{
switch (reader.NodeType)
{
// this is the start element tag
case XmlNodeType.Element:
writer.WriteStartElement(reader.Name);
break;
// this is the data associated with the current tag
case XmlNodeType.Text:
// process input data
writer.WriteString(reader.Value);
break;
// this is the end tag for the current data element
case XmlNodeType.EndElement:
writer.WriteFullEndElement();
break;
}
}
}
}
// temp cache storage for our form data
FormData.Output = output.ToString();
}
}
}
Related topics
- AuthenticationService.cs
- DataList.cs
- InProgram.cs
- ListService.cs
- NamespaceDoc.cs
- ProfileService.cs
- Program.cs
- ProgramService.cs
- ProviderServices.cs
- ScoringService.cs
- app.config
- module.config
- packages.config
Last updated: Dec 14, 2015