从CRM 2011在其他数据库中创建记录

时间:2013-02-17 12:26:34

标签: dynamics-crm-2011

是否有任何解决方案可以从CRM 2011记录中创建其他数据库中的记录?在CRM 2011中创建诸如“成本”之类的记录时,我们希望在Oracle DB中创建记录。可以通过插件完成吗?或者应该为此创建服务? 能否请您为此提供参考或解决方案。 任何帮助将不胜感激。

2 个答案:

答案 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;
  }
}

在此调度程序之后,您可以实现对其他数据库的实际调用。有三个问题我想特别提醒你。

  1. 当CRM没有为您提供合适的值时,请记住为外部数据库提供合适的值。
  2. 将插件注册为异步,因为您将与外部资源通信。
  3. 考虑实体引用的问题,是否也以递归方式存储它们。
  4. Walk-through for plugin construction
    Link to CRM SDK if you haven't got that
    Information on registering the plugin
    除此之外,我在博客中有关于这个主题的演练(包括代码和结构)。它的URL,你必须弄清楚自己 - 我不会自我推销,但它与我的名字和WP有关。谷歌是你的朋友。 :)