9

有什么方法可以创建该查询吗?

在此处输入图像描述

我需要来自地址和联系地址的数据,通常我可以将它们组合起来,Combine OR但在这种情况下不能。

我想我必须用PreExecute()方法编写新插件,获取我的查询,解析数据,然后手动获取相等的地址,或者还有其他方法吗?

4

3 回答 3

3

我解决了这个问题。

  • Execute()使用方法和一些数据解析方法创建用于预验证的插件。
  • 在实体视图中添加一些带有GUID.
  • 如果插件在您的视图中找到 guid,它将为您的实体获取 fetchxml 查询,而第二个查询实体将显示默认视图。
  • 解析数据以获取您想要为用户显示的内容。
  • 注册你的插件。
  • 利润。

PS 在重构和客户批准后,我将在一两天内添加源代码。

编辑:

首先 - 您需要创建新的GUID并添加字符串字段以使用该 guid 进行查看(最好对用户隐藏它)。RetrieveMultiple创建带有操作和Post验证的插件(在Pre操作中您可能会丢失更改)

在 plugin: main 方法 RetrieveMultiple中,它将获取上下文和服务,您将从那里进行查询,然后您需要获取 fetchXml 并检查是否有您的GUID.

            string fetchXml = string.Empty;
            var query = context.InputParameters["Query"] as QueryExpression;
            var fetchQuery = context.InputParameters["Query"] as FetchExpression;

                if (query == null)
                {
                    if (fetchQuery == null)
                    {
                    return;
                    }
               fetchXml = fetchQuery.Query;
                }

                // Convert query to a fetch expression for processing and apply filter
                else
                {
                    fetchXml =
                        ((QueryExpressionToFetchXmlResponse)
                            service.Execute(new QueryExpressionToFetchXmlRequest {Query = query})).FetchXml;
                }

                if (fetchXml.Contains(OpportunityFilterGuid))
            {
                    ApplyFilter(context, service, query);
                }
            }

在您的ApllyFilter方法中,您需要:

  1. 从用户那里获取查询(他可以添加一些新的文件)。

  2. 使用 删除您的字段GUID

  3. 执行查询。

  4. 删除可能与您的OR陈述冲突的文件。

  5. 添加link-entity到查询。

  6. 执行查询。

  7. 将接收到的实体从第二个查询添加到第一个。

  8. 使用 LINQ 选择不重复的实体。

     collectionOne.Entities.GroupBy(oppId => oppId.Id).Select(opp => opp.First())
    
  9. 将该数据发送给客户端。

于 2013-08-12T07:55:38.310 回答
3

我不知道有什么办法可以做到以上。

而不是写一个插件,但我会做一个报告。

我能想到的最简单的方法是在没有过滤器的情况下执行 fetchXML。

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true">
  <entity name="account">
    <attribute name="name" />
    <attribute name="primarycontactid" />
    <attribute name="telephone1" />
    <attribute name="accountid" />
    <attribute name="address1_city" />
    <order attribute="name" descending="false" />
    <link-entity name="contact" from="parentcustomerid" to="accountid" alias="ac">
        <attribute name="address1_city" />
    </link-entity>
  </entity>
</fetch>

然后使用切换报告中行的可见性

=Fields!address1_city.Value="Sydney" Or Fields!ac_address1_city.Value="Sydney"

显然你可以用 Parameter 替换 Sydney

于 2013-08-02T04:57:07.573 回答
0

简而言之,没有办法通过高级查找来完成您所要求的事情。

您提出的示例查询只会向您显示关联联系人具有地址匹配的帐户(以及显然具有地址匹配的帐户)。在高级查找中关联另一个实体后,您将只能看到具有关联记录的父级 - 无法执行(有效的)外部连接。

您唯一的选择实际上是在 Silverlight 或 HTML 中构建一些东西并将其添加为 Web 资源 - 一旦进入该代码,您几乎可以显示任何您想要的东西。正如其他人所建议的,这在报告中是可能的。

于 2013-08-12T04:33:33.530 回答