using System.IO;
using System.Text;
using System.Security.Cryptography;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
namespace ServiceDeskIntegration
{
/// <summary>
/// Класс с параметрами для вывода компонента Сервисдеск
/// </summary>
[DataContract]
public class ServiceDeskParam
{
[DataMember]
public string url { get; set; } // доменное имя вашего TeamWox
[DataMember]
public string sid { get; set; } // хеш от строки ключевое слово +
идентификатор пользователя веб-сайта
[DataMember]
public string container { get; set; } // идентификатор элемента HTML (например,
<div>), в котором будет отображаться список заявок
[DataMember]
public string user_name { get; set; } // имя пользователя веб-сайта
[DataMember]
public string user_email { get; set; } // e-mail пользователя веб-сайта
[DataMember]
public string user_company { get; set; } // название компании пользователя веб-сайта
[DataMember]
public int incidents_per_page { get; set; } // количество заявок отображаемых на одной
странице
[DataMember]
public int comments_per_page { get; set; } // количество комментариев отображаемых на
одной странице
[DataMember]
public int[] filter_groups { get; set; } // идентификаторы групп обслуживания
Сервисдеск TeamWox
[DataMember]
public int[] filter_products { get; set; } // идентификаторы продуктов групп
обслуживания Сервисдеск TeamWox
[DataMember]
public int[] filter_categories { get; set; } // идентификаторы категорий групп
обслуживания Сервисдеск TeamWox
[DataMember]
public string logo { get; set; } // логотип вашей компании
}
/// <summary>
/// Класс с набором методов для вывода информации
/// </summary>
public class ServiceDeskTools
{
/// <summary>
/// получим хеш MD5 для строки
/// </summary>
/// <param name="input">строка от которой нужно взять хеш</param>
public static string GetMD5(string input)
{
MD5 hash = MD5.Create();
//--- вычислим хеш
byte[] retArray = Encoding.Unicode.GetBytes(input);
retArray = hash.ComputeHash(retArray);
//--- сформируем строку ответа
StringBuilder sBuilder = new StringBuilder();
for(int i = 0;i < retArray.Length;i++)
{
sBuilder.Append(retArray[i].ToString("X2"));
}
//---
return sBuilder.ToString();
}
/// <summary>
/// сформируем строку массива JavaScript с экранированием спец. символов
/// </summary>
/// <param name="param">параметры компонента Сервисдеск</param>
public static string JSON(ServiceDeskParam param)
{
string json;
//--- выведем параметры в формате JSON
DataContractJsonSerializer serializer = new DataContractJsonSerializer(param.GetType());
using(MemoryStream ms = new MemoryStream())
{
serializer.WriteObject(ms,param);
json = Encoding.UTF8.GetString(ms.ToArray());
}
//---
return json;
}
/// <summary>
/// сформируем параметры отображения компонента Сервисдеск
/// </summary>
/// <param name="user">информация о пользователе</param>
public static ServiceDeskParam GetParameters(User user)
{
ServiceDeskParam serviceDesckParam = new ServiceDeskParam();
//--- доменное имя вашего TeamWox
serviceDesckParam.url = "https://team.yourdomain.com";
//--- идентификация пользователя веб-сайта
serviceDesckParam.sid = GetMD5("Change_This_Secret_Word_" + user.ID);
//--- идентификатор элемента HTML (например, <div>), в котором будет отображаться
список заявок
serviceDesckParam.container = "service_desk";
//--- информация о пользователе веб-сайта
serviceDesckParam.user_name = user.Name;
serviceDesckParam.user_email = user.Email;
serviceDesckParam.user_company = user.Company;
//--- параметры вывода заявок и комментариев на странице
serviceDesckParam.incidents_per_page = 15;
serviceDesckParam.comments_per_page = 20;
//--- идентификаторы групп, продуктов, категорий Сервисдеска
serviceDesckParam.filter_groups = new[] { 1003,1004,1007 };
serviceDesckParam.filter_products = new[] { 1020,1023 };
serviceDesckParam.filter_categories = new[] { 2003,2007,2011 };
//--- логотип вашей компании
serviceDesckParam.logo = "<img src=\"http://www.yourwebsite.com/company_logo.gif\"
title=\"Your Company Name\" alt=\"Your Company Name\"/>";
//---
return serviceDesckParam;
}
}
} |