是否有任何解决方案可以根据 CRM 2011 记录在其他数据库中创建记录?当在 CRM 2011 中创建诸如“成本”之类的记录时,我们希望在 Oracle DB 中创建记录。可以通过插件完成吗?或者应该为此创建一个服务?您能否为此提供参考或解决方案。任何帮助将不胜感激。
问问题
1091 次
2 回答
2
您可以使用插件在另一个系统中创建记录,尽管您需要考虑同步并确保不会重复,但肯定可以做到。
插件教程可以在这里找到。
您需要编写一个插件来运行Create
并使用所创建Cost
实体的信息在Oracle
数据库中创建记录。
举个例子:
public void Execute(IServiceProvider serviceProvider)
{
var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
//get the created entity from CRM
var theCreatedEntity = context.InputParameters["Target"] as Entity;
//build up a stored procedure call
using (OracleConnection objConn = new OracleConnection("connection string"))
{
var cmd = new OracleCommand();
cmd.Connection = objConn;
cmd.CommandText = "stored procedure name";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("param1", OracleType.Number).Value = theCreatedEntity.GetAttributeValue<int>("Attribute1");
cmd.Parameters.Add("param2", OracleType.Number).Value = theCreatedEntity.GetAttributeValue<int>("Attribute2");
//etc
cmd.ExecuteNonQuery();
}
}
这应该给你足够的去开始
于 2013-02-17T13:14:10.650 回答
2
不久前,我们收到了一位客户的类似要求。他们声称 CRM 的数据库不值得信任,并希望安全地存储在 SQL Server 中创建的记录的副本——你猜怎么着——SQL Server。(是的,我们确实理解其中的讽刺意味。他们没有。)
我们解决它的方法是创建一个插件。但是,请记住,仅仅对Create的消息做出反应是行不通的。您需要为三个 CRUD 操作设置一个侦听器(检索不会影响外部数据库,因此它是 C_UD 操作)。
这是主要的Execute方法的框架。
public void Execute(IServiceProvider serviceProvider)
{
Context = GetContextFromProvider(serviceProvider);
Service = GetServiceFromProvider(serviceProvider);
switch (Context.MessageName)
{
case "Create": ExecuteCreate(); break;
case "Update": ExecuteUpdate(); break;
case "Delete": ExecuteDelete(); break;
}
}
在此调度程序之后,您可以实现对其他数据库的实际调用。我想告诉你三个问题。
- 当 CRM 没有为您提供合适的值时,请记住为外部数据库提供合适的值。
- 将插件注册为异步,因为您将与外部资源交谈。
- 考虑实体引用的问题,是否也递归存储它们。
插件构建的演练
链接到 CRM SDK 如果你没有
注册插件的信息
除此之外,我在我的博客中有一个演练(包括代码和结构)。它的 URL,你必须自己弄清楚 - 我不会自我推销,但这与我的名字和 WP 有关。谷歌是你的朋友。:)
于 2013-02-17T14:30:53.297 回答