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