获取导致检索多个请求的查找-Dynamics 365插件

时间:2019-02-04 16:35:51

标签: c# dynamics-crm microsoft-dynamics

我正在使用术前检索多个插件为帐户子网格查找添加条件。这可以正常工作,但是它适用于对帐户实体的所有查询。我希望它仅在用户访问一种形式的一个子网格内的查找时才适用。有什么方法可以检索触发查询的查询?或者,是否可以通过其他方式实现我想做的任何事情?这样做的目的是过滤可以添加到子网格中的帐户。

这是我的代码:

public class FilterAversedSuppliers : IPlugin
    {

        public void Execute(IServiceProvider serviceProvider)
        {
            //Extract the tracing service for use in debugging sandboxed plug-ins.
            ITracingService tracingService =
                (ITracingService)serviceProvider.GetService(typeof(ITracingService));

            // Obtain the execution context from the service provider.
            IPluginExecutionContext context = (IPluginExecutionContext)
                serviceProvider.GetService(typeof(IPluginExecutionContext));

            // The InputParameters collection contains all the data passed in the message request.
            if (context.InputParameters.Contains("Query") &&
                context.InputParameters["Query"] is QueryExpression)
            {

                try
                {
                    QueryExpression objQueryExpression = (QueryExpression)context.InputParameters["Query"];

                    ConditionExpression condition = new ConditionExpression()
                    {
                        AttributeName = "customertypecode",
                        Operator = ConditionOperator.Equal,
                        Values = { 4 }
                    };

                    objQueryExpression.Criteria.AddCondition(condition);

                    tracingService.Trace("Custom Filter Added");
                }
                catch (FaultException<OrganizationServiceFault> ex)
                {
                    throw new InvalidPluginExecutionException("An error occurred in the FollowupPlugin plug-in.", ex);
                }

                catch (Exception ex)
                {
                    tracingService.Trace("FollowupPlugin: {0}", ex.ToString());
                    throw;
                }
            }

        }
    }

1 个答案:

答案 0 :(得分:0)

在查找视图的条件上,添加类似“名称”等于“ FilterMe”的内容。

现在在您的插件中,检查传入的fetchxml查询。如果它包含您的特殊条件,则您知道要应用特殊过滤。不要忘记从代码中的查询中删除特殊条件。

现在所有其他查询都不应触发您的特殊过滤器。