Skip Navigation LinksALVAO 10.4Rozšiřující modulyALVAO Service Desk Custom AppsAplikaceVlastní záložky v detailu požadavku Skip Navigation Links.


Vlastní záložky v detailu požadavku

Vlastní záložky lze použít pro zobrazení vlastního obsahu v detailu požadavku. Může jít o vlastní stránku v ALVAO WebApp, nebo např. externí parametrizovaný odkaz.

Upozornění:
Špatnou definicí vlastní záložky může být nenávratně poškozena databáze ALVAO, proto vytváření a testování vždy provádějte na kopii databáze v testovacím prostředí.
Upozornění:
V záložkách nelze zobrazit stránky, které mají zakázáno zobrazení v iframe.
Tip:
Předpokladem pro vytvoření funkční záložky je dobrá znalost databáze ALVAO, Service Desk WebService API a Alvao.API.

Příprava nové vlastní záložky

V aplikaci vytvořte nový skript podle šablony IView a vhodně jej pojmenujte podle obsahu, který záložka zobrazuje.

V nově vytvořeném skriptu nastavte v konstruktoru třídy příkazu hodnoty vlastností id a name.

  • id – číslo záložky (jedinečné)
  • name – název záložky, který se bude zobrazovat v aplikacích

Pro uložení vlastností a nastavení záložky doporučujeme definovat třídu Settings v samostatném skriptu, který vytvoříte ze šablony Knihovna tříd, např.:

class Settings {
    public const string ViewName = "Zobrazení adresy žadatele";
    public const int ServiceId = 154; // ID služby, pro jejíž požadavky chceme, aby se záložka zobrazila
    public const int StateId = 94; // ID stavu, ve kterém musí požadavek být, aby se záložka zobrazila
}

Příklad

Pokud se nachází požadavek ve službě a stavu definovaném v níže popsané třídě, zobrazí se v detailu požadavku záložka s adresou žadatele (podle organizace) v mapě.

1. část příkladu:


class ShowRequesterAddress : IView
{
   public int id { get; set; }
   public string name { get; set; }

   public ShowRequesterAddress()
   {
       id = 1;
       name = Settings.ViewName;
   }
}

Definice podmínek pro zobrazení obsahu vlastní záložky

Ve vytvořené třídě záložky implementujte metodu Show z rozhraní IView. Vstupními parametry jsou ticketId (číslo požadavku) a personId (id osoby, které by se měla záložka zobrazit).

Výstupem je potom textový řetězec obsahující URL k zobrazení na vlastní záložce. Pokud je URL prázdné, tak se záložka uživateli nezobrazuje.

2. část příkladu:


class ShowRequesterAddress : IView
{

   public string Show(SqlConnection Con, SqlTransaction Trans, int ticketId, int personId)
   {
       string url = "";

       // nacteni potrebnych dat o pozadavku z databaze
       using (SqlCommand Cmd = new SqlCommand(@"
       SELECT
         ZAA.Street + ' ' + ZAA.City adresa_zadatele,
         liHdTicketHdSectionId,
         TicketStateId
       FROM
         tHdTicket HDT
         JOIN tPerson Z on Z.iPersonId = HDT.liHdTicketUserPersonId
         JOIN tAccount ZA ON Z.liAccountId = ZA.iAccountId
         JOIN tAddress ZAA ON ZAA.id = ZA.AddressId
       WHERE
         HDT.iHdTicketId = @iHdTicketId", Con, Trans))
       {
           Cmd.Parameters.Add("@iHdTicketId", SqlDbType.Int).Value = ticketId;
           Cmd.Parameters.Add("@iPersonId", SqlDbType.Int).Value = personId;

           int section; // id sluzby, ve ktere je pozadavek
           int stateId; // id stavu pozadavku
           string requesterAddress; // adresa zadatele (podle organizace)

           using (SqlDataReader ticketReader = Cmd.ExecuteReader())
           {
               if (ticketReader.Read())
               {
                   section = int.Parse((ticketReader["liHdTicketHdSectionId"]).ToString());
                   stateId = int.Parse((ticketReader["TicketStateId"]).ToString());
                   requesterAddress = (ticketReader["adresa_zadatele"]).ToString();
               }
               else
               {
                   return url;
               }
               ticketReader.Close();
           }

           // kontrola jestli je pozadavek v pozadovane sluzbe a stavu
           if (section == Settings.ServiceId && stateId == Settings.StateId)
           {
               // vracene url zobrazi ve vlastni zalozce adresu zadatele na mape
               WebClient APIClient = new WebClient();
               var SAPI = new Uri(HttpUtility.UrlPathEncode("http://api.mapy.cz/geocode?query=" + requesterAddress));
               APIClient.Encoding = System.Text.Encoding.UTF8;
               string XMLresponse = APIClient.DownloadString(SAPI);
               XmlDocument APIresponse = new XmlDocument();
               APIresponse.LoadXml(XMLresponse);
               var APIitems = APIresponse.GetElementsByTagName("item");
               if (APIitems.Count >= 1)
               {
                   var Atributes = APIitems.Item(0).Attributes;
                   var Query = new StringBuilder("q=");
                   Query.Append(requesterAddress);
                   foreach (XmlAttribute Atribute in Atributes)
                   {
                       Query.Append('&');
                       Query.Append(Atribute.Name);
                       Query.Append('=');
                       Query.Append(Atribute.Value);
                   }
                   url = HttpUtility.UrlPathEncode("http://frame.mapy.cz/zakladni?" + Query.ToString());
               }
               return url;
           }
       }
       return null;
   }

}

Celý příklad ke stažení: Example_ShowRequesterAddress.zip

Poznámka:
V příkladu se pracuje se třídami, jejichž knihovny nejsou součástí výchozího souboru CodeExtension_Template.cs. Jde o třídy WebClient, XmlDocument a StringBuilder. Pro funkčnost příkladu doplňte na začátek souboru tyto knihovny:
using System.Net;
using System.Xml;
using System.Text;
Tip:
Pokud má vlastní záložka zobrazit jinou stránku z ALVAO WebApp, pro zjištění kořenové URL WebApp použijte vlastnost Alvao.API.Common.DbProperty.WebAppUrl z rozhraní Alvao.API.

 

Nenašli jste co jste hledali? Zeptejte se našeho týmu technické podpory.