This sample demonstrates doing a simple JOIN to the activityparty entity using a query expression.
1: //# [Use a Join to Retrieve Activities by Participant ]
2: using System;
3: using CrmSdk;
4: using Microsoft.Crm.Sdk.Utility;
5: 6: namespace Microsoft.Crm.Sdk.HowTo
7: {8: /// <summary>
9: /// This sample shows how to retrieve all activities where the user is a participant.
10: /// </summary>
11: public class RetrieveActivitiesByParticipant
12: {13: static void Main(string[] args)
14: {15: // TODO: Change the server URL and Organization to match your CRM Server and CRM Organization
16: RetrieveActivitiesByParticipant.Run("http://localhost:5555", "CRM_SDK");
17: } 18: 19: public static bool Run(string crmServerUrl, string orgName)
20: {21: // Set up the CRM Service.
22: CrmService service = CrmServiceUtility.GetCrmService(crmServerUrl, orgName); 23: 24: #region Setup Data Required for this Sample
25: 26: bool success = false;
27: 28: #endregion
29: 30: try
31: {32: // Get the user information.
33: WhoAmIRequest userRequest = new WhoAmIRequest();
34: WhoAmIResponse user = (WhoAmIResponse) service.Execute(userRequest); 35: 36: // Create the ConditionExpression.
37: ConditionExpression condition = new ConditionExpression();
38: 39: // Set the condition for the retrieval to retrieve all activities that belong to the current user.
40: condition.AttributeName = "partyid";
41: condition.Operator = ConditionOperator.Equal;42: condition.Values = new string [] {user.UserId.ToString()};
43: 44: // Build the filter based on the condition.
45: FilterExpression filter = new FilterExpression();
46: filter.FilterOperator = LogicalOperator.And;47: filter.Conditions = new ConditionExpression[] {condition};
48: 49: // Create a LinkEntity to link the activity participant to the activity.
50: LinkEntity link = new LinkEntity();
51: 52: // Set the properties of the LinkEntity.
53: link.LinkCriteria = filter; 54: 55: // Set the linking entity to be the activity.
56: link.LinkFromEntityName = EntityName.activitypointer.ToString(); 57: 58: // Set the attribute being linked to to be the activityid.
59: link.LinkFromAttributeName = "activityid";
60: 61: // Set the entity being linked to to be the activityparty.
62: link.LinkToEntityName = EntityName.activityparty.ToString(); 63: 64: // Set the attribute linking to the activityparty to be the activityid.
65: link.LinkToAttributeName = "activityid";
66: 67: // Create the query.
68: QueryExpression query = new QueryExpression();
69: 70: // Set the properties of the query.
71: query.EntityName = EntityName.activitypointer.ToString();72: // Be aware that using AllColumns may adversely affect
73: // performance and cause unwanted cascading in subsequent
74: // updates. A best practice is to retrieve the least amount of
75: // data required.
76: query.ColumnSet = new AllColumns();
77: query.LinkEntities = new LinkEntity[] {link};
78: 79: // Create the request object.
80: RetrieveMultipleRequest retrieve = new RetrieveMultipleRequest();
81: 82: // Set the properties of the request object.
83: retrieve.Query = query; 84: 85: // Execute the request.
86: RetrieveMultipleResponse retrieved = (RetrieveMultipleResponse) service.Execute(retrieve); 87: 88: #region check success
89: 90: if ((retrieved.BusinessEntityCollection.EntityName.ToLower().Equals("activitypointer")))
91: {92: success = true;
93: } 94: 95: #endregion
96: }97: catch (System.Web.Services.Protocols.SoapException)
98: {99: // Add your error handling code here.
100: } 101: 102: return success;
103: } 104: } 105: }