private void DistributeCampaign() { Console.WriteLine("=== Creating and Distributing the Campaign ==="); // Create the campaign. var campaign = new Campaign { Name = "Sample Campaign" }; _originalCampaignId = _serviceProxy.Create(campaign); NotifyEntityCreated(Campaign.EntityLogicalName, _originalCampaignId); //<snippetDistributeCampaignFromMarketingList1> // Copy the campaign. var campaignCopyRequest = new CopyCampaignRequest { BaseCampaign = _originalCampaignId }; var copyCampaignResponse = (CopyCampaignResponse)_serviceProxy.Execute(campaignCopyRequest); _campaignId = copyCampaignResponse.CampaignCopyId; Console.WriteLine(" Copied the campaign to new campaign with GUID \r\n\t{{{0}}}", _campaignId); //</snippetDistributeCampaignFromMarketingList1> var activity = new CampaignActivity { Subject = "Sample phone call", ChannelTypeCode = new OptionSetValue((int)CampaignActivityChannelTypeCode.Phone), RegardingObjectId = new EntityReference( Campaign.EntityLogicalName, _campaignId) }; _campaignActivityId = _serviceProxy.Create(activity); NotifyEntityCreated(CampaignActivity.EntityLogicalName, _campaignActivityId); // Find the current user to determine who the owner of the activity should be. var whoAmI = new WhoAmIRequest(); var currentUser = (WhoAmIResponse)_serviceProxy.Execute(whoAmI); //<snippetDistributeCampaignFromMarketingList2> // Add the marketing list created earlier to the campaign. var addListToCampaignRequest = new AddItemCampaignRequest { CampaignId = _campaignId, EntityId = _copiedMarketingListId, EntityName = List.EntityLogicalName, }; _serviceProxy.Execute(addListToCampaignRequest); Console.WriteLine(" Added the marketing list to the campaign."); //</snippetDistributeCampaignFromMarketingList2> //<snippetDistributeCampaignFromMarketingList3> // Add the marketing list created earlier to the campaign activity. var addListToActivityRequest = new AddItemCampaignActivityRequest { CampaignActivityId = _campaignActivityId, ItemId = _copiedMarketingListId, EntityName = List.EntityLogicalName }; _serviceProxy.Execute(addListToActivityRequest); Console.WriteLine(" Added the marketing list to the campaign activity."); //</snippetDistributeCampaignFromMarketingList3> // Create the phone call to use for distribution. var phonecall = new PhoneCall { Subject = "Sample Phone Call" }; //<snippetDistributeCampaignFromMarketingList4> // Distribute and execute the campaign activity. // PostWorkflowEvent signals Microsoft Dynamics CRM to actually create the phone call activities. // Propagate also signals to Microsoft Dynamics CRM to create the phone call activities. // OwnershipOptions indicates whom the created activities should be assigned // to. var distributeRequest = new DistributeCampaignActivityRequest { Activity = phonecall, CampaignActivityId = _campaignActivityId, Owner = new EntityReference( SystemUser.EntityLogicalName, currentUser.UserId), OwnershipOptions = PropagationOwnershipOptions.Caller, PostWorkflowEvent = true, Propagate = true, SendEmail = false, }; var distributeResponse = (DistributeCampaignActivityResponse)_serviceProxy.Execute(distributeRequest); Console.WriteLine(" Distributed and executed the campaign activity to the marketing list."); //</snippetDistributeCampaignFromMarketingList4> //<snippetDistributeCampaignFromMarketingList5> // Retrieve the members that were distributed to. var retrieveMembersRequest = new RetrieveMembersBulkOperationRequest { BulkOperationId = distributeResponse.BulkOperationId, BulkOperationSource = (int)BulkOperationSource.CampaignActivity, EntitySource = (int)EntitySource.Contact, Query = new QueryExpression(Contact.EntityLogicalName) }; var retrieveMembersResponse = (RetrieveMembersBulkOperationResponse) _serviceProxy.Execute(retrieveMembersRequest); Console.WriteLine(" Contacts with the following GUIDs were distributed to:"); //</snippetDistributeCampaignFromMarketingList5> foreach (var member in retrieveMembersResponse.EntityCollection.Entities) { Console.WriteLine("\t{{{0}}}", member.Id); } }