Dynamics crm 2011 从控制台应用程序查询实体时绕过插件

Dynamics crm 2011 从控制台应用程序查询实体时绕过插件,dynamics-crm-2011,Dynamics Crm 2011,我的插件对字段进行加密/解密。在CRM表单中的字段上工作 在我的控制台应用程序中,检索绕过我的插件,例如,它直接从数据库检索加密值,而不运行插件。调试时,从窗体访问字段时会命中插件中的断点,但从我的控制台程序访问时不会命中断点 我很惊讶我的插件没有从程序中调用。它绕过了我的商业规则 以下是我如何从程序访问实体和字段: private static OrganizationServiceProxy service = null; private static Organizatio

我的插件对字段进行加密/解密。在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"]));
            }
        }
    }

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

结果表明,在查询实体集合时,您必须注册事件检索多个插件。

如果您担心性能,我的建议是将加密数据放在单独的实体中通过查找返回。使用此方法,CRM只需在用户需要访问加密数据时执行Retrieve/RetrieveMultiple插件,而不是每次用户访问主记录时执行。这也将使加密数据的安全性更加容易。

我可以理解为什么它会降低性能。但假设您希望针对CRM运行应用程序,并且希望应用程序强制执行封装在插件中的业务规则。有没有更好的方法来处理这个问题?例如,您是否可以在应用程序中为插件启用RetrieveMultiple步骤,以便只在应用程序期间启用RetrieveMultiple?@LarryMale这是一种可能性,您必须查看插件注册工具的代码,以了解它在做什么。。。在您在评论中描述的情况下,我会将插件中的逻辑抽象为一个业务层类,您可以在这两个地方引用它。这样,插件只需在检索上注册,但在你的应用程序中,你可以应用相同的逻辑循环结果集。我知道你对堆栈溢出还不熟悉,但这里有一个提示,不要用20小时前已经给出的答案回答你自己的问题。您应该将第一个答案标记为答案,并删除您的答案。