Vlastní příkazy
Vlastní příkaz lze použít pro provádění vlastních operací s požadavky nebo
operací s externími systémy. Vlastní příkaz lze spustit pro právě jeden vybraný
požadavek. Pro jeho zobrazení uživateli a spuštění je možné definovat podmínky
kontrolující např. stav požadavku, nebo hodnotu jeho vlastnosti.
Použití příkazu může provést sekvenci akcí v rámci ALVAO Service Desk, popř.
otevřít URL ve výchozím prohlížeči uživatele.
Pro použití vlastního příkazu je nutné mít zapnutá
Vlastní programová rozšíření.
Upozornění:
Špatnou definicí vlastního příkazu 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í.
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 Command1 : ICommand
{
CommandDesc commandDesc;
public CommandDesc CommandDesc
{
get { return commandDesc;
}
set { commandDesc = value;
}
}
public Command1()
{
int id = 1;
string name = "Spočti
celkovou pracnost";
int position = 1;
commandDesc = new
CommandDesc(id, name, position);
}
}
…
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 Command1: ICommand
{
…
public bool Show(SqlConnection Con, int ticketId, int
personId)
{
bool show = false;
// nacteni potrebnych dat
o pozadavku z databaze
SqlCommand Cmd;
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;
SqlDataReader
ticketReader = Cmd.ExecuteReader();
int sectionId; // id
sluzby, ve ktere je pozadavek
string state; // stav
pozadavku
int solverId; // id
resitele pozadavku
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 == 1 &&
state == "Řešení" && 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 Command1: 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);
}
}
…
}
…
Nenašli jste co jste hledali? Zeptejte se našeho týmu technické podpory.
|