2010-06-16 12 views
5

J'essaie de générer une requête Dynamics CRM 4 afin que je puisse obtenir des événements de calendrier nommés "Event A" ou "Event B".Construction d'un champ QueryExpression où le nom est A ou B

Un QueryByAttribute ne semble pas effectuer le travail car je ne peux pas spécifier une condition où le champ appelé "event_name" = "Event A" de "event_name" = "Event B".

Lors de l'utilisation de QueryExpression, j'ai trouvé que FilterExpression s'applique à l'entité de référencement. Je ne sais pas si FilterExpression peut être utilisé sur l'entité référencée. L'exemple ci-dessous est quelque chose comme ce que je veux réaliser, bien que cela retourne un ensemble de résultats vide car il ira chercher dans l'entité appelée "my_event_response" pour un attribut "name". Il commence à sembler que j'aurai besoin de lancer plusieurs requêtes pour l'obtenir mais c'est moins efficace que si je peux tout soumettre en même temps.

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

J'apprécierais quelques conseils sur la façon d'obtenir les données dont j'ai besoin.

Répondre

6

L'objet QueryExpression possède une propriété Criteria que vous pouvez définir. Si vous êtes à la recherche d'enregistrements « my_event » qui ont le nom A ou le nom B, juste le configurer comme ceci:

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

Si vous cherchez uniquement pour les événements qui ont des réponses, garder la partie LinkEntity dans, mais déplacez le FilterExpression sur l'objet QueryExpression comme je l'ai ci-dessus.