2010-06-16 16 views
5

Próbuję utworzyć zapytanie Dynamics CRM 4, aby móc otrzymywać zdarzenia kalendarza o nazwie "Event A" lub "Event B".Budowanie QueryExpression, gdzie pole nazwy to A lub B

A QueryByAttribute nie wydaje się wykonywać zadania, ponieważ nie mogę określić warunku, w którym pole o nazwie "event_name" = "Event A" "event_name" = "Event B".

Podczas korzystania z QueryExpression znalazłem FilterExpression stosuje się do Referencing Entity. Nie wiem, czy FilterExpression może być w ogóle użyta w Entired Entity. Poniższy przykład jest podobny do tego, co chcę osiągnąć, chociaż zwróciłoby to pusty zestaw wyników, ponieważ będzie szukało elementu o nazwie "my_event_response" dla atrybutu "name". Wygląda na to, że będę musiał wykonać kilka zapytań, aby to uzyskać, ale jest to mniej efektywne niż wtedy, gdy mogę przesłać je wszystkie naraz.

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

Byłbym wdzięczny za porady, jak zdobyć potrzebne dane.

Odpowiedz

6

Obiekt QueryExpression ma właściwość Kryteria, którą można ustawić. Jeśli szukasz „my_event” rekordy, które mają wymienić lub nazwa B, po prostu ustawić go tak:

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

jeśli tylko patrząc na wydarzenia, które mają odpowiedzi, zachować część LinkEntity w, ale przenieś FilterExpression na obiekt QueryExpression, tak jak powyżej.

Powiązane problemy