How to Generate email Alert from IGP in D365fo in x++

 How to Generate email Alert from IGP in D365fo in x++
public static boolean sendEmail(TxlGatePassID  IGPID)
    {
        TxlGatePassLine     txlGatePassLine;
        TxlGatePassHeader   txlGatePassHeader;
        PurchTable          purchTable;
        PurchLine           purchLine;
        TxlGatePassTmp      txlGatePassTmp;
        PurchReqLine        purchReqLine;
        SLD_IGPEmailTmp     sLD_IGPEmailTmp,sLD_IGPEmailTmpGroup,sLD_IGPEmailTmpEmil;
        PurchReqTable       purchReqTable;
        int                 countSo;
        ;



        while select  txlGatePassHeader
            where txlGatePassHeader.GatePassID == IGPID
            join txlGatePassLine
            where txlGatePassLine.GatePassId == txlGatePassHeader.GatePassID
        {

            countSo++;

            InventTable     inventTable;
            UserInfo        userInfo;
            DirPersonUser   dirPersonUser;
            UserGroupList   userGroupList;
            UserGroupId             _UserGroupId;//OMOperatingUnitType::OMAnyOU
            Email                   OriginatorEmail;

            inventTable = InventTable::find(txlGatePassLine.ItemId);
            if(inventTable.TxlDepartment)
            {
                _UserGroupId  = OMOperatingUnit::find(inventTable.TxlDepartment,OMOperatingUnitType::OMDepartment).SLD_UserGroupId;
                while select groupId,userId from  userGroupList
                    join networkAlias from  userInfo
                    where userGroupList.userId == userInfo.id
                    && userGroupList.groupId == _UserGroupId
                {
                    ttsbegin;
                    sLD_IGPEmailTmp.clear();
                    sLD_IGPEmailTmp.IGPNumber     =  IGPID;
                    //sLD_IGPEmailTmp.SONO          =  1;//countSo;
                    sLD_IGPEmailTmp.GatePassQty   =  txlGatePassLine.Qty;
                    sLD_IGPEmailTmp.ItemId        =  txlGatePassLine.ItemId;
                    sLD_IGPEmailTmp.ItemName      =  txlGatePassLine.ItemName;
                    sLD_IGPEmailTmp.Unit          =  txlGatePassLine.Unit;
                    sLD_IGPEmailTmp.Email         =  userInfo.networkAlias;


                    while select purchLine
                where purchLine.purchid == txlGatePassLine.DocumentNum
                && purchLine.RecId == txlGatePassLine.RefRecid
                join purchTable
                where purchTable.PurchId == purchLine.PurchId
                    {

                        sLD_IGPEmailTmp.InventRefId = purchLine.InventRefId;
                        sLD_IGPEmailTmp.Supplier    = purchTable.OrderAccount + purchTable.PurchName;
                        sLD_IGPEmailTmp.PRNumber    = purchLine.PurchReqId;
                        sLD_IGPEmailTmp.DocQty      = purchLine.QtyOrdered;

                        while select purchReqTable
                    where purchReqTable.PurchReqId == purchLine.PurchReqId
                        {

                            sLD_IGPEmailTmp.PRDate    = DateTimeUtil::date(purchReqTable.CreatedDateTime) ;
                            sLD_IGPEmailTmp.Originator = purchReqTable.Originator;
                            //name = HcmWorker::find(this.Originator).name();
                        }
                    }

                    sLD_IGPEmailTmp.insert();
                    ttscommit;
                    sLD_IGPEmailTmp.clear();
                }
            }
            else
            {
                ttsbegin;
                
                    sLD_IGPEmailTmp.clear();
                    sLD_IGPEmailTmp.IGPNumber     =  IGPID;
                    //sLD_IGPEmailTmp.SONO          =  1;//countSo;
                    sLD_IGPEmailTmp.GatePassQty   =  txlGatePassLine.Qty;
                    sLD_IGPEmailTmp.ItemId        =  txlGatePassLine.ItemId;
                    sLD_IGPEmailTmp.ItemName      =  txlGatePassLine.ItemName;
                    sLD_IGPEmailTmp.Unit          =  txlGatePassLine.Unit;


                    while select purchLine
                where purchLine.purchid == txlGatePassLine.DocumentNum
                && purchLine.RecId == txlGatePassLine.RefRecid
                join purchTable
                where purchTable.PurchId == purchLine.PurchId
                    {

                        sLD_IGPEmailTmp.InventRefId = purchLine.InventRefId;
                        sLD_IGPEmailTmp.Supplier    = purchTable.OrderAccount + purchTable.PurchName;
                        sLD_IGPEmailTmp.PRNumber    = purchLine.PurchReqId;//purchLine.PurchReqLineRefId;
                        sLD_IGPEmailTmp.DocQty      = purchLine.QtyOrdered;

                        while select purchReqTable
                    where purchReqTable.PurchReqId == purchLine.PurchReqId
                        {
                            
                            sLD_IGPEmailTmp.PRDate    = DateTimeUtil::date(purchReqTable.CreatedDateTime) ;
                            sLD_IGPEmailTmp.Originator = purchReqTable.Originator;

                            while select * from userInfo
                    join  dirPersonUser
                    where dirPersonUser.PersonParty == HcmWorker::find(sLD_IGPEmailTmp.Originator).Person
                    && dirPersonUser.User == userInfo.id
                //OriginatorEmail = userInfo.networkAlias;
                            {
                                
                                sLD_IGPEmailTmp.Email         =  userInfo.networkAlias;
                            }
                            //name = HcmWorker::find(this.Originator).name();
                        }
                    }

                    sLD_IGPEmailTmp.insert();

                    ttscommit;
                    sLD_IGPEmailTmp.clear();
                }
            }
        

        // sLD_IGPEmailTmpGroup  = sLD_IGPEmailTmp;
        while select Email,IGPNumber from sLD_IGPEmailTmp
        group by Email,IGPNumber
            where sLD_IGPEmailTmp.IGPNumber == IGPID
        {
            SLD_IGPSendEmail  sLD_IGPSendEmail=new SLD_IGPSendEmail();
            if(sLD_IGPEmailTmp.Email)
            {
            sLD_IGPSendEmail.sendEmail(sLD_IGPEmailTmp);
            }
        }

        ttsbegin;
        SLD_IGPEmailTmp  sLD_IGPEmailTmpDeleted;
        delete_from  sLD_IGPEmailTmpDeleted where sLD_IGPEmailTmpDeleted.IGPNumber == IGPID;
        ttscommit;
        return true;
    }

