Skip Navigation LinksALVAO 10.0ALVAO Service DeskImplementace systému v organizaciVlastní úpravy a rozšířeníVlastní programová rozšířeníVlastní příkazyVlastní příkazy požadavku Skip Navigation Links. Skip Navigation Links Skip Navigation Links.


Vlastní příkazy požadavku

Příprava nového příkazu

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 funkčnosti vlastního příkazu.

V nově vytvořeném souboru do ohraničeného bloku kódu zadejte definici nového příkazu implementací rozhraní ICommand a v konstruktoru třídy příkazu nastavte hodnoty vlastností id, name a position.

  • id – číslo příkazu (jedinečné)
  • name – název příkazu, který se bude zobrazovat v aplikacích
  • position – pozice, na které se bude příkaz zobrazovat v aplikacích
    • 1 = na prvním místě hlavní nabídky požadavku
    • 2 = na posledním místě hlavní nabídky požadavku
    • 3 = na prvním místě vnořené nabídky v hlavní nabídce požadavku
    • 4 = na posledním místě vnořené nabídky v hlavní nabídce požadavku

Příklad:


class CostCalculation : ICommand
{
    CommandDesc commandDesc;

    public CommandDesc CommandDesc
    {
        get { return commandDesc; }
        set { commandDesc = value; }
    }

    public CostCalculation()
    {
        int id = 1;
        string name = "Spočti celkovou pracnost";
        int position = 1;

        commandDesc = new CommandDesc(id, name, position);
    }

    int controlSectionId = 1; // id služby, ve které by měl být požadavek, aby se volba zobrazila
    string stateName = "Řešení"; // Název stavu, ve kterém má být požadavek, aby se volba zobrazila
}

Definice podmínek zobrazení příkazu

Ve vytvořené třídě příkazu implementujte metodu Show z rozhraní ICommand. Vstupními parametry jsou ticketId (číslo požadavku) a personId (id osoby, které by se měl příkaz zobrazit).

Výstupem je potom pravdivostní hodnota, zda se má příkaz uživateli na zadaném požadavku zobrazit.

Tip:
Voláním této metody v metodě Run(…) lze před spuštěním dotazu kontrolovat, jestli se nezměnily podmínky pro jeho zobrazení v době mezi zobrazením a spuštěním dotazu.

Příklad:


class CostCalculation : ICommand
{
    …
    public bool Show(SqlConnection Con, int ticketId, int personId)
    {
        bool show = false;

        int sectionId; // id sluzby, ve ktere je pozadavek
        string state; // stav pozadavku
        int solverId; // id resitele pozadavku

        // nacteni potrebnych dat o pozadavku z databaze
        using (SqlCommand cmd = new SqlCommand(@"SELECT liHdTicketHdSectionId, sHdTicketStateNotice, liHdTicketSolverPersonId FROM tHdTicket
        WHERE liHdTicketSolverPersonId IS NOT NULL AND iHdTicketId = @iHdticketId", Con))
        {
            cmd.Parameters.Add("@iHdTicketId", SqlDbType.Int).Value = ticketId;
            using (SqlDataReader ticketReader = cmd.ExecuteReader())
            {
                if (ticketReader.Read())
                {
                    sectionId = int.Parse((ticketReader["liHdTicketHdSectionId"]).ToString());
                    state = (ticketReader["sHdTicketStateNotice"]).ToString();
                    solverId = int.Parse((ticketReader["liHdTicketSolverPersonId"]).ToString());
                    ticketReader.Close();
                }
                else
                {
                    ticketReader.Close();
                    return show;
                }
            }
        }

        // kontrola jestli je pozadavek v pozadovane sluzbe, ve stavu Reseni a resitel je uzivatel, kteremu se ma pozadavek zobrazit
        if (sectionId == controlSectionId && state == stateName && solverId == personId)
            show = true;

        return show;
    }

    // tuto cast kodu pouze zkopirujte
    public List<Tuple<int, bool>> Show(SqlConnection Con, List<int> ticketsIds, int personId)
    {
        throw new NotImplementedException();
    }

}

Definice akcí prováděných příkazem

Ve vytvořené třídě příkazu implementujte metodu Run z rozhraní ICommand. Vstupními parametry jsou ticketId (číslo požadavku) a personId (id osoby, která příkaz spouští).

Výstupem je pravdivostní hodnota o úspěchu provedení, text, který se může zobrazit v hlášení pro uživatele a URL k otevření v prohlížeči.

Příklad:


class CostCalculation : ICommand
{

    public Tuple<bool, string, string> Run(SqlConnection Con, int ticketId, int personId)
    {
        bool complete = false;
        string message = "";
        string url = "";

        // Kontrola jestli se mezi zobrazením a spuštěním příkazu nezměnily podmínky pro jeho spuštění/zobrazení (lze provést kdekoliv v této metodě Run).

        if (!Show(Con, ticketId, personId))
        {
            message = "Příkaz nelze provést, protože nejsou splněny podmínky pro jeho zobrazení.";
            complete = false;
            return Tuple.Create(complete, message, url);
        }

        complete = true;
        SqlTransaction transaction = Con.BeginTransaction();
        try
        {
            HelpdeskWebService sdws = new HelpdeskWebService();

            // nacteni hodnot z vlastnich polozek “Naklady na SW” a “Naklady na HW”
            string strCostSW = sdws.ReadColumn(ticketId, "tHdTicketCust", "costSW");
            int costSW = string.IsNullOrEmpty(strCostSW) ? 0 : int.Parse(strCostSW);
            string strCostHW = sdws.ReadColumn(ticketId, "tHdTicketCust", "costHW");
            int costHW = string.IsNullOrEmpty(strCostHW) ? 0 : int.Parse(strCostHW);
            int costTotal = costSW + costHW;

            // zapis souctu costSW a costHW do vlastni polozky Celkove naklady
            sdws.WriteColumn(ticketId, "tHdTicketCust", "costTotal", costTotal.ToString());

            transaction.Commit();

            return Tuple.Create(complete, message, url);
        }
        catch (Exception ex)
        {
            message = "Chyba při zápisu hodnoty.";
            complete = false;
            url = "";
            transaction.Rollback();
            return Tuple.Create(complete, message, url);
        }
    }

}

Pro spuštění příkladu se předpokládá přidání vlastních položek costSW, costHW a costTotal typu int do tabulky tHdTicketCust.

Tip:
Pokud má vlastní příkaz otevřít jinou stránku z ALVAO WebApp, pro zjištění kořenové URL WebApp použijte metodu z rozhraní Service Desk Web Service GetServiceDeskPortalUrl(). Např.:
string waUrl = "";
using(HelpdeskWebService ws = new HelpdeskWebService())
{
    waUrl = ws.GetServiceDeskPortalUrl();
}
if (waUrl.Length == 0)
    throw new Exception("Adresa WebApp není nastavena.");

 

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