CRM实施随笔——Dynamics CRM Plugin中的Retrieve以及RetrieveMultiple

对于一些逻辑可能需要在查询后处理上下文中的数据信息,同时也就有可能需要根据字段值去判断。可参照数据脱敏的Plugin中逻辑处理。

比如当我们需要表单字段值判断,走不同逻辑,但是我们每次查询的时候上下文中可能并不包含我们需要的字段,这样我们就需要再次去查询该字段的值,那有没一种方式就是,我们查询的时候没有包含该字段,但是返回结果中或者上下文中一定包含该字段呢?

这就需要用到在执行Retrieve以及RetrieveMultiple消息前的Plugin了。

注意:注册的时候一定要是Pre

下面代码就是在Retrieve以及RetrieveMultiple前,把new_channelproduct字段加到列中,已确保Plugin的上下文中可以直接判断改字段的值。

protected override void ExecutePlugin()
        {
            try
            {
                if (Context.MessageName.ToLower() == "retrieve")
                {
                    if (Context.InputParameters["ColumnSet"] is ColumnSet)
                    {
                        var cs = (ColumnSet)Context.InputParameters["ColumnSet"];
                        cs.AddColumn("new_channelproduct");

                    }
                }
                else if(Context.MessageName.ToLower() == "retrievemultiple")
                {
                    if (Context.InputParameters["Query"] is FetchExpression)
                    {
                        QueryExpression query = new QueryExpression();
                        FetchExpression fetch = (FetchExpression)Context.InputParameters["Query"];
                        var conversionRequest = new FetchXmlToQueryExpressionRequest
                        {
                            FetchXml = fetch.Query
                        };
                        var conversionResponse = (FetchXmlToQueryExpressionResponse)OrganizationServiceAdmin.Execute(conversionRequest);
                        query = conversionResponse.Query;
                        if (query.EntityName == "new_ord_priceline")
                        {
                            query.ColumnSet.AddColumn("new_channelproduct");
                            var converRequest = new QueryExpressionToFetchXmlRequest
                            {
                                Query = query
                            };
                            var converResponse = (QueryExpressionToFetchXmlResponse)OrganizationServiceAdmin.Execute(converRequest);
                            string fetchXml = converResponse.FetchXml;
                            fetch.Query = fetchXml;
                        }
                    }
                    else if (Context.InputParameters["Query"] is QueryExpression)
                    {
                        QueryExpression query = (QueryExpression)Context.InputParameters["Query"];
                        if (query.EntityName == "new_ord_priceline")
                        {
                            query.ColumnSet.AddColumn("new_channelproduct");
                        }
                    }
                }
                //throw new InvalidPluginExecutionException("wgr:" + JsonHelper.Serialize(Context.InputParameters));
            }
            catch (InvalidPluginExecutionException ex)
            {
                throw new InvalidPluginExecutionException(ex.Message);
            }
        }

 

上一篇:安卓day30页面跳转和数据传递


下一篇:day30.JDBC连接池&JDBCTemplate