Automatické akce na základě událostí na požadavku
Automatické akce se mohou spouštět v těchto případech:
- Změna hodnoty položky požadavku (vlastní/systémová)
- Založení nového požadavku
Pro funkčnost automatických akcí je nutné mít zapnutá
Vlastní programová rozšíření.
Upozornění:
Špatnou definicí automatické akce 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é automatické akce
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, kterou akce provádí.
V nově vytvořeném souboru do ohraničeného bloku kódu zadejte definici nové
automatické akce implementací rozhraní IAutoAction a v konstruktoru třídy akce
nastavte hodnotu vlastnosti name (název automatické akce).
- name – název automatické akce
Příklad:
…
class AutoAction1 : IAutoAction
{
public string name;
public string Name
{
get { return name; }
set { name = value; }
}
public AutoAction1()
{
name = "Vyřešeno ve verzi – předat do
testu";
}
}
…
Definice podmínek a vykonávaných operací pro automatickou akci
Akce prováděné při změně položky požadavku
Automatické akce je možné vykonávat při změně těchto položek:
tabulka.sloupec
|
Položka požadavku
|
tHdTicket.sHdTicketStateNotice
|
Stav
|
tHdTicket.liHdTicketSlaId
|
SLA
|
tHdTicket.dHdTicketDeadline
|
Termín
|
tHdTicket.liHdTicketHdSectionId
|
Služba
|
tHdTicket.iHdTicketUser
|
Žadatel
|
tHdTicket.liHdTicketSolverPersonId
|
Řešitel
|
tHdTicket.sHdTicket
|
Název požadavku
|
tHdTicket.liHdTicketPriorityId
|
Priorita
|
tHdTicket.Impact
|
Dopad
|
tHdTicket.Urgency
|
Naléhavost
|
tHdTicket.mHdTicketNotice
|
Poznámky
|
tHdTicket.sHdTicketCategory
|
Kategorie
|
tHdTicket.sHdTicketGroup
|
Skupina
|
tHdTicket.dHdTicketUserDeadline
|
Požadovaný termín
|
tHdTicket.sHdTicketDeviceCode
|
Číslo zařízení
|
tHdTicket.liHdTicketNodeId
|
Zařízení
|
tHdTicket.sHdTicketHdBranch
|
Obor
|
tHdTicket.FeedbackSolveSpeed
|
Rychlost řešení
|
tHdTicket.FeedbackProfessionality
|
Profesionalita
|
tHdTicket.FeedbackExpertise
|
Odbornost
|
tHdTicket.FeedbackComment
|
Komentáře a poznámky
|
tHdTicket.RelatedAccountId
|
Související organizace
|
tHdTicketCust.*
|
Vlastní položky
|
Ve vytvořené třídě akce implementujte metodu
OnTicketChanged z rozhraní
IAutoAction. Vstupními parametry jsou:
- ticketId (číslo požadavku),
- personId (id osoby, která provedla událost na požadavku) – V některých
případech mohl být systém, pak je hodnota NULL,
- properties (změněné položky požadavku oddělené čárkou –
tabulka.sloupec).
V implementované metodě definujte jak podmínky pro vykonání operací, tak
samotné operace s požadavkem.
Příklad:
…
class AutoAction1: IAutoAction
{
…
public void OnTicketChanged(SqlConnection Con,
SqlTransaction Trans, int ticketId, int personId, string properties)
{
if
(properties.Contains("tHdTicketCust.solvedInVersion"))
{
try
{
HelpdeskWebService sdws = new HelpdeskWebService();
// nacteni hodnot
string solvedInVersion = sdws.ReadColumn(ticketId, "tHdTicketCust",
"solvedInVersion");
string section = sdws.ReadColumn(ticketId, "TicketForeignKeyInfo",
"SectionName");
string state = sdws.ReadColumn(ticketId, "tHdTicket", "sHdTicketStateNotice");
// kontrola hodnot
if (!String.IsNullOrEmpty(solvedInVersion) && section == "Programové úpravy" &&
state == "Realizace")
{
// nacteni dat
SqlCommand Cmd;
Cmd = new SqlCommand(@"SELECT TOP 1 TRP.liRolePersonPersonId newSolverId FROM
tRolePerson TRP JOIN tRole TR ON TRP.liRolePersonRoleId=TR.iRoleId WHERE
TR.sRole = N'Testeři'", Con, Trans);
SqlDataReader reader = Cmd.ExecuteReader();
int newSolverId; // id noveho resitele resitele pozadavku
if (reader.Read())
{
newSolverId = int.Parse((reader["newSolverId"]).ToString());
// predani resiteli
sdws.AssignToSolver(ticketId, newSolverId);
}
reader.Close();
}
}
catch (Exception ex)
{
throw ex;
}
}
}
…
}
…
Akce prováděné při založení nového požadavku
Ve vytvořené třídě automatické akce implementujte metodu
OnTicketCreated z rozhraní IAutoAction.
Vstupními parametry jsou:
- ticketId (číslo požadavku),
- personId (id osoby, která požadavek založila – nemusí být vždy žadatel).
Příklad:
…
class AutoAction1: IAutoAction
{
…
public void OnTicketCreated(SqlConnection Con,
SqlTransaction Trans, int ticketId, int personId)
{
try
{
HelpdeskWebService sdws = new HelpdeskWebService();
// nacteni hodnot
bool createAnalysis = bool.Parse(sdws.ReadColumn(ticketId, "tHdTicketCust",
"createAnalysis"));
string section = sdws.ReadColumn(ticketId, "TicketForeignKeyInfo",
"SectionName");
string name = sdws.ReadColumn(ticketId, "tHdTicket", "sHdTicket");
// kontrola hodnot
if (section == "Programové úpravy" && createAnalysis)
{
// založení požadavku na vytvoreni navrhu
int newTicket = sdws.CreateTicket(personId, personId, null, null,
"Vývoj\\Programové úpravy\\Návrhy
a analýzy", null, name + " - návrh", null, null, null, null, null,
DateTime.Now.ToUniversalTime(), 7);
// vytvoreni vazby
SqlCommand Cmd;
Cmd = new SqlCommand(@"INSERT INTO TicketRelation (BeginHdTicketId,
EndHdTicketId, TicketRelationTypeId) VALUES (@rootTicket, @newTicket, 2)", Con,
Trans);
Cmd.Parameters.Add("@rootTicket", SqlDbType.Int).Value = ticketId;
Cmd.Parameters.Add("@newTicket", SqlDbType.Int).Value = newTicket;
Cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
throw ex;
}
}
…
}
…
Upozornění:
Pokud v rámci automatické akce chcete použít jen jednu ze dvou výše
uvedených metod, tak v těle druhé metody vraťte výjimku
NotImplementedException. Např. takto:
public void OnTicketChanged(SqlConnection Con, SqlTransaction Trans, int
ticketId, int personId, string properties)
{
throw new NotImplementedException();
}
Odeslání zprávy v rámci automatické akce
Pokud potřebujete v rámci automatické akce odeslat libovolnou zprávu,
využijte k tomu metodu SendMail s parametry popsanými níže. Odeslaná zpráva může
být také automaticky zapsána do deníku požadavku.
Popis parametrů metody SendMail.
Parametr |
Datový typ |
Popis |
Povinný |
ticketId |
int |
ID požadavku, ke kterému se má záznam vytvořit. |
Ano |
from |
string |
E-mail odesílatele. Pokud není zadán, odesilatelem je služba. |
Ne |
recipients |
string[] |
Pole příjemců zprávy. |
Ano |
cc |
string[] |
Pole příjemců kopie zprávy. |
Ne |
subject |
string |
Předmět zprávy. Pokud není zadán, použije se značka a název požadavku. |
Ne |
body |
string |
Zpráva (může být v HTML). |
Ano |
createAct |
bool |
Vytvořit událost v deníku požadavku. |
Ano |
notification |
bool |
Vytvořená událost v deníku bude mít druh oznámení. |
Ano |
connection |
SqlConnection |
Připojení k databázi. |
Ano |
transaction |
SqlTransaction |
Probíhající databázová transakce. |
Ne |
Poznámka:
Metoda může být využita i pro vlastní příkazy.
Tip:
Pro sestavení HTML zprávy je možné použít funkci:
string HtmlNotificationBody(string htmlBody), která htmlBody obalí
standardní obálkou.
Tip:
Celý e-mail je možno sestavit i samostatně pomocí objektu MailMessage a poté
použít přetíženou metodu:
public int SendMail(MailMessage msg, int ticketId,
bool createAct, bool notification, SqlConnection connection, SqlTransaction
transaction);
Takto lze odeslat zprávu s přílohami a příp. i obrázky v textu.
Návratová hodnota
- ID vytvořené události, když je e-mail úspěšně odeslán a vytvořena událost.
- 0, když je e-mail úspěšně odeslán, ale nebyla vytvořena událost.
- -1, když e-mail není odeslán, například z důvodu chybně nastaveného SMTP
serveru.
- Jakákoliv výjimka, neboť nejsou v těle metody zachycovány ani obsluhovány.
Nenašli jste co jste hledali? Zeptejte se našeho týmu technické podpory.
|