15.08.2008, 08:19 | #1 |
Участник
|
Проблема - Запрос с параметром
Стоит задача сделать выборку по Бизнес-партнерам, если атрибут "accountnumber" входит в список кодов (строковый массив).
Реализовал след. образом: Код: string fetch1 = @"<fetch mapping='logical'><entity name='" + entityName + @"'><all-attributes/></entity></fetch>"; FetchXmlToQueryExpressionRequest req = new FetchXmlToQueryExpressionRequest(); req.FetchXml = fetch1; FetchXmlToQueryExpressionResponse resp = (FetchXmlToQueryExpressionResponse)_CrmService.Execute(req); QueryExpression fetchQuery = resp.Query; fetchQuery.EntityName = entityName; fetchQuery.ColumnSet.AddColumn("modifiedon"); ConditionExpression condition = new ConditionExpression(); condition.AttributeName = "accountnumber"; condition.Operator = ConditionOperator.In; condition.Values = codes; fetchQuery.Criteria.AddCondition(condition); RetrieveMultipleRequest fetchQueryReq = new RetrieveMultipleRequest(); fetchQueryReq.Query = fetchQuery; fetchQueryReq.ReturnDynamicEntities = true; RetrieveMultipleResponse fetchQueryResp; QueryExpressionToFetchXmlRequest expression = new QueryExpressionToFetchXmlRequest(); expression.Query = fetchQuery; userquery userquery = new userquery(); try { fetchQueryResp = (RetrieveMultipleResponse)_CrmService.Execute(fetchQueryReq); } catch (Exception ex) { throw ex; } Так вот:
Вопрос, что за ограничение такое? и где его можно снять? |
|
15.08.2008, 17:40 | #2 |
Moderator
|
Надо включить трассировку и посмотреть подробнее что это за ошибка. Вариантов может быть много - ограничение на длинну запроса или даже ограничение SQL сервера...
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
15.08.2008, 18:30 | #3 |
Злыдни
|
Думаю, что проблема в том, что
condition.AttributeName = "accountnumber"; condition.Operator = ConditionOperator.In; condition.Values = codes; транслируется примерно в select ... where accountnumber in (код1, код2, код3), а т.к. у SQL сервера есть ограничение на длину запроса (8 кб по-моему) на больших списках всё падает. Как вариант, если у Вас такие длинные списки кодов, создайте в базе сущности для их хранения и доставайте Ваши сущности через JOIN. |
|
18.08.2008, 07:22 | #4 |
Участник
|
Пока реализовал так, массив codes делить на пачки, чтобы несколько раз посылать запрос - вроде заработало.
|
|