Quantcast
Channel: Microsoft Dynamics CRM Forum - Recent Threads
Viewing all articles
Browse latest Browse all 46379

Workflow not sending emails

$
0
0

First off, let me start by saying I am new to writing workflows and in C#.

I'm currently trying to send emails from a ribbon button. I'm able to add the button and command, and the workflow is triggered. However,

no matter what I do, it won't send an email... Not sure what I'm doing wrong here.

using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using System.Xml.Linq;
using System.ServiceModel;
using System.Activities;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Workflow;

namespace SendNotificationsForWeeklyReport
{
    using System;
    using System.Activities;
    using System.ServiceModel;
    using Microsoft.Xrm.Sdk;
    using Microsoft.Xrm.Sdk.Workflow;

    public sealed class SendNotificationsForWeeklyReport : CodeActivity
    {
        [Input("Email")]
        [ReferenceTarget("email")]
        public InArgument<EntityReference> Email { get; set; }
        [Input("Account")]
        [ReferenceTarget("account")]
        public InArgument<EntityReference> Account { get; set; }
        protected override void Execute(CodeActivityContext executionContext)
        {
            ITracingService tracingService = executionContext.GetExtension<ITracingService>();
            if (tracingService == null)
            {
                throw new InvalidPluginExecutionException("Failed to retrieve tracing service.");
            }
            tracingService.Trace("Entered SendNotificationsForWeeklyReport.Execute(), Activity Instance Id: {0}, Workflow Instance Id: {1}",
                executionContext.ActivityInstanceId,
                executionContext.WorkflowInstanceId);
            IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();
            if (context == null) throw new InvalidPluginExecutionException("Failed to retrieve workflow context.");


            tracingService.Trace("SendNotificationsForWeeklyReport.Execute(), Correlation Id: {0}, Initiating User: {1}",
                context.CorrelationId,
                context.InitiatingUserId);

            IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
            try
            {
                if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
                {
                    Entity entity = (Entity)context.InputParameters["Target"];
                    tracingService.Trace("Target Entity is {0} id {1}", entity.LogicalName, entity.Id);
                    Entity email = new Entity("email");
                    //Entity email = service.Retrieve("email", Email.Get(executionContext).Id, new ColumnSet(true));
                    Entity WREntity = service.Retrieve(entity.LogicalName, entity.Id, new ColumnSet(new string[] { "createdby", "am_dwterritory"}));
                    List<Entity> fromList = new List<Entity>();
                    List<Entity> toList = new List<Entity>();
                    if (WREntity.Attributes.Contains("createdby"))
                    {
                        Entity createdby = (Entity) WREntity.Attributes["createdby"];
                        tracingService.Trace("createdby: " + createdby);
                        Entity fromP = new Entity("activityparty");
                        fromP["partyid"] = new EntityReference("systemuser", createdby.Id);
                        fromList.Add(fromP);
                        email.Attributes["from"] = fromList.ToArray();
                        service.Update(email);
                    }

                    QueryExpression teamQuery = new QueryExpression()
                    {
                        EntityName = "weeklyreport_team",
                        ColumnSet = new ColumnSet(true),
                        LinkEntities = 
                        {
                            new LinkEntity
                            {
                                LinkFromEntityName = "weeklyreport",
                                LinkFromAttributeName = "weeklyreportid",
                                LinkToEntityName = "team",
                                LinkToAttributeName = "teamid",
                            }
                        }
                    };

                    teamQuery.Criteria = new FilterExpression();
                    teamQuery.Criteria.AddCondition("weeklyreportid", ConditionOperator.Equal, entity.Id);


                    EntityCollection teams = service.RetrieveMultiple(teamQuery);
                    // getting people in product line team(s)
                    for (int i = 0; i < teams.Entities.Count; i++)
                    {
                        Entity team = teams.Entities[i];
                        tracingService.Trace("Query Expression Retrieved: {0}", team);
                        QueryExpression qe = new QueryExpression();
                        qe.EntityName = "teammembership";
                        qe.ColumnSet = new ColumnSet();
                        qe.ColumnSet.Columns.Add("systemuser");
                        qe.LinkEntities.Add(new LinkEntity("team", "systemuser", "teamid", "accountid", JoinOperator.Inner));
                        qe.Criteria = new FilterExpression();
                        qe.Criteria.AddCondition("teamid", ConditionOperator.Equal, team.Id);

                        EntityCollection ec = service.RetrieveMultiple(qe);
                        foreach (Entity user in ec.Entities)
                        {
                            if (user.Attributes.Contains("internalemailaddress"))
                            {
                                tracingService.Trace("Get Email " + user.Attributes["internalemailaddress"].ToString());
                                Entity toParty = new Entity("activityparty");
                                toParty["partyid"] = new EntityReference("systemuser", user.Id);
                                toList.Add(toParty);
                            }
                        }
                    }

                    // retrieving additional recipients
                    QueryExpression userQuery = new QueryExpression()
                    {
                        EntityName = "issi_issi_weeklyreport_systemuser",
                        ColumnSet = new ColumnSet(true),
                        LinkEntities = 
                        {
                            new LinkEntity
                            {
                                LinkFromEntityName = "weeklyreport",
                                LinkFromAttributeName = "weeklyreportid",
                                LinkToEntityName = "systemuser",
                                LinkToAttributeName = "systemuserid",
                            }
                        }
                    };
                    userQuery.Criteria = new FilterExpression();
                    userQuery.Criteria.AddCondition("weeklyreportid", ConditionOperator.Equal, entity.Id);

                    EntityCollection users = service.RetrieveMultiple(userQuery);
                    foreach (Entity user in users.Entities)
                    {
                        Entity toParty = new Entity("activityparty");
                        toParty["partyid"] = new EntityReference("systemuser", user.Id);
                        toList.Add(toParty);
                    }

                    email.Attributes["to"] = toList.ToArray();
                    service.Update(email);
                    Guid emailid = service.Create(email);
                    tracingService.Trace("Sending Mail");
                    SendEmailRequest SendEmail = new SendEmailRequest();
                    SendEmail.EmailId = emailid;
                    SendEmail.TrackingToken = "";
                    SendEmail.IssueSend = true;
                    tracingService.Trace("Sending Mail");
                    SendEmailResponse res = (SendEmailResponse)service.Execute(SendEmail);
                }
            }
            catch (FaultException<OrganizationServiceFault> e)
            {
                tracingService.Trace("Exception: {0}", e.ToString());

                // Handle the exception.
                throw;
            }

            tracingService.Trace("Exiting SendNotificationsForWeeklyReport.Execute(), Correlation Id: {0}", context.CorrelationId);
        }
    }
}

Viewing all articles
Browse latest Browse all 46379

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>