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: }