jxycms
3/8/2017 - 6:31 AM

code below is used to make connection to microsoft dynamic crm and post data to there. need to install nugget package of Microsoft.xrm.clien

code below is used to make connection to microsoft dynamic crm and post data to there. need to install nugget package of Microsoft.xrm.client first. in code below, I get parameter value from customer setting first.

//put it in App_Code

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using CMS.CMSHelper;
using CMS.DocumentEngine;
using CMS.EmailEngine;
using CMS.EventLog;
using CMS.EventManager;
using CMS.GlobalHelper;
using CMS.PortalEngine;
using CMS.SettingsProvider;
using CMS.SiteProvider;
using CMS.WorkflowEngine;

using Microsoft.Xrm.Client;
using Microsoft.Xrm.Client.Services;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Metadata;
using System.Collections;
using CMS.PortalControls;
using CMS.DataEngine;
using CMS.Helpers;

/// <summary>
/// Summary description for CrmHelper
/// </summary>
public class CrmHelper
{

    public CrmConnection Connect()
    {

        bool CWA_IsDynamicsCrmLiveMode = ValidationHelper.GetBoolean(SettingsKeyInfoProvider.GetBoolValue(SiteContext.CurrentSiteName + ".CWA_IsDynamicsCrmLiveMode"), false);
        string CWA_DevDynamicsCrmUrl = ValidationHelper.GetString(SettingsKeyInfoProvider.GetValue(SiteContext.CurrentSiteName + ".CWA_DevDynamicsCrmUrl"), "");
        string CWA_DevDynamicsCrmUsername = ValidationHelper.GetString(SettingsKeyInfoProvider.GetValue(SiteContext.CurrentSiteName + ".CWA_DevDynamicsCrmUsername"), "");
        string CWA_DevDynamicsCrmPassword = ValidationHelper.GetString(SettingsKeyInfoProvider.GetValue(SiteContext.CurrentSiteName + ".CWA_DevDynamicsCrmPassword"), "");
        string CWA_ProdDynamicsCrmUrl = ValidationHelper.GetString(SettingsKeyInfoProvider.GetValue(SiteContext.CurrentSiteName + ".CWA_ProdDynamicsCrmUrl"), "");
        string CWA_ProdDynamicsCrmUsername = ValidationHelper.GetString(SettingsKeyInfoProvider.GetValue(SiteContext.CurrentSiteName + ".CWA_ProdDynamicsCrmUsername"), "");
        string CWA_ProdDynamicsCrmPassword = ValidationHelper.GetString(SettingsKeyInfoProvider.GetValue(SiteContext.CurrentSiteName + ".CWA_ProdDynamicsCrmPassword"), "");

        string connectionStringCrm = "Url={0}; Username={1}; Password={2};";
        string crmUrl = CWA_IsDynamicsCrmLiveMode ? CWA_ProdDynamicsCrmUrl : CWA_DevDynamicsCrmUrl;
        string crmUsername = CWA_IsDynamicsCrmLiveMode ? CWA_ProdDynamicsCrmUsername : CWA_DevDynamicsCrmUsername;
        string crmPassword = CWA_IsDynamicsCrmLiveMode ? CWA_ProdDynamicsCrmPassword : CWA_DevDynamicsCrmPassword;

        EventLogProvider.LogInformation("CrmConnection", "Connection Data", string.Format("Url: {0}, Username: {1}, Password: {2}, Live: {3}", crmUrl, crmUsername, crmPassword, CWA_IsDynamicsCrmLiveMode));

        CrmConnection crmConnection = CrmConnection.Parse(string.Format(connectionStringCrm, crmUrl, crmUsername, crmPassword));
        return crmConnection;
    }


    public bool Subscribe(string email, string firstName, string lastName, string profession1, string profession2, string publications)
    {
        try
        {
            CrmConnection crmConnection = Connect();
            OrganizationService service;
            service = new OrganizationService(crmConnection);
            OrganizationServiceContext orgContext = new OrganizationServiceContext(service);
            string profession = string.Format("{0} - {1}", profession1.Trim(), profession2.Trim());
            var request = new OrganizationRequest("nps_subscribeUnsubscribe");
            request["email"] = email;
            request["firstName"] = firstName;
            request["lastName"] = lastName;
            request["profession"] = profession;
            request["publications"] = publications;
            request["subscribeUnsubscribe"] = 1;
            var response = service.Execute(request);
            crmConnection = null;

            EventLogProvider.LogInformation("CrmConnection", "Success", string.Format("email: {0}, firstname: {1}, lastname: {2}, profession1: {3}, profession2: {4}, publications {5}", email, firstName, lastName, profession1, profession2, publications));
            return true;
        }

        catch (Exception ex)
        {
            EventLogProvider.LogException("CrmConnection", "Fail", ex);
            return false;
        }
    }

}


//put it in App_Code, used in scheduled tasks

using System;
using CMS;
using CMS.DataEngine;
using CMS.Helpers;
using CMS.OnlineForms;
using CMS.SiteProvider;
using CMS.Scheduler;

/// <summary>
/// Summary description for TransferDataToCrm
/// </summary>
/// 
[assembly: RegisterCustomClass("TransferDataToCrm", typeof(TransferDataToCrm))]
public class TransferDataToCrm : ITask
{
    public string Execute(TaskInfo ti)
    {
        BizFormInfo formObject = BizFormInfoProvider.GetBizFormInfo("Newsletter", SiteContext.CurrentSiteID);
        DataClassInfo formClass = DataClassInfoProvider.GetDataClassInfo(formObject.FormClassID);

        string className = formClass.ClassName;
        ObjectQuery<BizFormItem> data = BizFormItemProvider.GetItems(className).WhereEmpty("SendCrmDateTime");

        bool success = false;
        if (DataHelper.DataSourceIsEmpty(data))
        {
            success = true;
        }
        else
        { 
            foreach (BizFormItem item in data)
            {
                string givenNameFieldValue = item.GetStringValue("GivenName", "");
                string lastNameFieldValue = item.GetStringValue("LastName", "");
                string emailFieldValue = item.GetStringValue("Email", "");
                string ddlIamaFieldValue = item.GetStringValue("ddlIama", "");
                string ddlSpecialiseFieldValue = item.GetStringValue("ddlSpecialise", "");
                string publications = "e-706";
                string SendCrmDateTime = item.GetStringValue("SendCrmDateTime", "");

                var helper = new CrmHelper();
                success = helper.Subscribe(emailFieldValue, givenNameFieldValue, lastNameFieldValue, ddlIamaFieldValue, ddlSpecialiseFieldValue, publications);
                if (success)
                {
                    DateTime currentTime = DateTime.Now;
                    item.SetValue("SendCrmDateTime", currentTime.ToString());
                    item.SubmitChanges(false);
                }
            }
        }

        return String.Format("Result: {0}", success ? "True" : " False");
    }

}

//then in Module/Custom Setting, create properties for CrmHelper file, and give the value to these properties in setting