protected override void ExecuteCrmWorkFlowActivity(CodeActivityContext context, LocalWorkflowContext localContext) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (localContext == null) { throw new ArgumentNullException(nameof(localContext)); } EntityReference emailToSend = EmailToSend.Get(context); Guid roleId = IsGuid(RecipientRole.Get(context)); bool sendEmail = SendEmail.Get(context); if (roleId == Guid.Empty) { throw new InvalidWorkflowException("Invalid Role GUID"); } List <Entity> toList = new List <Entity>(); Entity email = RetrieveEmail(localContext.OrganizationService, emailToSend.Id); if (email == null) { UsersAdded.Set(context, 0); return; } //Add any pre-defined recipients specified to the array foreach (Entity activityParty in email.GetAttributeValue <EntityCollection>("to").Entities) { toList.Add(activityParty); } EntityCollection users = GetRoleUsers(localContext.OrganizationService, roleId); toList = ProcessUsers(users, toList); //Update the email email["to"] = toList.ToArray(); localContext.OrganizationService.Update(email); //Send if (sendEmail) { SendEmailRequest request = new SendEmailRequest { EmailId = emailToSend.Id, TrackingToken = string.Empty, IssueSend = true }; localContext.OrganizationService.Execute(request); } UsersAdded.Set(context, toList.Count); }
private void LoadRecipientRole() { foreach (string name in Enum.GetNames(typeof(RecipientRoles))) { using (var uow = new UnitOfWork(this.Session.DataLayer)) { if (uow.FindObject <RecipientRole>(CriteriaOperator.Parse("Recipient == ?", name)) == null) { RecipientRole recipient = new RecipientRole(uow) { Recipient = name }; uow.CommitChanges(); } } } }
protected override void Execute(CodeActivityContext executionContext) { ITracingService tracer = executionContext.GetExtension <ITracingService>(); IWorkflowContext context = executionContext.GetExtension <IWorkflowContext>(); IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>(); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); try { EntityReference emailToSend = EmailToSend.Get(executionContext); Guid roleId = IsGuid(RecipientRole.Get(executionContext)); bool sendEmail = SendEmail.Get(executionContext); if (roleId == Guid.Empty) { tracer.Trace("Invalid Role GUID"); throw new InvalidWorkflowException("Invalid Role GUID"); } List <Entity> toList = new List <Entity>(); Entity email = RetrieveEmail(service, emailToSend.Id); if (email == null) { UsersAdded.Set(executionContext, 0); return; } //Add any pre-defined recipients specified to the array foreach (Entity activityParty in email.GetAttributeValue <EntityCollection>("to").Entities) { toList.Add(activityParty); } EntityCollection users = GetRoleUsers(service, roleId); toList = ProcessUsers(users, toList); //Update the email email["to"] = toList.ToArray(); service.Update(email); //Send if (sendEmail) { SendEmailRequest request = new SendEmailRequest { EmailId = emailToSend.Id, TrackingToken = string.Empty, IssueSend = true }; service.Execute(request); } UsersAdded.Set(executionContext, toList.Count); } catch (Exception ex) { tracer.Trace("Exception: {0}", ex.ToString()); } }