Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

i'm trying to build my first WorkFlow that take from input a Team and get all the users inside this team and put them into the "TO" field of a CRM Email.

My first Challenge is retrieve input Classes compatible. For example the classes: XrmDataContext, TeamMembership, Email(email.Subject) the compiler don't recognizer them.

I've been trying whit this code I've found on internet, but is not so clear for me.

    [Input("Team Name")]
    [Default("Case Team")]
    public InArgument<string> CaseTeam { get; set; }

    [Output("Date time")]
    public OutArgument<DateTime> TaskDueDate { get; set; }
      protected override void Execute(CodeActivityContext executionContext)
    {
        try
        {
            // Create the tracing service
            ITracingService tracingService = executionContext.GetExtension<ITracingService>();

            // Create the context
            IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();

            IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();

            // Create the Organiztion service
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

            // Get the target entity from the context
            Entity target = (Entity)context.InputParameters["Target"];

            // Prepare DataContext by using AutoGenerated cs file
            XrmDataContext datacontext = new XrmDataContext(service);

            // Get the Team Name from the Workflow input parameter
            string teamName = CaseTeam.Get<string>(executionContext);

            // Get the Team Id from the Team Name
            var team = (from t in datacontext.TeamSet
                        where t.Name == teamName
                        select new { t.TeamId }).First();

            // Get all the members of the team to send email
            List<Entity> teamMembers = (from t in datacontext.TeamMembershipSet
                                                where t.TeamId == team.TeamId
                                                select t).ToList();

            // Send email to memebers of the team
            CreateEmail(service, teamMembers, target, context.InitiatingUserId);

            // Set the Task DueDate to 2 days by using Output Parameter
            TaskDueDate.Set(executionContext, DateTime.Now.AddDays(2));

        }
        catch (SoapException ex)
        {
            // Add the SoapException message in event log
            EventLog.WriteEntry("code error", "Error occured in " + ex.Detail.InnerText.ToString(), EventLogEntryType.Error);
        }
        catch (Exception exe)
        {
            // Add the GeneralException message in event log
            EventLog.WriteEntry("code error", "Error occured in " + exe.InnerException.ToString(), EventLogEntryType.Error);
        }
    }

    public static void CreateEmail(IOrganizationService service, List<Entity> teamMembers, Entity caseEntity, Guid loggedinUser)
    {
        // Create Email 
        Entity email = new Entity("email");

        // Set the from user of the email to Logged in user
        Entity fromParty = new Entity("activityparty"); 
        fromParty.Id = new EntityReference(SystemUser.EntityLogicalName, loggedinUser);

        List<Entity> toPartyList = new List<Entity>();

        // Add the Activity party for each member in the team
        foreach (TeamMembership user in teamMembers)
        {
            ActivityParty toParty = new ActivityParty();
            toParty.PartyId = new EntityReference(SystemUser.EntityLogicalName, user.SystemUserId.Value);
            toPartyList.Add(toParty);
        }

        // Add the subject and description by concating the case ticket number
        email.Attributes.Add("Case " + caseEntity.Attributes["ticketnumber"].ToString() + " Added. Please review");
        email.Description = "Case " + caseEntity.Attributes["ticketnumber"].ToString() + " Added. Please review";

        // Add To and From users to email
        email.To = toPartyList.ToArray();
        email.From = new[] { fromParty };

        // Set the case regarding
        email.RegardingObjectId = new EntityReference(Incident.EntityLogicalName, caseEntity.Id);

        // Create email
        Guid emailId = service.Create(email);

        SendEmailRequest sendRequest = new SendEmailRequest();
        sendRequest.EmailId = emailId;
        sendRequest.TrackingToken = string.Empty;
        sendRequest.IssueSend = true;

        // Send the email message.
        service.Execute(sendRequest);
    }
share|improve this question

1 Answer 1

You have generate with CrmSvcUtil to obtain reference for that classes. Take a look. I don't know if you are following any article but you can check this article.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.