===================================================================================
class SLD_IGPSendEmail
{

    #define.SaleslineTableBegin('<!--%tablebegin.salesline% -->')
    #define.SaleslineTableBeginNew('<!--%tablebegin.salesline%-->')
    #define.SaleslineTableEnd('<!--%tableend.salesline%-->')

    public static void main(Args args)
    {
        //SLD_IGPSendEmail sLD_IGPSendEmail= new SLD_IGPSendEmail();
        //if (sLD_IGPEmailBatchJob.prompt())
        ////{
        //sLD_IGPSendEmail.run();
        //}
    }

    public Email getEmailFormate(Email _Email)
    {
        str email;
        int position;
        ;
 
        email            = _Email;
        position         =  strFind(email, '@',1, strLen(email));
        email            =  strDel(email,position,strLen(email));
        //email            =  strIns(email,'@ecrescent.com',position);
        email = strFmt("%1%2",email,'@ecrescent.pk');
        //email = email+'@ecrescent.pk';

        return email;
    }

    public  void sendEmail(SLD_IGPEmailTmp _SLD_IGPEmailTmp)
    {

        SysEmailTable               sysEmailTable           = SysEmailTable::find('IGP');
        SysEmailMessageTable        sysEmailMessageTable    = SysEmailMessageTable::find(sysEmailTable.EmailId, sysEmailTable.DefaultLanguage);                
        var                         builder                 = new SysMailerMessageBuilder();
        str                         messageBody             = sysEmailMessageTable.Mail;
        //Map                         placeholderMap          = new Map(Types::String, Types::String);
        //str                       subject                 = sysEmailMessageTable.Subject;

        //lines
        messageBody = this.generateDetailInfo(messageBody, _SLD_IGPEmailTmp);
        //placeholderMap.insert("ItemDescription", "Evaldas Landauskas");
        //messageBody = SysEmailMessage::stringExpand(messageBody, placeholderMap);
        //builder.addTo("usman.iiui66@gmail.com");
        builder.addTo(this.getEmailFormate(_SLD_IGPEmailTmp.Email));

        builder.setFrom(sysEmailTable.SenderAddr, sysEmailTable.SenderName);                        
        builder.setSubject(sysEmailMessageTable.Subject);
        //builder.setBody(sysEmailMessageTable.Mail);
        builder.setBody(messageBody);
        var message = builder.getMessage();

        SysMailerFactory::getNonInteractiveMailer().sendNonInteractive(message);
    }

