Saturday, 17 May 2014

pluginActivities

protected override void Execute(CodeActivityContext executionContext)
        {
            try
            {
                if (executionContext == null)
                {
                    throw new InvalidPluginExecutionException("Context is Null");
                }

                IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
                IWorkflowContext workflowContext = executionContext.GetExtension<IWorkflowContext>();
                IOrganizationService service = serviceFactory.CreateOrganizationService(workflowContext.UserId);

                RetrieveRequest getEmail = new RetrieveRequest();
                getEmail.ColumnSet = new ColumnSet(new string[] { "siml_campaigncommunicationguid" });
                getEmail.Target = new EntityReference("email", workflowContext.PrimaryEntityId);

                RetrieveResponse currEmailResp = (RetrieveResponse)service.Execute(getEmail);

                Entity currEmail = (Entity)currEmailResp.Entity;

                Guid campaignCommunicationId = new Guid(currEmail.Attributes["siml_campaigncommunicationguid"].ToString());
                ////Guid campaignCommunicationId = new Guid("1B8B3934-B4E9-DF11-9307-001E4F330EB3");

                RetrieveRequest req = new RetrieveRequest();
                req.Target = new EntityReference("campaignactivity", campaignCommunicationId);
                req.ColumnSet = new ColumnSet(new string[] { "i5_channel", "subject", "regardingobjectid", "ownerid" });

                RetrieveResponse resp = (RetrieveResponse)service.Execute(req);

                Entity campComm = (Entity)resp.Entity;

                int campaignCommunicationChannel = ((OptionSetValue)campComm.Attributes["i5_channel"]).Value;

                string entityToUse = String.Empty;

                switch (campaignCommunicationChannel)
                {
                    case 1:
                        entityToUse = "letter";
                        break;

                    case 2:
                        entityToUse = "email";
                        break;

                    default:
                        break;
                }

                CampaignCommunicationValidator.Validator camCommValidator = new CampaignCommunicationValidator.Validator(service, campaignCommunicationId);
                List<Entity> contactsInCommunication = camCommValidator.GetValidContacts();

                foreach (Entity recipient in contactsInCommunication)
                {
                    Entity activityParty = new Entity("activityparty");
                    activityParty.Attributes.Add("partyid", new EntityReference("contact", ((Guid)recipient.Attributes["contactid"])));

                    Entity communicationActivity = new Entity(entityToUse);

                    communicationActivity.Attributes.Add("subject", campComm.Attributes["subject"].ToString());
                    communicationActivity.Attributes.Add("to", activityParty);
                    communicationActivity.Attributes.Add("description", "Campaign Communication Generated Activity.");
                    communicationActivity.Attributes.Add("regardingobjectid", new EntityReference("contact", ((Guid)recipient.Attributes["contactid"])));
                    communicationActivity.Attributes.Add("ownerid", new EntityReference("systemuser", ((EntityReference)campComm.Attributes["ownerid"]).Id));

                    service.Create(communicationActivity);

                    Thread.Sleep(1000);
                }
            }
            catch (SoapException ex)
            {
                WriteMsg(String.Format("SoapEx: {0}", ex.Detail.InnerText));
                WriteMsg(ex.StackTrace);
            }
            catch (Exception ex)
            {
                WriteMsg(String.Format("Ex: {0}", ex.Message));
                WriteMsg(ex.StackTrace);
            }
        }

        private void WriteMsg(string message)
        {
            Trace.TraceInformation("{0} - {1}", DateTime.Now.ToString("yyyy/MM/dd H:mm:ss"), message);
        }
    }

No comments:

Post a Comment