对于一些逻辑可能需要在查询后处理上下文中的数据信息,同时也就有可能需要根据字段值去判断。可参照数据脱敏的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); } }