2010-06-16 40 views
5

Tôi đang cố gắng tạo truy vấn Dynamics CRM 4 để tôi có thể nhận các sự kiện lịch được đặt tên là "Sự kiện A" hoặc "Sự kiện B".Tạo QueryExpression trong đó trường tên là A hoặc B

Truy vấnByAttribute dường như không thực hiện công việc vì tôi không thể chỉ định điều kiện mà trường được gọi là "event_name" = "Event A" của "event_name" = "Event B".

Khi sử dụng QueryExpression, tôi đã tìm thấy FilterExpression áp dụng cho Thực thể tham chiếu. Tôi không biết nếu FilterExpression có thể được sử dụng trên thực thể tham chiếu ở tất cả. Ví dụ dưới đây là một cái gì đó giống như những gì tôi muốn đạt được, mặc dù điều này sẽ trả về một tập kết quả rỗng vì nó sẽ đi tìm trong thực thể được gọi là "my_event_response" cho thuộc tính "name". Nó bắt đầu trông giống như tôi sẽ cần phải chạy một số truy vấn để có được điều này nhưng điều này là ít hiệu quả hơn nếu tôi có thể gửi tất cả cùng một lúc.

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

Tôi muốn đánh giá cao một số lời khuyên về cách lấy dữ liệu tôi cần.

Trả lời

6

Đối tượng QueryExpression có thuộc tính Tiêu chí mà bạn có thể đặt. Nếu bạn đang tìm kiếm hồ sơ "my_event" có tên A hoặc B tên, chỉ cần đặt nó lên như thế này:

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

Nếu bạn chỉ tìm kiếm các sự kiện mà có phản ứng, giữ cho phần LinkEntity trong, nhưng di chuyển FilterExpression qua đối tượng QueryExpression như tôi đã ở trên.

Các vấn đề liên quan