0

我的插件加密/解密一个字段。在 CRM 表单中的现场工作。

在我的控制台应用程序中,检索绕过了我的插件,例如,它直接从数据库中检索加密值而不运行插件。调试时,从表单访问该字段时会命中插件中的断点,但从我的控​​制台程序访问时不会命中它们。

我很惊讶我的插件不是从程序中调用的。它绕过了我的业务规则。

这是我从程序中访问实体和字段的方式:

    private static OrganizationServiceProxy service = null;
    private static OrganizationServiceContext orgSvcContext = null;
    public static void RetrieveSSNs()
    {
        var query = orgSvcContext.CreateQuery("bpa_consumer");
        foreach (Entity consumer in query)
        {
            if (consumer.Attributes.Contains("bpa_ssn"))
            {
                string ssn = consumer["bpa_ssn"].ToString();
                Console.WriteLine(string.Format("Consumer \"{0}\" has SSN {1}", consumer.Attributes["bpa_name"], ssn));
            }
            else
            {
                Console.WriteLine(string.Format("Consumer \"{0}\" doesn't have a SSN", consumer.Attributes["bpa_name"]));
            }
        }
    }
4

3 回答 3

3

我猜你在 Retrieve 方法上注册了插件?如果是这样,请在 RetrieveMultiple 上添加另一个相同的注册。这应该让你的插件在你的 foreach 上执行。我应该警告你,从性能的角度来看,这是一件非常危险的事情......

于 2012-11-26T20:19:38.773 回答
0

如果您担心性能,我的建议是将加密数据放入一个单独的实体中并进行查找。使用这种方法,CRM 只需在用户需要访问加密数据时执行 Retrieve/RetrieveMultiple 插件,而不是每次用户访问主记录时。这也将更容易保护加密数据。

于 2012-11-30T19:03:10.783 回答
-1

事实证明,当您查询实体集合时,您必须为事件 RetrieveMultiple 注册您的插件。

于 2012-11-27T15:57:20.930 回答