Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

This is one possible MVC implementation that can be extended so it better meets your business requirements.

Model

Code Block
languagec#
linenumberstrue
using Sitecore.Data.Items;
using Sitecore.Mvc.Presentation;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace FuseIT_Demo.Models
{
    //Custom SF view model
    public class SFContactViewModel
    {
        [DisplayName("First Name")]
        [Required(ErrorMessage = "First Name required")]
        public string FirstName { get; set; }

        [DisplayName("Last Name")]
        public string LastName { get; set; }

        [DisplayName("Email")]
        [Required(ErrorMessage = "Email required")]
        [EmailAddress(ErrorMessage = "Invalid Email Address")]
        public string EmailAddress { get; set; }        
    }
}

View

Code Block
languagec#
linenumberstrue
@using System.Web.Mvc.Html
@using Sitecore.Foundation.Dictionary.Extensions
@using Sitecore.Foundation.SitecoreExtensions.Extensions
@model FuseIT_Demo.Models.SFContactViewModel
@using (Html.BeginRouteForm(Sitecore.Mvc.Configuration.MvcSettings.SitecoreRouteName, FormMethod.Post))
{
    @Html.AddUniqueFormId()
    if (!string.IsNullOrEmpty(ViewBag.ReturnedMessage))
    {
        <div>
            @ViewBag.ReturnedMessage
        </div>
    }

    <div>
        @Html.LabelFor(x => x.FirstName)

        @Html.TextBoxFor(x => x.FirstName, new { id = "firstName", @placeholder = "Please enter your first name" })

        @Html.ValidationMessageFor(x => x.FirstName, "", "p")
    </div>
    <div>
        @Html.LabelFor(x => x.LastName)

        @Html.TextBoxFor(x => x.LastName, new { id = "lastName", @placeholder = "Please enter your first name" })

        @Html.ValidationMessageFor(x => x.LastName, "", "p")
    </div>
    <div>
        @Html.LabelFor(x => x.EmailAddress)

        @Html.TextBoxFor(x => x.EmailAddress, new { id = "email", @placeholder = "Please enter your email address" })

        @Html.ValidationMessageFor(x => x.EmailAddress, "", "p")
    </div>
    <input type="submit" value="Create Salesforce Contact" />
}

Controller

Code Block
languagec#
linenumberstrue
using FuseIT.Sitecore.Salesforce;
using FuseIT.Sitecore.SalesforceConnector;
using FuseIT.Sitecore.SalesforceConnector.DataSource;
using FuseIT.Sitecore.SalesforceConnector.Entities;
using FuseIT.Sitecore.SalesforceConnector.SalesforcePartner;
using FuseIT.Sitecore.SalesforceConnector.Services;
using FuseIT.Sitecore.SalesforceConnector.Soql;
using FuseIT_Demo.Models;
using Sitecore;
using Sitecore.Analytics;
using Sitecore.Analytics.Model;
using Sitecore.Analytics.Data.Items;
using Sitecore.Data.Items;
using Sitecore.Feature.Accounts.Services;
using Sitecore.Links;
using Sitecore.Security.Domains;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using FuseIT.S4S.WebToSalesforce;
using Sitecore.Security;

namespace FuseIT_Demo.Controllers
{
    /// <summary>
    /// Functionalities related to S4S
    /// </summary>
    public class S4SController : Controller
    {
		
        #region MVC CUSTOM FORM SUBMISSION EXAMPLE

        [HttpGet]
        public ActionResult CreateSFContact()
        {
            return View();
        }

