使用 sql 查询创建自定义高级查找

Create a custom advanced find with sql query

我希望能够在 crm 中执行 sql 查询,以便与结果进行交互。它们现在是 SSRS 报告,但我不希望它们是只读的。我对如何做到这一点感到困惑。我找到了这个 Is it possible in Dynamics CRM to run an SQL query like an advanced find and include selection boxes? 但我想要更详细的说明。谢谢!

这是一些 C#,因为我认为它可能必须是一个插件。

   public Class1()
   {
    using (SqlConnection connection = new SqlConnection("Data Source=AAHOASQL;Initial Catalog=DEVAAHOA_MSCRM"))
    using (SqlCommand cmd = new SqlCommand("dbo.BP_GetNearbyContacts", connection))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("ZipCode", zipCode);
        cmd.Parameters.AddWithValue("GivenMileRadius", givenMileRadius);
        connection.Open();
        using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
        {
            adapter.Fill(table);
        }
    }

我要实现的方法是创建一个 HTML 可以从导航菜单启动的 Web 资源。

此 HTML 网络资源将 query CRM using ODATA and the results will be presented in a table make sure your query returns the record's GUID, so you can create a hyperlink which will allow the users to open the record in CRM using URL Addressable Forms and Views

请注意,您需要 get an instance of the CRM context 在您的 HTML Web 资源中用于 ODATA 查询和 URL 可寻址表单。 CRM 上下文将包含有用的信息,例如 CRM 服务器、上下文中的当前用户、CRM 组织。

理论上,您可以使用插件和一些疯狂的黑客来做到这一点...解决方案如下所示:

  1. 创建(或使用现有的)包含您想要的属性的实体 return。 CRM 高级查找将仅定义已定义的属性。因此,如果您有额外的数据想要扩充到 CRM 实体,您将需要在实体上创建适当的属性来存放数据。您只会在 views/advanced 查找中使用它们,但您仍然必须创建它们,并且它仍会在后端的 SQL table 中创建字段。

  2. 创建一个名为 SearchSql 的附加列,它是一个布尔值,始终默认为是,并且从不放置在表单上。

  3. 创建一个在 RetrieveMultiple PreEvent 上触发的插件,它检查 QueryExpression 并确定 SearchSql 是否标记为是并将其存储在共享插件参数中,然后翻转它为 false(因为 CRM 中的所有数据都将字段标记为 false,如果您想 return 说 10 个实体,则具有该约束将 return 0)。

  4. 创建另一个在 RetrieveMultiple PostEvent 上触发的插件。让它检查 SearchSql 共享插件参数。如果它在那里,那么 您可以在插件上下文中读取结果实体,并将其用于 运行 您的 SQL 查询。然后解析 SQL 查询的结果,并在相关实体上填充适当的属性。