    /// <summary>
    /// Generate email template table
    /// </summary>
    /// <param name = "messageTemplate">Email message</param>
    /// <returns>Message body of email</returns>
    protected str generateDetailInfo(str messageTemplate, SLD_IGPEmailTmp _SLD_IGPEmailTmp)
    {
        str messageBody = messageTemplate;

        int salesLineTableStart     = strScan(messageBody, #SaleslineTableBegin, 1, strLen(messageBody));
        int salesLineTableStartNew  = strScan(messageBody, #SaleslineTableBeginNew, 1, strLen(messageBody));

        int salesLineTableStartLength = salesLineTableStartNew ? strLen(#SaleslineTableBeginNew) : strLen(#SaleslineTableBegin);
        int salesLineTableStartResult = salesLineTableStartNew ? salesLineTableStartNew : salesLineTableStart;

        int salesLineTableEndLength = strLen(#SaleslineTableEnd);
        int salesLineTableEnd = strScan(messageBody, #SalesLineTableEnd, 1, strLen(messageBody)) + salesLineTableEndLength;

        if ((salesLineTableStartResult && salesLineTableEnd) && (salesLineTableEnd - salesLineTableStartResult) > SalesLineTableStartLength + salesLineTableEndLength)
        {
            str salesLineTableTemplate = subStr(messageBody,
                                            salesLineTableStartResult + SalesLineTableStartLength,
                                            salesLineTableEnd - salesLineTableStartResult - SalesLineTableStartLength - salesLineTableEndLength);

            messageBody = subStr(messageBody, 1, salesLineTableStartResult - 1) + this.generateSaleslineTable(saleslineTableTemplate, _SLD_IGPEmailTmp) + subStr(messageBody, saleslineTableEnd, strLen(messageBody));
        }
        
        return messageBody;
    }

    /// <summary>
    /// Update data in email template table
    /// </summary>
    /// <param name = "saleslineTableTemplate">Email message</param>
    /// <param name = "_salesTable">SalesTable as a parameter</param>
    /// <returns>Return result includes email body with values</returns>
    public  str generateSaleslineTable(str IGPlineTableTemplate, SLD_IGPEmailTmp _SLD_IGPEmailTmp)
    {
        custConfirmJour         custConfirmJour;
        CustConfirmTrans        custConfirmTrans;
        SLD_IGPEmailTmp         _SLD_IGPEmailTmpAll;
        str                     result;
        int                     countSONo;
       

        Map IGPlineMap = new Map(Types::String,Types::String);

        while select _SLD_IGPEmailTmpAll
            where _SLD_IGPEmailTmpAll.Email == _SLD_IGPEmailTmp.Email
            && _SLD_IGPEmailTmpAll.IGPNumber == _SLD_IGPEmailTmp.IGPNumber
        {
            countSONo++;

            IGPlineMap.insert("Sr", strFmt("%1",countSONo));
            IGPlineMap.insert("PR", strFmt("%1",_SLD_IGPEmailTmpAll.PRNumber));
            IGPlineMap.insert("PRDate", strFmt("%1",_SLD_IGPEmailTmp.PRDate));
            IGPlineMap.insert("ItemCode", strFmt("%1",_SLD_IGPEmailTmpAll.ItemId));
            IGPlineMap.insert("ItemDescription", strFmt("%1",_SLD_IGPEmailTmpAll.ItemName));
            IGPlineMap.insert("UOM", strFmt("%1",_SLD_IGPEmailTmpAll.Unit));
            IGPlineMap.insert("PRQty", strFmt("%1",_SLD_IGPEmailTmpAll.DocQty));
            IGPlineMap.insert("IGPQty", strFmt("%1",_SLD_IGPEmailTmpAll.GatePassQty));
            IGPlineMap.insert("Supplier", strFmt("%1",_SLD_IGPEmailTmpAll.Supplier));
            IGPlineMap.insert("PPCOrder", strFmt("%1",_SLD_IGPEmailTmpAll.InventRefId));

            result += SysEmailMessage::stringExpand(IGPlineTableTemplate, IGPlineMap);
        }

        return result;
    }

}

Comments