/
Saving to Salesforce from an MVC form

Saving to Salesforce from an MVC form

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

Model

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

@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

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

using FuseIT.Sitecore.SalesforceConnector;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace FuseIT_Demo
{
    public class SitecoreSalesforceSessionSingleton : SalesforceSessionSingleton
    {
        private SitecoreSalesforceSessionSingleton()
        : base(null, "S4SConnString")
        {
        }

        /// 
        /// Get the singleton instance of the Salesforce Session.
        /// 
        public static SalesforceSession SessionInstance
        {
            get
            {
                SitecoreSalesforceSessionSingleton singleton = new SitecoreSalesforceSessionSingleton();
                return singleton.Instance;
            }
            set
            {
                // This is only required if you want code outside the singleton to be able to construct the session
                SitecoreSalesforceSessionSingleton singleton = new SitecoreSalesforceSessionSingleton();
                singleton.SetNewInstance(value);
            }
        }
    }
}