是否有任何解决方案可以从CRM 2011记录中创建其他数据库中的记录?在CRM 2011中创建诸如“成本”之类的记录时,我们希望在Oracle DB中创建记录。可以通过插件完成吗?或者应该为此创建服务? 能否请您为此提供参考或解决方案。 任何帮助将不胜感激。
答案 0 :(得分:2)
你可以使用插件在另一个系统中创建一个记录,虽然你需要考虑同步并确保你没有重复,但它当然可以完成。
可以找到有关插件的教程here。
您需要编写一个在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();
}
}
这应该足以让你开始
答案 1 :(得分:2)
前一段时间我们收到了客户的类似要求。他们声称CRM的数据库不值得信任,并希望安全地存储创建的记录副本 - 猜测是什么 - SQL Server也是如此。 (是的,我们确实理解具有讽刺意味。他们没有。)
我们解决它的方法是创建一个插件。但是,请记住,只是对 Create 的消息做出反应并不会真正做到。您需要为三个CRUD操作设置一个监听器(检索不会影响外部数据库,因此它更像是C_UD操作)。
这是主执行方法的骨架。
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;
}
}
在此调度程序之后,您可以实现对其他数据库的实际调用。有三个问题我想特别提醒你。
Walk-through for plugin construction
Link to CRM SDK if you haven't got that
Information on registering the plugin
除此之外,我在博客中有关于这个主题的演练(包括代码和结构)。它的URL,你必须弄清楚自己 - 我不会自我推销,但它与我的名字和WP有关。谷歌是你的朋友。 :)