namespace Microsoft.Samples.MomSdk.MomSdkConnector
{
using Microsoft.EnterpriseManagement.Mom.Connector;
using System;
using System.Diagnostics;
using System.Resources;
using System.Data;
/// <summary>
/// Class to handle the conversion of MOM Alert objects to
/// a trouble ticket data structure which is compatible with
/// trouble tickets in another system.
/// </summary>
public class TroubleTicketMapper
{
private ResourceManager resources;
private const int MinTicketID = 0001;
private const int MaxTicketID = 9999;
/// <summary>
/// Constructor for the TroubleTicketMapper class.
/// </summary>
public TroubleTicketMapper()
{
this.resources = new
ResourceManager("Microsoft.Samples.MomSdk.MomSdkConnector.Messages", this.GetType().Assembly);
}
/// <summary>
/// Converts an MCF Alert object to a row of trouble ticket values.
/// </summary>
/// <param name="mcfAlert">The MCF Alert</param>
/// <param name="newTicketRow">Row to store the ticket data</param>
public void MakeNewTicketFromAlert(Alert mcfAlert, DataRow newTicketRow)
{
newTicketRow["ID"] = this.MakeTicketID();
newTicketRow["SourceAlert"] = mcfAlert.AlertId;
if (null == mcfAlert.Name)
{
newTicketRow["Name"] = "";
}
else
{
newTicketRow["Name"] = mcfAlert.Name;
}
if (null == mcfAlert.Description)
{
newTicketRow["Description"] = "";
}
else
{
newTicketRow["Description"] = mcfAlert.Description;
}
if (null == mcfAlert.ComputerDomain)
{
newTicketRow["Computer"] = "";
if (null == mcfAlert.ComputerName)
{
newTicketRow["Computer"] = "";
}
newTicketRow["Computer"] = mcfAlert.ComputerDomain + @"\" + mcfAlert.ComputerName;
}
if (null == mcfAlert.OwnerName)
{
newTicketRow["AssignedTo"] = "";
}
else
{
newTicketRow["AssignedTo"] = mcfAlert.OwnerName;
}
newTicketRow["Opened"] = DateTime.Now.ToLongDateString() + " " + DateTime.Now.ToLongTimeString();
string statusName = "";
statusName = GetStatusNameFromID(mcfAlert.ResolutionState);
newTicketRow["Status"] = statusName;
newTicketRow["Closed"] = "";
}
/// <summary>
/// Converts an MCF Alert object to a trouble dicket data row.
/// </summary>
/// <param name="mcfAlert">The MCF alert</param>
/// <param name="ticketRow">Row containing the ticket data</param>
public void MakeTicketFromAlert(Alert mcfAlert, DataRow ticketRow)
{
if (null == mcfAlert.Name)
{
ticketRow["Name"] = "";
}
else
{
ticketRow["Name"] = mcfAlert.Name;
}
if (null == mcfAlert.Description)
{
ticketRow["Description"] = "";
}
else
{
ticketRow["Description"] = mcfAlert.Description;
}
if (null == mcfAlert.OwnerName)
{
ticketRow["AssignedTo"] = "";
}
else
{
ticketRow["AssignedTo"] = mcfAlert.OwnerName;
}
string statusName = "";
statusName = GetStatusNameFromID(mcfAlert.ResolutionState);
ticketRow["Status"] = statusName;
}
/// <summary>
/// Converts a trouble ticket data row to a MOM alert update.
/// </summary>
/// <param name="ticketRow">Row containing the ticket data</param>
/// <returns>New MCF AlertUpdate object</returns>
public AlertUpdate MakeAlertUpdateFromTicket(DataRow ticketRow)
{
AlertUpdate mcfAlertUpdate = new AlertUpdate();
mcfAlertUpdate.AlertId = new Guid(ticketRow["SourceAlert"].ToString());
mcfAlertUpdate.CustomField1UseExisting = true;
mcfAlertUpdate.CustomField2UseExisting = true;
mcfAlertUpdate.CustomField3UseExisting = true;
mcfAlertUpdate.CustomField4UseExisting = true;
mcfAlertUpdate.CustomField5UseExisting = true;
mcfAlertUpdate.RepeatCountUseExisting = true;
if (null == ticketRow["AssignedTo"])
{
mcfAlertUpdate.OwnerNameExisting = false;
mcfAlertUpdate.OwnerName = "";
}
else
{
mcfAlertUpdate.OwnerNameExisting = false;
mcfAlertUpdate.OwnerName = ticketRow["AssignedTo"].ToString();
}
mcfAlertUpdate.ResolutionState = GetIDFromStatusName(ticketRow["Status"].ToString());
mcfAlertUpdate.ResolutionStateUseExisting = false;
return mcfAlertUpdate;
}
/// <summary>
/// Maps the MOM resolution state to trouble ticket status.
/// </summary>
/// <param name="id">MOM Alert's resolution state</param>
/// <returns>Trouble ticket status text</returns>
private static string GetStatusNameFromID(byte id)
{
string name = "New"; switch (id)
{
case 0:
name = "New";
break;
case 85:
name = "Acknowledged";
break;
case 170:
name = "Level 1: Assigned to a help desk or local support";
break;
case 180:
name = "Level 2: Assigned to a subject matter expert";
break;
case 190:
name = "Level 3: Requires scheduled maintenance";
break;
case 200:
name = "Level 4: Assigned to an external group or vendor";
break;
case 255:
name = "Resolved";
break;
}
return name;
/// <summary>
/// Gets a numerical resolution state ID from the state name.
/// </summary>
/// <param name="name">Resolution state name</param>
/// <returns>State ID</returns>
private static byte GetIDFromStatusName(string name)
{
byte stateId = byte.Parse("0");
switch (name)
{
case "New":
stateId = 0;
break;
case "Acknowledged":
stateId = 85;
break;
case "Level 1: Assigned to a help desk or local support":
stateId = 170;
break;
case "Level 2: Assigned to a subject matter expert":
stateId = 180;
break;
case "Level 3: Requires scheduled maintenance":
stateId = 190;
break;
case "Level 4: Assigned to an external group or vendor":
stateId = 200;
break;
case "Resolved":
stateId = 255;
break;
}
return stateId;
}
/// <summary>
/// Generates an ID for the trouble ticket.
/// </summary>
/// <returns>New ticket ID</returns>
private Guid MakeTicketID()
{
return Guid.NewGuid();
}
}
}