ConditionOperator.In演算子を使用し、値として文字列を渡すことで、フィルターを使用してQueryExpressionを記述しています。ただし、CRMサーバーでトレースを使用すると、生成されたSQLを表示でき、文字列が「1、2、3」に置き換えられます。
具体的には、このコード:
var filter = new FilterExpression(LogicalOperator.And);
filter.AddCondition("primaryobjecttypecode", ConditionOperator.In, "account", "contact");
var query = new QueryExpression("sdkmessagefilter")
{
ColumnSet = new ColumnSet("primaryobjecttypecode"),
Criteria = filter,
LinkEntities =
{
new LinkEntity()
{
LinkFromEntityName = "sdkmessagefilter",
LinkFromAttributeName = "sdkmessageid",
LinkToEntityName = "sdkmessage",
LinkToAttributeName = "sdkmessageid",
Columns = new ColumnSet("name"),
},
}
};
var response = orgProxy.RetrieveMultiple(query);
このSQLの結果:
select top 5001
"sdkmessagefilter0".PrimaryObjectTypeCode as "primaryobjecttypecode",
"sdkmessage1".Name as "sdkmessage1.name"
from
SdkMessageFilter as "sdkmessagefilter0"
join SdkMessage as "sdkmessage1"
on ("sdkmessagefilter0".SdkMessageId = "sdkmessage1".SdkMessageId)
where
((("sdkmessagefilter0".PrimaryObjectTypeCode in (1, 2))))
order by "sdkmessagefilter0".SdkMessageFilterId asc
最終的に、これにより、文字列として「1」を大文字と小文字を区別できなかったため、SqlExceptionが発生します。
{"account"、 "contact"}文字列値が{1、2} int値に変わるのはなぜですか?
サーバーでDynamicsCRM2011 UR 10を実行していて、アプリでSDK5.0.9689.2166を使用しています