2013-03-05 60 views
3

我正在嘗試構建我的第一個WorkFlow,它從輸入團隊中獲取並獲取團隊中的所有用戶,並將其放入CRM的「TO」字段電子郵件。如何從團隊中獲取團隊用戶從輸入中獲取

我的第一個挑戰是檢索輸入類兼容。例如類:XrmDataContext,TeamMembership,Email(email.Subject)編譯器不識別它們。

我一直在試圖在互聯網上找到這個代碼,但對我而言並不是那麼清楚。

[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); 
    } 

回答

3

您已使用CrmSvcUtil生成以獲取該類的引用。採取look。我不知道你是否正在關注任何文章,但你可以檢查這個article