2016-08-26 2 views
-1

Я пересматриваю программу справочной службы, которую я написал для работы, и хочу реорганизовать мой код, поэтому, когда отправляется билет, он пытается отправить электронное письмо сначала, прежде чем создавать билет в моей базе данных.Null Reference Исключение, вызываемое при вызове метода sendmail()

Но если я вызову метод SendMail (ticket) перед моим контекстом. Метод CreateCetateTicket (ticket) Я получаю 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; 
     } 

    } 

кода SendMail (билет)

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 вы получите нулевое исключение ссылки.

+0

Хорошо, это имеет смысл, поскольку перед тем, как он переходит в метод CreateTicket(), который отправляет новый билет обратно в мою базу данных, как только он возвращается к вызову, билет имеет правильные ссылки на другие объекты, Urgency и ProblemType , Думаю, я знаю, как это исправить. Спасибо за удар мозга! – PnkFld7892

Смежные вопросы