Пример публичной части на .NET

В данном разделе приводится подробный пример оформления публичной части модуля "Сервисдеск" с использованием .NET Framework 3.5 или выше. Для реализации используются три файла:

ServiceDesk.aspx — основной файл, с помощью которого происходит вызов публичной части модуля "Сервисдеск".

User.cs — пример файла, содержащего классы информации о пользователях.

ServiceDesk.cs — вспомогательный файл классов с параметрами для вывода публичного компонента "Сервисдеск".

Для работы по такой схеме в проекте Visual Studio необходимо добавить ссылки (References) на библиотеки "System.Runtime.Serialization" и "System.ServiceModel.Web".

ServiceDesk.aspx

<%@ Import Namespace="ServiceDeskIntegration"%>
    <%
        //--- здесь необходимо самостоятельно получить информацию о пользователе:
        User user = new User { ID = 111,Name = "testName",Email = "test@email.com",Company = "testCompany" };
        //--- сформируем параметры для компонента Сервисдеск
        ServiceDeskParam serviceDeskParam = ServiceDeskTools.GetParameters(user);
    %>
    <script type="text/javascript">
       var tw_servicedesk_params=<%= ServiceDeskTools.JSON(serviceDeskParam) %>;
    </script>

User.cs

  //--- ............
  //--- Ваш код
  //--- ............
  /// <summary>
  /// Пример класса с данными о пользователе
  /// </summary>
  public class User
    {
    public int ID { get; set; }              // идентификатор
    public string Name { get; set; }         // имя
    public string Email { get; set; }        // e-mail
    public string Company { get; set; }      // название компании
    }
  //--- ............
  //--- Ваш код
  //--- ............

ServiceDesk.cs

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