Ejemplo de parte pública en .NET

En esta sección se muestra un ejemplo detallado del componente público del módulo "Service Desk" utilizando el lenguaje .NET Framework 3.5 y sus versiones superiores. Para la realización se utilizan tres archivos:

ServiceDesk.aspx — archivo principal con el que se efectúa la llamada a la parte pública del módulo "Service Desk".

User.cs — ejemplo del archivo que contiene las categorías de información sobre los usuarios.

ServiceDesk.cs — archivo auxiliar de las categorías con los parámetros para visualizar el componente público "Service Desk".

Para trabajar según este esquema, en el proyecto de Visual Studio hay que agregar los enlaces (References) a las bibliotecas "System.Runtime.Serialization" y "System.ServiceModel.Web".

ServiceDesk.aspx

<%@ Import Namespace="ServiceDeskIntegration"%>
    <%
        //--- aquí hay que obtener la información sobre el usuario por su propia cuenta:
        User user = new User { ID = 111,Name = "testName",Email = "test@email.com",Company = "testCompany" };
        //--- formamos los parámetros para el componente Service Desk
        ServiceDeskParam serviceDeskParam = ServiceDeskTools.GetParameters(user);
    %>
    <script type="text/javascript">
       var tw_servicedesk_params=<%= ServiceDeskTools.JSON(serviceDeskParam) %>;
    </script>

User.cs

  //--- ............
  //--- Su código
  //--- ............
  /// <summary>
  /// Ejemplo de la categoría con los datos sobre el usuario
  /// </summary>
  public class User
    {
    public int ID { get; set; }              // identificador
    public string Name { get; set; }         // nombre
    public string Email { get; set; }        // e-mail
    public string Company { get; set; }      // nombre de la empresa
    }
  //--- ............
  //--- Su código
  //--- ............

ServiceDesk.cs

using System.IO;
using System.Text;
using System.Security.Cryptography;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
namespace ServiceDeskIntegration
  {
  /// <summary>
  /// Categoría con los parámetros para la visualización del componente Service Desk
  /// </summary>
  [DataContract]
  public class ServiceDeskParam
    {
    [DataMember]
    public string url { get; set; }               // nombre de dominio de su TeamWox
    [DataMember]
    public string sid { get; set; }               // hash desde la línea: palabra clave +
    identificador del usuario
    [DataMember]
    public string container { get; set; }         // identificador del elemento HTML (por ejemplo,
    <div>), en el que va a mostrarse la lista de incidencias
    [DataMember]
    public string user_name { get; set; }         // nombre del usuario del sitio web
    [DataMember]
    public string user_email { get; set; }        // e-mail del usuario del sitio web
    [DataMember]
    public string user_company { get; set; }      // nombre de la empresa del usuario del sitio web
    [DataMember]
    public int incidents_per_page { get; set; }   // número de incidencias a mostrar en una página
    [DataMember]
    public int comments_per_page { get; set; }    // número de comentarios a mostrar en una página
    [DataMember]
    public int[] filter_groups { get; set; }      // identificadores de grupos de servicio
    Service Desk TeamWox
    [DataMember]
    public int[] filter_products { get; set; }    // identificadores de productos de grupos de servicio
    Service Desk TeamWox
    [DataMember]
    public int[] filter_categories { get; set; }  // identificadores de categorías de grupos de servicio
    Service Desk TeamWox
    [DataMember]
    public string logo { get; set; }              // logotipo de su empresa
    }
  /// <summary>
  /// Categoría con el conjunto de métodos para visualizar la información
  /// </summary>
  public class ServiceDeskTools
    {
    /// <summary>
    /// obtenemos hash MD5 para la línea
    /// </summary>
    /// <param name="input">la línea desde la que hay que coger el hash</param>
    public static string GetMD5(string input)
      {
      MD5 hash = MD5.Create();
      //--- calculamos hash
      byte[] retArray = Encoding.Unicode.GetBytes(input);
      retArray = hash.ComputeHash(retArray);
      //--- formamos la línea de respuesta
      StringBuilder sBuilder = new StringBuilder();
      for(int i = 0;i < retArray.Length;i++)
        {
        sBuilder.Append(retArray[i].ToString("X2"));
        }
      //---
      return sBuilder.ToString();
      }
    /// <summary>
    /// formamos la línea de la matriz JavaScript con la proyección de los símbolos especiales
    /// </summary>
    /// <param name="param">parámetros del componente Service Desk</param>
    public static string JSON(ServiceDeskParam param)
      {
      string json;
      //--- visualizamos los parámetros en el formato 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>
    /// formamos los parámetros de la visualización del componente Service Desk
    /// </summary>
    /// <param name="user">información sobre el usuario</param>
    public static ServiceDeskParam GetParameters(User user)
      {
      ServiceDeskParam serviceDesckParam = new ServiceDeskParam();
      //--- nombre de dominio de su TeamWox
      serviceDesckParam.url = "https://team.yourdomain.com";
      //--- identificación del usuario del sitio web
      serviceDesckParam.sid = GetMD5("Change_This_Secret_Word_" + user.ID);
      //--- identificador del elemento HTML (por ejemplo <div>), en el que va a mostrarse
      la lista de incidencias
      serviceDesckParam.container = "service_desk";
      //--- información sobre el usuario del sitio web
      serviceDesckParam.user_name    = user.Name;
      serviceDesckParam.user_email   = user.Email;
      serviceDesckParam.user_company = user.Company;
      //--- parámetros de visualización de las incidencias y comentarios en la página
      serviceDesckParam.incidents_per_page = 15;
      serviceDesckParam.comments_per_page  = 20;
      //--- identificadores de grupos, productos, categorías del Service Desk
      serviceDesckParam.filter_groups     = new[] { 1003,1004,1007 };
      serviceDesckParam.filter_products   = new[] { 1020,1023 };
      serviceDesckParam.filter_categories = new[] { 2003,2007,2011 };
      //--- logotipo de su empresa
      serviceDesckParam.logo = "<img src=\"http://www.yourwebsite.com/company_logo.gif\"
      title=\"Your Company Name\" alt=\"Your Company Name\"/>";
      //---
      return serviceDesckParam;
      }
    }
  }