Skip Navigation LinksALVAO 8.2ALVAO Service DeskImplementace systému v organizaciVlastní úpravy a rozšířeníVlastní programová rozšířeníAutomatické akce na základě událostí na požadavku Skip Navigation Links. Skip Navigation Links Skip Navigation Links.


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í.
Tip:
Předpokladem pro vytvoření funkční automatické akce je dobrá znalost databáze ALVAO a rozhraní Service Desk WebService.

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.