如何将新创建的 CRM 联系人记录复制到 SQL table
How to copy newly created CRM contact record to SQL table
我编写了一个在创建新记录时触发的插件 (post)。这个插件简单地运行一个 SSIS 包,将新创建的记录详细信息移动到 SQL table。我必须将此插件部署为 none 隔离模式。
我想知道的是,有没有更好的解决方案可以与 SQL table 实时同步 CRM 记录?
我正在本地开发 CRM 2011 RU 18。
string connectionString = "User Id=username; Password=password; Initial Catalog=db; Data Source=myServer;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand("INSERT INTO testPerson (Firstname, Lastname, Emailaddress, CrmGuid) VALUES (@FN, @LN, @Email, @CrmGuid)");
cmd.CommandType = CommandType.Text;
cmd.Connection = connection;
cmd.Parameters.AddWithValue("@FN", "James");
cmd.Parameters.AddWithValue("@LN", "Bolton");
cmd.Parameters.AddWithValue("@Email", "1152@now.com");
cmd.Parameters.AddWithValue("@CrmGuid", "C45843ED-45BC-E411-9450-00155D1467C5");
connection.Open();
cmd.ExecuteNonQuery();
}
//////// Direct DB Connection //////////// <--- END 1
}
catch (Exception ex)
{
tracingService.Trace("CRM to mWeb Sync Plugin: {0}", ex.ToString());
throw;
}
作为一个可能的替代方案,我看到该插件可以使用 ADO Connection/Command e.t.c。将数据直接推送到外部数据库。
如果您想 运行 在沙盒模式下执行此操作,您将无法直接针对 SQL(或 运行 SSIS 包。)
正确的解决方案是针对 Web 服务。
创建一个标准的 .NET Web 服务(WebApi、ASP.NET 老派、WCF 等 - 选择你的毒药),你可以向其 post 字段。该 Web 服务应将字段写入 SQL。这是基本的 .NET - 您可以使用 SqlCommand
、EntityFramework 等。像部署任何 Web 服务一样将此 Web 服务部署到 IIS。
您可以在此处获得有关创建 ASP.NET WebApi Web 服务的完整教程:http://www.codeproject.com/Articles/659131/Understanding-and-Implementing-ASPNET-WebAPI
现在,您的插件应该调用您使用 HttpClient
创建的 Web 服务。只要您有 FQDN(即 service.mydomain.com 而不是诸如 localhost 或 34.22.643.23 之类的东西),您就可以 运行 您的插件处于沙盒模式(即,不是隔离。)
您可以使用任何 IIS 安全功能保护您的服务或在您的 WebAPI 代码中实施授权。
根据@Nicknow,我终于学会了(足够)并创建了我的第一个 WCF 服务并将其部署在 IIS 上。是的,这需要一些工作和学习,但效果很好。从记录创建到插件完成再到在我的后端数据库中创建新行,所有这些都在 2 分钟内完成。
如果有人和我处在同一条船上,我会建议购买 This book,因为它对我帮助很大。
再次感谢你们为我指明了正确的方向。
我编写了一个在创建新记录时触发的插件 (post)。这个插件简单地运行一个 SSIS 包,将新创建的记录详细信息移动到 SQL table。我必须将此插件部署为 none 隔离模式。
我想知道的是,有没有更好的解决方案可以与 SQL table 实时同步 CRM 记录?
我正在本地开发 CRM 2011 RU 18。
string connectionString = "User Id=username; Password=password; Initial Catalog=db; Data Source=myServer;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand("INSERT INTO testPerson (Firstname, Lastname, Emailaddress, CrmGuid) VALUES (@FN, @LN, @Email, @CrmGuid)");
cmd.CommandType = CommandType.Text;
cmd.Connection = connection;
cmd.Parameters.AddWithValue("@FN", "James");
cmd.Parameters.AddWithValue("@LN", "Bolton");
cmd.Parameters.AddWithValue("@Email", "1152@now.com");
cmd.Parameters.AddWithValue("@CrmGuid", "C45843ED-45BC-E411-9450-00155D1467C5");
connection.Open();
cmd.ExecuteNonQuery();
}
//////// Direct DB Connection //////////// <--- END 1
}
catch (Exception ex)
{
tracingService.Trace("CRM to mWeb Sync Plugin: {0}", ex.ToString());
throw;
}
作为一个可能的替代方案,我看到该插件可以使用 ADO Connection/Command e.t.c。将数据直接推送到外部数据库。
如果您想 运行 在沙盒模式下执行此操作,您将无法直接针对 SQL(或 运行 SSIS 包。)
正确的解决方案是针对 Web 服务。
创建一个标准的 .NET Web 服务(WebApi、ASP.NET 老派、WCF 等 - 选择你的毒药),你可以向其 post 字段。该 Web 服务应将字段写入 SQL。这是基本的 .NET - 您可以使用 SqlCommand
、EntityFramework 等。像部署任何 Web 服务一样将此 Web 服务部署到 IIS。
您可以在此处获得有关创建 ASP.NET WebApi Web 服务的完整教程:http://www.codeproject.com/Articles/659131/Understanding-and-Implementing-ASPNET-WebAPI
现在,您的插件应该调用您使用 HttpClient
创建的 Web 服务。只要您有 FQDN(即 service.mydomain.com 而不是诸如 localhost 或 34.22.643.23 之类的东西),您就可以 运行 您的插件处于沙盒模式(即,不是隔离。)
您可以使用任何 IIS 安全功能保护您的服务或在您的 WebAPI 代码中实施授权。
根据@Nicknow,我终于学会了(足够)并创建了我的第一个 WCF 服务并将其部署在 IIS 上。是的,这需要一些工作和学习,但效果很好。从记录创建到插件完成再到在我的后端数据库中创建新行,所有这些都在 2 分钟内完成。
如果有人和我处在同一条船上,我会建议购买 This book,因为它对我帮助很大。
再次感谢你们为我指明了正确的方向。