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 Skript - Po 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);