Построение выражения QueryExpression, в котором поле имени равно A или B - PullRequest
5 голосов
/ 16 июня 2010

Я пытаюсь создать запрос Dynamics CRM 4, чтобы я мог получать события календаря с именами «Событие A» или «Событие B».

Кажется, что QueryByAttribute не выполняет эту работу, поскольку я не могу указать условие, когда поле с именем "имя_ события" = "Событие А" из "имя_ события" = "Событие Б".

При использовании QueryExpression я обнаружил, что FilterExpression применяется к объекту ссылки. Я не знаю, можно ли вообще использовать FilterExpression для ссылочной сущности. Приведенный ниже пример напоминает то, чего я хочу достичь, хотя при этом будет возвращен пустой набор результатов, так как он будет искать в сущности с именем «my_event_response» атрибут «name». Похоже, мне нужно будет выполнить несколько запросов, чтобы получить это, но это менее эффективно, чем если бы я мог отправить все сразу.

ColumnSet columns = new ColumnSet();
columns.Attributes = new string[]{ "event_name", "eventid", "startdate", "city" };

ConditionExpression eventname1 = new ConditionExpression();
eventname1.AttributeName = "event_name";
eventname1.Operator = ConditionOperator.Equal;
eventname1.Values = new string[] { "Event A" };

ConditionExpression eventname2 = new ConditionExpression();
eventname2.AttributeName = "event_name";
eventname2.Operator = ConditionOperator.Equal;
eventname2.Values = new string[] { "Event B" };

FilterExpression filter = new FilterExpression();
filter.FilterOperator = LogicalOperator.Or;
filter.Conditions = new ConditionExpression[] { eventname1, eventname2 };

LinkEntity link = new LinkEntity();

link.LinkCriteria = filter;

link.LinkFromEntityName = "my_event";
link.LinkFromAttributeName = "eventid";

link.LinkToEntityName = "my_event_response";
link.LinkToAttributeName = "eventid";

QueryExpression query = new QueryExpression();
query.ColumnSet = columns;
query.EntityName = EntityName.mbs_event.ToString();
query.LinkEntities = new LinkEntity[] { link };

RetrieveMultipleRequest request = new RetrieveMultipleRequest();
request.Query = query;

return (RetrieveMultipleResponse)crmService.Execute(request);

Буду признателен за советы о том, как получить нужные мне данные.

1 Ответ

6 голосов
/ 16 июня 2010

Объект QueryExpression имеет свойство Criteria, которое вы можете установить.Если вы ищете записи «my_event» с именем A или именем B, просто установите их следующим образом:

ColumnSet columns = new ColumnSet();
columns.Attributes = new string[]{ "event_name", "eventid", "startdate", "city" };

ConditionExpression eventname1 = new ConditionExpression();
eventname1.AttributeName = "event_name";
eventname1.Operator = ConditionOperator.Equal;
eventname1.Values = new string[] { "Event A" };

ConditionExpression eventname2 = new ConditionExpression();
eventname2.AttributeName = "event_name";
eventname2.Operator = ConditionOperator.Equal;
eventname2.Values = new string[] { "Event B" };

FilterExpression filter = new FilterExpression();
filter.FilterOperator = LogicalOperator.Or;
filter.Conditions = new ConditionExpression[] { eventname1, eventname2 };

QueryExpression query = new QueryExpression();
query.ColumnSet = columns;
query.EntityName = EntityName.mbs_event.ToString();
query.Criteria = filter;

RetrieveMultipleRequest request = new RetrieveMultipleRequest();
request.Query = query;

return (RetrieveMultipleResponse)crmService.Execute(request);

Если вы ищете только события, которые имеют ответы, оставьте часть LinkEntityв, но переместите FilterExpression к объекту QueryExpression, как у меня выше.

...