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); EntityReference recipientQueue = RecipientQueue.Get(executionContext); bool sendEmail = SendEmail.Get(executionContext); bool includeOwner = IncludeOwner.Get(executionContext); 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); } bool is2011 = Is2011(service); EntityCollection users = is2011 ? GetQueueOwner(service, recipientQueue.Id) : GetQueueMembers(service, recipientQueue.Id); if (!is2011) { if (includeOwner) { users.Entities.AddRange(GetQueueOwner(service, recipientQueue.Id).Entities); } } 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 e) { throw new InvalidPluginExecutionException(e.Message); } }
public override DispatchQueueItem GetNextRecipientForDispatch(Guid messageId, RecipientQueue queueState) { var currentValue = Switcher <EngagementAnalyticsPlanSendingContext, EngagementAnalyticsPlanSendingContext> .CurrentValue; DispatchQueueItem returnDispatchQueueItem = null; var connection = new SqlConnection(ConnectionString); var command = connection.CreateCommand(); command.CommandText = "UPDATE TOP(1) [DispatchQueue] SET [InProgress] = 1, [LastModified] = @LastModified OUTPUT inserted.ID, inserted.MessageID, inserted.RecipientID, inserted.RecipientQueue, inserted.DispatchType, inserted.LastModified, inserted.MessageType, inserted.CustomPersonTokens, inserted.InProgress WHERE [InProgress] = 0"; command.Parameters.Add(new SqlParameter("@LastModified", DateTime.UtcNow)); if (currentValue == null) { command.CommandText += " AND [MessageID] = @MessageID"; command.Parameters.Add(new SqlParameter("@MessageID", messageId)); command.CommandText += " AND [RecipientQueue] = @RecipientQueue"; command.Parameters.Add(new SqlParameter("@RecipientQueue", queueState)); } else { command.CommandText += " AND [ID] = @ID"; command.Parameters.Add(new SqlParameter("@ID", currentValue.ExactDispatchQueueElemId)); } ExecuteRetry.Retry(() => { using (connection) using (command) { connection.Open(); using (var sqlDataReader = command.ExecuteReader(CommandBehavior.SingleRow)) { while (sqlDataReader.Read()) { returnDispatchQueueItem = ProcessDispatchQueueItem(sqlDataReader); } } } }); return(returnDispatchQueueItem); }
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); EntityReference recipientQueue = RecipientQueue.Get(context); bool sendEmail = SendEmail.Get(context); bool includeOwner = IncludeOwner.Get(context); 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); } bool is2011 = Is2011(localContext.OrganizationService); EntityCollection users = is2011 ? GetQueueOwner(localContext.OrganizationService, recipientQueue.Id) : GetQueueMembers(localContext.OrganizationService, recipientQueue.Id); if (!is2011) { if (includeOwner) { users.Entities.AddRange(GetQueueOwner(localContext.OrganizationService, recipientQueue.Id).Entities); } } 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); }