2016-08-26 1 views
-1

필자가 작성한 헬프 데스크 프로그램을 개정 중이며 내 코드를 리팩터링하려고하므로 티켓을 보내면 티켓을 만들기 전에 먼저 전자 메일을 보내려고합니다. 내 데이터베이스에.Null 참조 내 sendmail() 메서드를 호출 할 때 예외가 throw 됨

하지만 내 context.CreateTicket (티켓) 메서드보다 먼저 내 SendMail (티켓) 메서드를 호출하면 null ref가 발생합니다. 예외를 선언하고 티켓 객체를 초기화합니다.

여기 내 NewTicket 방법에 대한 내 코드의

private void CreateNewTicket() 
    { 
     //set search filter to currentuser 
     dS.Filter = "(&(objectClass=user)(anr=" + userName + "))"; 

     //find current user in the acrive director 
     SearchResult sR = dS.FindOne(); 

     var ticket = new HelpTicket 
     { 
      Title = title, 
      DescText = descText, 
      Employee = GetProp(sR, "Name"), 
      EmpEmail = GetProp(sR, "mail"), 
      DateSubmited = DateTime.Now, 
      // Urgency = selectedUrgency, 
      UrgentID = SelectedUrgency.UrgentID, 
      TypeID = SelectedProblemType.TypeID 

     }; 

     try 
     { 
      //if sendmail here it thorws the exception 
      //SendMail(ticket); 
      try { 
       context.CreateTicket(ticket); 
       //If I call context.createticket first it works 
       SendMail(ticket); 
       CloseDialog = true; 
      } 
      catch 
      (System.Exception ex) 
      { 
       MessageBox.Show("Error Submitting ticket: " + ex.Message,"Error Submitting Ticket",MessageBoxButton.OK,MessageBoxImage.Error); 
      } 

     } 
     catch (Exception ex1) 
     { 
      MessageBox.Show("Error Submitting ticket, please try again.\n" + ex1.Message,"Error Creating ticket",MessageBoxButton.OK,MessageBoxImage.Error); 
      CloseDialog = true; 
     } 

    } 

코드 센드 (티켓)에 대한

public override void SendMail(HelpTicket ticket) 
    { 
     Microsoft.Office.Interop.Outlook.Application outlook = new Microsoft.Office.Interop.Outlook.Application(); 

     Microsoft.Office.Interop.Outlook.MailItem mailMsg = 
     (Microsoft.Office.Interop.Outlook.MailItem)outlook.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem); 
     Microsoft.Office.Interop.Outlook.Inspector oInspector = mailMsg.GetInspector; 
     mailMsg.To = "[email protected]"; 
     mailMsg.Subject = ticket.Title; 
     mailMsg.HTMLBody = "<b>Urgency: </b>" + ticket.Urgency.Description + "<br/>" + 
      "<b>Problem Type: </b>" + ticket.ProblemType.ProblemDesc + "<br/><hr/><br/>" + 
       ConvertToHtml(ticket.DescText); 
     mailMsg.Send(); 

    } 

당신이 더 이상 코드 조각이 필요하면 알려주세요 그리고 난 그들에게

을 게시합니다

답변

0

SendMail에서 티켓의 개체 속성을 참조하고 있지만 사용자가 이 아니거나 표시하지 않았습니다. 어쨌든 당신이 ticket.ProblemType.ProblemDesc 및 ticket.Urgency.Description 을 참조하자마자 을 게시 한 코드를 기반으로하면 null 참조 예외가 발생합니다.

+0

새 티켓을 내 데이터베이스로 다시 보내는 CreateTicket() 메소드에 들어가기 전에 일단 호출로 돌아 오면 티켓은 다른 객체 인 Urgency 및 ProblemType에 대한 올바른 링크를 갖습니다. . 이 문제를 해결하는 방법을 알고 있습니다. 두뇌 충돌에 감사드립니다! – PnkFld7892

관련 문제