Vlastní příkazy požadavku
Příprava nového příkazu
V aplikaci vytvořte nový skript podle šablony ICommand a vhodně jej pojmenujte podle funkčnosti vlastního příkazu.
V nově vytvořeném skriptu nastavte v konstruktoru třídy příkazu hodnoty vlastností id, name, position a icon.
- 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
- icon – název ikony příkazu
- Jako název ikony příkazu použijte název ikony z knihovny Microsoft Fabric (na stránce se název ikony zobrazí po najetí kurzorem myši nad vybranou ikonu). Pokud ikony nezadáte, použije se ikona LightningBolt.
Pro uložení vlastností a nastavení příkazu doporučujeme definovat třídu Settings v samostatném skriptu, který vytvoříte ze šablony Knihovna tříd, např.:
class Settings {
public static int CommandId = 1;
public static string CommandName = "Spočti celkové náklady na SW a HW";
public static string CommandPosition = 1;
public static string CommandIcon = "Calculator";
public static int StateId = 94; // ID služby, ve které by měl být požadavek, aby se volba zobrazila
public static int ServiceId = 154; // ID stavu, ve kterém má být požadavek, aby se volba zobrazila
}
Příklad
Příkaz sečte u požadavku hodnoty z vlastních
položek
Náklady na SW a Náklady na HW.
1. část příkladu:
…
class CostCalculation : ICommand
{
CommandDesc commandDesc;
public CommandDesc CommandDesc
{
get { return commandDesc;
}
set { commandDesc =
value; }
}
public CostCalculation()
{
int id = Settings.CommandId;
string name = Settings.CommandName;
int position = Settings.CommandPosition;
string icon = Settings.CommandIcon;
commandDesc = new
CommandDesc(id, name, position, icon);
}
}
…
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.
2. část příkladu:
…
class CostCalculation : ICommand
{
…
public bool Show(SqlConnection Con, int ticketId, int
personId)
{
// nacteni potrebnych dat o pozadavku z databaze
tHdTicket ticket = Ticket.GetById(ticketId);
if(ticket == null)
return false;
// v metode Show je z vykonnostnich duvodu vhodnejsi pracovat s ID sluzby, resitele a stavu
int sectionId = ticket.liHdTicketHdSectionId; // id sluzby, ve ktere je pozadavek
int solverId = ticket.liHdTicketSolverPersonId ?? 0; // id resitele pozadavku
int stateId = ticket.TicketStateId; // stav pozadavku
// kontrola jestli je pozadavek v pozadovane sluzbe a stavu a resitel je uzivatel, kteremu se ma pozadavek zobrazit
return sectionId == Settings.ServiceId && stateId == Settings.StateId && solverId == personId;
}
…
}
…
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.
3. část příkladu:
…
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);
}
}
…
}
…
Příklad ke stažení: Example_CostsCalculation.zip
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 vlastnost Alvao.API.Common.DbProperty.WebAppUrl z rozhraní Alvao.API.
Nenašli jste co jste hledali? Zeptejte se našeho týmu technické podpory.
|