1. Skript pro odeslání emailu

    Článek: AN0001919Aktualizováno:: 28.03.2020

    Nejjednodušší způsob odesílání emailů z ObjectGears je použití notifikací např. v pravidlech, ve kterých lze nastavit podmínky, kdy se má pravidlo (odeslání notifikace) použít. Zároveň můžete v pravidlech definovat i komu se má notifikace odeslat (distribuční skupina, uživatelé uvedení ve sloupci záznamu...).

    Pro obecné řešení odeslání emailových upozornění lze použít i skript a objekt OG.Email. Příklady níže demonstrují některé možnosti, které tento objekt nabízí.

    Odeslání emailu sestaveného ve skriptu

    var m = OG.Email.CreateMessage();

    m.AddTo('email1@objectgears.cz;email2@objectgears.cz');
    m.AddBc('email3@objectgears.cz');
    m.AddCc('email4@objectgears.cz');

    m.Subject = 'Hello word';
    m.Body = 'body {{var.prom1}}';

    m.AddVariable('prom1', 'PRO-1');//přidání proměnné, která se používá v těle emailu
    m.SendEmailAsOne = true;   //odeslat jako jeden email, ne každému příjemci zvlášť

    OG.Email.Send(m);

    Použití notifikace ve skriptu

    Ve skriptu nemusíme přímo definovat Tělo a Předmět emailu či příjemce. Můžeme se odkázat na existující notifikaci, která již Tělo a Předmět má definované. V takovém případě ve skriptu přidáme proměnné, s kterými notifikace pracuje.

    Oproti předchozímu příkladu pro odeslání emailu nepoužijeme metodu OG.Email.Send, ale OG.Email.SendNotification.

    Tato metoda posílá notifikaci, která může mít definované různé jazykové verze, a uživatel tak dostane email v jazyku dle svého nastavení.

    var m = OG.Email.CreateMessage();

    //Předmět a Tělo emailu nemusíme definovat ve skriptu a místo toho můžeme použít existující notifikaci, která již Předmět a Tělo emailu obsahuje.
    m.Notification = OG.Notification.GetAll().GetDefaultByCode( model.Id, 'timewriting_reject');
    m.AddTo('email1@objectgears.cz;email2@objectgears.cz');

    //email template s ID = 1
    m.EmailTemplateId = 1;   

    //přidání proměnných, která se používají v notifikaci
    m.AddVariable('solver', 'my solver');
    m.AddVariable('pro_code', 'my project code');
    m.AddVariable('pro_name', 'my project name');
    m.AddVariable('pro_ict_man', 'my project manager');
    m.AddVariable('datarow.url', OG.GetWebUrl() + '' + OGActualDataRow.DetailUrl);


    OG.Email.SendNotification(m);

    Notifikace s distribuční skupinou, proměnnými a URL odkazem v emailu 

    Tento příkaz odešle notifikaci 'request_created' nacházející se v modelu 'it' na distribuční skupinu 'service_desk'. V notifikaci 'request_created' lze použít příkaz {{var.calcfee}}, který obsahuje text sestavený v níže uvedeném příkladu. Proměnných jako promměná 'abc' lze použít libovolné množství a to s využitím metody OG.CreateHashtable a parametru ht v uvedeném příkladu. V notifikaci 'request_created' lze použít také např. příkaz {{var.DataRow.Url}}, který vloží do notifikace URL na datový záznam, s nímž je datová notifikace spojena přes parametr OGActualDataRow

    var ht = OG.CreateHashtable();

    ht['calcfee'] = 'Calculated fee: 78,00 USD.';

    OG.Email.SendNotification('it', 'request_created', 'service_desk', OGActualDataRow, ht, Com.ObjectGears.Common.Entities.EmailOwnerType.ClassDef, OGActualDataRow.ParentId);

    Přiložení souborů

    K emailu může přidat i přílohy. Níže uvedený příklad ukazuje přidání tří příloh. První je textovým souborem s názvem a obsahem, který si definujeme ve skriptu. Druhý je obrázkem uloženým na disku v relativní cestě a třetí souborem odkazovaný aboslutní cestou. Na soubory musí mít přístup technický účet ObjectGears (jde o účet, pod nímž běží Windows služba nebo web, podle toho, která komponenta zajišťuje odeslání emailu). Podle typu přílohy uveďte daný Mime typ.

    var m = OG.Email.CreateMessage();

    m.AddTo('email1@objectgears.cz'>);
    m.SendEmailAsOne = true; //odeslat jako jeden email
    m.Subject = 'Subj';
    m.Body = 'Body';

    // Přidání jednoduchého souboru, který zkompilujeme ve skriptu
    m.Attachements.AddFromText('Toto je text obsažený v souboru', 'Název souboru.txt', 'ct');

    // Přidání souboru s relativní cestou
    var file = OG.Utils.MapServerPath('~/ImagesData/system/user_use.png');
    var bytes = OG.Utils.ReadFileToBytes(file);
    m.Attachements.AddFromBytes(bytes, 'user.png', 'image/x-png');

    // Přidání souboru s absolutní cestou
    var file = 'C:\\R5\\Export\\Server_status.csv';
    var bytes = OG.Utils.ReadFileToBytes(file);
    m.Attachements.AddFromBytes(bytes, 'Přehled serverů.csv', OG.Email.MimeType_Text_Plain);

    OG.Email.Send(m);

    Přiřazení emailu k záznamu

    Pokud chceme email přiřadit k objektu, kterého se týká, použijeme vlastnost m.AssignEmailForDataRow. Email pak bude zobrazován i v detailním archívu daného záznamu. V příkladu níže používáme aktuální záznam (pro použití např. v pravidle po uložení záznamu). Další možností je určit záznam, ke kterému se má email přiřadit, obecně pomocí načtení záznamu.

    var m = OG.Email.CreateMessage();

    m.AddTo('email1@objectgears.cz');
    m.SendEmailAsOne = true; //odeslat jako jeden email
    m.Subject = 'Subj';
    m.Body = 'Body';

    m.AssignEmailForDataRow = OGActualDataRow

    OG.Email.Send(m);

    Odeslání notifikace na osobu uvedenou v odkazované třídě (např. notifikace o úkolu na projektového manažera)

    V určitých případech chceme odeslat notifikaci o záznamu na osobu uvedenou v jiném záznamu, na který se odkazuje. Dobrým příkladem je notifikace o úkolu na manažera projektu, do kterého úkol patří.

    Vztah obou tříd vyjadřuje následující schéma.

    Ve třídě úkol si vytvoříme pravidla typu SkriptPo uložení nového záznamu a Po uložení existujícího záznamu.

    /*skript odešle notifikaci task na distribuční skupinu task, na uživatele ze sloupce solver třídy task na uživatele project_manager z odkazované třídy project. Dále email připojí k danému záznamu, aby byl zobrazen v archívu.
    */

    var model = OGDataParent.Model;
    var m = OG.Email.CreateMessage();

    m.Notification = OG.Notification.GetAll().GetDefaultByCode( model.Id, 'task');
    //přidání příjemců z distribuční skupiny task - odkazy na uživatele i emailové adresy uvedené textem
    var ds = OG.DistributionGroup.GetAll().GetByModelId(model.Id, false).GetByCode('task');
    m.AddTo(ds.Emails);
    m.AddTo(ds.Persons);

    //pridat resitele ukolu
    m.AddTo(OGActualDataRow('solver'));

    //pridat projektoveho managera do kopie emailu
    m.AddCc(OGActualDataRow.GetDR('project')['project_manager']);

    //pripojeni emailu k záznamu, aby byl odeslaný email zobrazen v audit-trailu záznamu
    m.AssignEmailForDataRow = OGActualDataRow;

    OG.Email.Send(m);

×