Skip Navigation LinksALVAO 8.2ALVAO Service DeskImplementace systému v organizaciVlastní úpravy a rozšířeníVlastní programová rozšířeníVlastní záložky v detailu požadavku Skip Navigation Links. Skip Navigation Links 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í formulář v rámci Service Desk 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 rámci. Ani v konzoli ani ve WebApp.
Tip:
Předpokladem pro vytvoření funkčního záložky je dobrá znalost databáze ALVAO a rozhraní Service Desk WebService.

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

Ve složce s nainstalovanou ALVAO Service Desk WebService zkopírujte v adresáři App_Code soubor CodeExtension_Template.cs a vhodně jej pojmenujte podle obsahu, který záložka zobrazuje.

V nově vytvořeném souboru do ohraničeného bloku kódu zadejte definici nové záložky implementací rozhraní IView a v konstruktoru třídy příkazu nastavte 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

Příklad:


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

        public View1()
        {
            id = 1;
            name = "Adresa žadatele";
        }
        
    }

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.

Příklad:


class View1: 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,
            sHdTicketStateNotice
        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 sectionId; // id sluzby, ve ktere je pozadavek
                string state; // stav pozadavku
                string requesterAddress; // adresa zadatele (podle organizace)
                string solverAddress; // adresa resitele (podle organizace)

                using (SqlDataReader ticketReader = Cmd.ExecuteReader())
                {
                    if (ticketReader.Read())
                    {
                        sectionId = int.Parse((ticketReader["liHdTicketHdSectionId"]).ToString());
                        state = (ticketReader["sHdTicketStateNotice"]).ToString();
                        requesterAddress = (ticketReader["adresa_zadatele"]).ToString();
                    }
                    else
                    {
                        return url;
                    }
                }

                // kontrola jestli je pozadavek v pozadovane sluzbe, ve stavu “Osobni jednani s zadatelem”
                if (sectionId == 2 && state == "Osobní jednání s žadatelem")
                {
                    // vracene url zobrazi ve vlastni zalozce trasu v mape z adresy resitele na adresu zadatele
                    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://mapy.cz/zakladni?" + Query.ToString());                    }

                    return url;
                }
            }
            return null;
        }
}

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;

 

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