        [HttpPost]
        public ActionResult CreateSFContact(SFContactViewModel sfContactViewModel)
        {
            try
            {
                //Check model validity
                if (!ModelState.IsValid)
                {
                    return base.View(sfContactViewModel);
                }

                //Create Salesforce Contact object
                Contact sfContact = new Contact();
                sfContact.FirstName = sfContactViewModel.FirstName;
                sfContact.LastName = sfContactViewModel.LastName;
                sfContact.Email = sfContactViewModel.EmailAddress;

                //Create Salesforce contact through the API
                ContactService contactService = new ContactService(SitecoreSalesforceSessionSingleton.SessionInstance);
                var results = contactService.SaveContact(sfContact);
                
                Logging.Debug(this, "Create Salesforce Contact result = " + results.success);

                //Review the results
                if (!results.success)
                {
                    for (int i = 0; i < results.errors.Count(); i++)
                    {
                        Logging.Error(this, "Error Create Salesforce Contact:  " + results.errors[i].message);
                    }
                    
                    ViewBag.ReturnedMessage = "Failed to create Salesforce Contact";
                }
                else
                {                    
                    ViewBag.ReturnedMessage = "Salesforce Contact created successfully.";
                }

            }
            catch (SalesforceException sfException)
            {
                Logging.Error(this, "Salesforce exception occured", sfException);
                
                ViewBag.ReturnedMessage = "Failed to create Salesforce Contact. Salesforce Exception occured.";
            }
            catch (Exception exception)
            {
                Logging.Error(this, "Exception occured", exception);
                
                ViewBag.ReturnedMessage = "Failed to create Salesforce Contact. Exception occured.";
            }

            return base.View(sfContactViewModel);
        }

        #endregion
		
    }
}

...

Salesforce Session

Code Block
languagec#
linenumberstrue
using Sitecore.Data.Items;
using FuseIT.Sitecore.Mvc.PresentationSalesforceConnector;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace FuseIT_Demo.Models
{
    //Custompublic SFclass viewSitecoreSalesforceSessionSingleton model: SalesforceSessionSingleton
   public class{
SFContactViewModel     {         [DisplayName("First Name")]private SitecoreSalesforceSessionSingleton()
        : [Requiredbase(ErrorMessagenull, = "First Name required"S4SConnString")]
  
     public string FirstName {
get; set; }      }

  [DisplayName("Last Name")]     /// 
  public string LastName { get; set; }/// Get the singleton instance of the Salesforce Session.
 [DisplayName("Email")]       /// 
[Required(ErrorMessage = "Email required")]     public static SalesforceSession SessionInstance
[EmailAddress(ErrorMessage = "Invalid Email Address")]    {
    public string EmailAddress { get; set; }  get
          } }

View

Code Block
languagec#
linenumberstrue
@using System.Web.Mvc.Html
@using Sitecore.Foundation.Dictionary.Extensions
@using Sitecore.Foundation.SitecoreExtensions.Extensions
@model FuseIT_Demo.Models.SFContactViewModel
@using (Html.BeginRouteForm(Sitecore.Mvc.Configuration.MvcSettings.SitecoreRouteName, FormMethod.Post))
{ {
              @Html.AddUniqueFormId()  SitecoreSalesforceSessionSingleton singleton = if (!string.IsNullOrEmpty(ViewBag.ReturnedMessage))new SitecoreSalesforceSessionSingleton();
    {         <div>             @ViewBag.ReturnedMessage
return singleton.Instance;
       </div>     }
     <div>       set
 @Html.LabelFor(x => x.FirstName)          @Html.TextBoxFor(x => x.FirstName, new {
id = "firstName", @placeholder = "Please enter your first name" })      // This is only @Html.ValidationMessageFor(x => x.FirstName, "", "p")
    </div>
    <div>
 required if you want code outside the singleton to be able to construct the session
      @Html.LabelFor(x => x.LastName)         SitecoreSalesforceSessionSingleton @Html.TextBoxFor(xsingleton => x.LastName, new { id = "lastName", @placeholder = "Please enter your first name" })

        @Html.ValidationMessageFor(x => x.LastName, "", "p")
    </div>SitecoreSalesforceSessionSingleton();
       <div>         @Htmlsingleton.LabelFor(x => x.EmailAddress)SetNewInstance(value);
         @Html.TextBoxFor(x => x.EmailAddress, new}
{ id = "email", @placeholder = "Please enter your email address" })
         @Html.ValidationMessageFor(x => x.EmailAddress, "", "p")
    </div>
    <input type="submit" value="Create Salesforce Contact" />
}

...

}
}

Next Step

Identify And Push Visitor Save Action

...