Я пытаюсь создать запрос динамики 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);
Я ценил бы некоторый совет относительно того, как получить данные, в которых я нуждаюсь.
Объект 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, как показано выше.