2010-06-16 1 views
5

Ich versuche, eine Dynamics CRM 4 Abfrage erstellen, damit ich Kalenderereignisse erhalten kann, die entweder als "Ereignis A" oder "Ereignis B" bezeichnet.Erstellen eines QueryExpression, wo Name Feld ist entweder A oder B

Ein QueryByAttribute scheint den Job nicht zu tun, da ich keine Bedingung angeben kann, wo das Feld namens "event_name" = "Event A" von "event_name" = "Event B".

Wenn ich den QueryExpression verwende, habe ich festgestellt, dass der FilterExpression für die Referencing Entity gilt. Ich weiß nicht, ob die FilterExpression überhaupt für die referenzierte Entität verwendet werden kann. Das folgende Beispiel ist etwas, was ich erreichen möchte, obwohl dies eine leere Ergebnismenge zurückgeben würde, da es in der Entität "my_event_response" nach einem "name" -Attribut sucht. Es sieht so aus, als würde ich mehrere Abfragen ausführen müssen, um das zu bekommen, aber das ist weniger effizient, als wenn ich alles auf einmal abliefern könnte.

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

Ich würde mich über einige Ratschläge freuen, wie ich die Daten bekomme, die ich brauche.

Antwort

6

Das QueryExpression-Objekt verfügt über eine Criteria-Eigenschaft, die Sie festlegen können. Wenn Sie sich für „mein_event“ Aufzeichnungen suchen, der Name A oder B Namen haben, legen Sie es so wie auf den Punkt:

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

Wenn Sie nur für Veranstaltungen suchen, Antworten haben, halten Sie den LinkEntity an, aber verschiebe die FilterExpression wie oben beschrieben auf das QueryExpression-Objekt.

Verwandte Themen