4

「バニラ」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>

今回は、期待どおりの結果が得られ、エラーはありませんでした。

組織は新しく、サイトマップ/HTML/JS のカスタマイズのみが含まれています (私が照会しているエンティティはまだカスタマイズされていません)。1033 はベース言語です。別の言語がインストールされて有効になっていますが、2 つの言語のいずれにも使用されていません。システムのユーザー。

最初のケースでは何が起こっていますか?

UPDATE : 最初のクエリは、2013 年の組織に対して機能します。これはバグのように感じ始めています。

4

1 に答える 1

3

これは間違いなくバグです。QueryBaseMicrosoft は、クエリを T-SQL に変換するエンジンを変更したと思います。

今週、リンクされたエンティティに問題がありました。以下の条件についてでした。

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

のプライマリエンティティに適用するQueryExpressionと、条件は期待どおりに処理されます。リンクされたエンティティに適用すると失敗します。以前のバージョンの Dynamics CRM では、両方のシナリオで機能します。

于 2015-05-06T11:48:01.403 に答える