FetchXml查询会生成“通用SQL错误”但是如果我切换链接的实体会有效吗?

时间:2015-05-04 08:33:10

标签: dynamics-crm fetchxml dynamics-crm-2015

我正在尝试查询“vanilla”CRM 2015的产品目录,我的最终目标是按价格列表和名称子字符串检索有效产品,目前我正在对我的数据进行硬编码,如下所示:

PriceLevel: hardcoded GUID
Name: hardcoded "a"

生成的XML是:

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true" count="50">
    <entity name="productpricelevel" >
        <attribute name="uomid" />
        <filter type="and">
            <condition attribute="pricelevelid" operator="eq" uitype="pricelevel" value="{7080964d-85df-e411-80ba-00155d0b0c38}" />
        </filter>
        <link-entity name="product" from="productid" to="productid" alias="ac" >
            <attribute name="name" />
            <attribute name="productnumber" />
            <order attribute="productnumber" descending="false" />
            <filter type="and">
                <condition attribute="name" operator="like" value="a" />
                <condition attribute="statecode" operator="eq" value="0" />
            </filter>
        </link-entity>
    </entity>
</fetch>

当我尝试执行查询时,我得到了Generic SQL Error。然后我查看了跟踪日志,发现了这个:

Exception when executing query: select DISTINCT "productpricelevel0".UoMId as "uomid", "productpricelevel0".UoMIdName as "uomidname", 
coalesce("LL0".Label,"ac".Name ) as "ac.name", "ac".ProductNumber as "ac.productnumber"     
from     ProductPriceLevel as "productpricelevel0" join Product as "ac" 
on ("productpricelevel0".ProductId  =  "ac".ProductId and ( coalesce("LL0".Label,"ac".Name)  like 'a' and "ac".StateCode = 0))     
left outer join BusinessDataLocalizedLabel as "LL0" on ("LL0".ObjectId = "ac".ProductId and "LL0".LanguageId = 1033 and "LL0".ObjectColumnNumber = 6 )     
where     ("productpricelevel0".PriceLevelId = '7080964d-85df-e411-80ba-00155d0b0c38') order by
 "ac".ProductNumber asc 

Exception: System.Data.SqlClient.SqlException (0x80131904): The multi-part identifier "LL0.Label" could not be bound

为了识别模式,我改变了JOIN,最后得到了这个XML:

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true" count="50" >
    <entity name="product" >
            <attribute name="name" />
            <attribute name="productnumber" />
            <order attribute="productnumber" descending="false" />
            <filter type="and" >
                <condition attribute="name" operator="like" value="a" />
                <condition attribute="statecode" operator="eq" value="0" />
            </filter>
        <link-entity name="productpricelevel" from="productid" to="productid" alias="ac" >
        <attribute name="uomid" />
        <filter type="and" >
            <condition attribute="pricelevelid" operator="eq" uitype="pricelevel" value="{7080964d-85df-e411-80ba-00155d0b0c38}" />
        </filter>
        </link-entity>
    </entity>
</fetch>

这一次,我按预期得到了我的结果,没有错误。

组织是新的,只包含Sitemap / HTML / JS自定义(我查询的实体尚未定制),1033是基本语言,安装并启用了另一种语言,但任何语言都没有使用系统的2个用户。

第一种情况发生了什么?

更新:针对2013年组织的第一个查询 。这开始感觉像是一个错误。

1 个答案:

答案 0 :(得分:3)

这绝对是个错误。我猜微软改变了将QueryBase查询转换为T-SQL的引擎。

本周我们遇到了链接实体的问题。这是关于以下条件:

.AddCondition("statuscode", ConditionOperator.In, new object[] { 1, 2, 3 });

当应用于QueryExpression主要实体时,将按预期处理该条件。在链接的实体上应用时,它会失败。在以前版本的Dynamics CRM中,它适用于两种情况。