Создание QueryExpression, где поле имени является или A или B

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

QueryByAttribute, кажется, не делает задание, поскольку я не могу указать условие где поле, названное "event_name" = "Событие A" "event_name" = "Событие B".

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

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);

Я ценил бы некоторый совет относительно того, как получить данные, в которых я нуждаюсь.

5
задан shytikov 3 October 2014 в 09:52
поделиться

1 ответ

Объект 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, как показано выше.

6
ответ дан 14 December 2019 в 13:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: