2010-06-16 7 views
5

Sto tentando di creare una query di Dynamics CRM 4 in modo da ottenere eventi del calendario denominati "Evento A" o "Evento B".Creazione di un'espressione di query in cui il campo del nome è A o B

A QueryByAttribute non sembra eseguire il lavoro in quanto non è possibile specificare una condizione in cui il campo denominato "event_name" = "Evento A" di "event_name" = "Evento B".

Quando si utilizza QueryExpression, ho trovato che FilterExpression si applica all'entità di riferimento. Non so se FilterExpression può essere utilizzato sull'entità di riferimento. L'esempio che segue è qualcosa di simile a ciò che voglio ottenere, sebbene ciò restituisca un set di risultati vuoto mentre andrà a cercare nell'entità chiamata "my_event_response" per un attributo "nome". Sta cominciando a sembrare che avrò bisogno di eseguire diverse query per ottenere questo, ma questo è meno efficiente di se posso inviarlo tutto in una volta.

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

Apprezzerei qualche consiglio su come ottenere i dati di cui ho bisogno.

risposta

6

L'oggetto QueryExpression ha una proprietà Criteria che è possibile impostare. Se siete alla ricerca di record "my_event" che hanno nome A o B Nome, basta configurarlo in questo modo:

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

se siete solo alla ricerca di eventi che hanno le risposte, tenere la parte LinkEntity in, ma sposta FilterExpression sull'oggetto QueryExpression come sopra.

Problemi correlati