1. Automatické notifikace uživatelům mimo ObjectGears

    Článek: AN0002448Aktualizováno:: 21.11.2020

    V tomto článku si ukážeme, jak můžeme z ObjectGears automaticky nechat posílat notifikace na uživatele, kteří nemají ObjectGears účet.

    V našem příkladě budeme mít třídu aplikací (business-application) s vlastnostmi support_to (datum) a analysts (odkaz do jiné třídy ms-ad-users). Vztah tříd zachycuje následující schéma.

    Použijeme automatické časové operace pro kontrolu pole support_to a odesílání notifikací kolegům v poli analysts ve stanovenou dobu před koncem podpory.

    Pokud by v poli analysts byl odkaz na uživatele ObjectGears, mohli bychom příjemce motifikací jednoduše nastavit v detailu časové operace, tak že bychom vybrali tento sloupec.

    Příjemci notifikací však nebudou uživatelé ObjectGears. Místo toho budou příjemci reprezentováni jen záznamy z jiné třídy, u nichž budeme mít uveden email. Odeslání notifikace pak budeme moci vyřešit dvěma způsoby. Skriptem v časové operaci nad třídou business-application, který si zjistí emaily ze třídy ms-ad-users nebo dotazem, který bude pro každou aplikaci vracet emaily oddělené čárkou ve zvláštním sloupci, a časovou operací nad tímto dotazem.

    Možnost č.1 - Skript v časové operaci nad třídou

    V časové operaci nastavíme filtr na záznamy, kde pole analysts není null. Na záložkách s vlastnimi operacemi pak nastavíme tento skript.

    /*skript se podívá do násobného classlinku Analysts, který vede na třídu ms-ad-users - emaily jsou ve sloupci e-mail
    Pošle upozornění end_of_support_reminder a nalinkuje odeslaný email na záznam dané aplikace.*/


    var drl = OGActualDataRow.GetDR('analysts');
    if ( drl != null && drl.Count > 0)
    {
      //příprava emailu
      var m = OG.Email.CreateMessage();

      var isAnyEmail = false;
      for( var i = 0; i < drl.Count; ++i)
      {
        var email = drl[i]['e-mail'];
        if ( !OG.IsNull(email))
        {
          m.AddTo(email);
          isAnyEmail = true;
        }
      }

      if (isAnyEmail)
      {
        var mIt = OG.Model.GetByCode('it');
        m.Notification = OG.Notification.GetAll().GetDefaultByCode( mIt.Id, 'end_of_support_reminder');

        //nalinkování emailu k záznamu aplikace
        m.AssignEmailForDataRow = OGActualDataRow;

        m.SendEmailAsOne = true; //odeslat jako jeden email
        //m.SendEmailAsOne = false; //odeslat emaily samostatne

        //nalinkování emailu k časové operaci jako původci odeslání
        m.OwnerType = OG.Email.EmailOwnerType_AutomaticTimeOperationSend;
        m.OwnerId = OGActualAto.Id;

        OG.Email.Send(m);
      }
    }

    Možnost č.2 - Dotaz vracející emaily a časová operace nad tímto dotazem

    V tomto případě si data obou tříd transformujeme do dotazu a nad ním už jednoduše nastavíme časovou operaci. SQL dotazu:

    SELECT t.*
    FROM
    (
      SELECT ba.id, ba.support_to, CONVERT(varchar(10),ba.id) as ba_id, ba.name,
      ( STUFF((
        SELECT ';' + us.[e-mail] AS [text()]
        FROM {{:class.ms-ad-users:}} us
        INNER JOIN DataRow{{:class.business-application.id:}}_{{:class.ms-ad-users.id:}}Link l
        ON l.ColumnClassDefId = {{:class.business-application.column.analysts.id:}} and l.ReferentionId = ba.Id
        WHERE us.Deleted is null
        AND us.id = l.LinkReferentionId
        /*ORDER BY f.Id*/
        FOR XML PATH ('')
        ), 1, 1, '')
      ) emails
      FROM {{:class.business-application:}} ba
    ) t
    WHERE t.emails is not null

×