Monday, November 17, 2025

email sending code

 /// <summary> 

/// This class is used to process user automation service 

/// </summary> 

public class iPayEmailAutoService extends SysOperationServiceBase 

{ 

    Map logdetails,logdetailsloc; 

    boolean Logcheck; 

    str     invoice, vendorNumber; 

    Set drafterrorlog ; 

  

  

  

  

     

    /// <summary> 

    /// This method is userd to process the oprations 

    /// </summary> 

    public void processOperation() 

    { 

        Filename                             fileName = "Invoice log.Pdf"; 

        SrsReportRunController               controller = new SrsReportRunController(); 

        iPayInvoiceErrorLogContract          contract = new iPayInvoiceErrorLogContract(); 

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

        Set                         skipHTMLEncodingSet     = new Set(Types::String); 

        SRSPrintDestinationSettings          settings; 

        Array                                arrayFiles; 

        System.Byte[]                        reportBytes = new System.Byte[0](); 

        SRSProxy                             srsProxy; 

        SRSReportRunService                  srsReportRunService = new SrsReportRunService(); 

        Microsoft.Dynamics.AX.Framework.Reporting.Shared.ReportingService.ParameterValue[]  parameterValueArray; 

        Map                                  reportParametersMap; 

        SRSReportExecutionInfo               executionInfo = new SRSReportExecutionInfo(); 

        iPayInvoiceErrorLog                 iPayInvoiceErrorLogiPayInvoiceErrorLogUpdate;; 

        iPayInvoiceParameters               iPayInvoiceParameters; 

        utcDateTime                         fromPeriodToPeriod; 

  

        fromPeriod =  DateTimeUtil::newDateTime(today(),0); 

        ToPeriod   = DateTimeUtil::newDateTime(today(),86400); 

        // ToD Remove by Rtna 

        fromPeriod =  DateTimeUtil::newDateTime(mkDate(8,8,2022),0); 

       ToPeriod   = DateTimeUtil::newDateTime(mkDate(8,8,2022),86400); 

        // ToD Remove by Rtna 

  

  

        try 

        { 

            ttsbegin; 

            iPayInvoiceParameters = iPayInvoiceParameters::find(); 

             

            contract.parmFromDate(today()); 

            contract.parmToDate(today()); 

            controller.parmArgs(new Args()); 

            controller.parmReportName(ssrsReportStr(iPayInvoiceErrorLogReport, Reports)); 

            controller.parmShowDialog(false); 

            controller.parmLoadFromSysLastValue(false); 

            controller.parmReportContract().parmRdpContract(contract); 

            settings = controller.parmReportContract().parmPrintSettings(); 

            settings.printMediumType(SRSPrintMediumType::File); 

            settings.fileName(fileName); 

            settings.fileFormat(SRSReportFileFormat::PDF); 

            controller.parmReportContract().parmReportServerConfig(SRSConfiguration::getDefaultServerConfiguration()); 

            controller.parmReportContract().parmReportExecutionInfo(executionInfo); 

            srsReportRunService.getReportDataContract(controller.parmreportcontract().parmReportName()); 

            srsReportRunService.preRunReport(controller.parmreportcontract()); 

            reportParametersMap = srsReportRunService.createParamMapFromContract(controller.parmReportContract()); 

            parameterValueArray = SrsReportRunUtil::getParameterValueArray(reportParametersMap); 

            srsProxy =SRSProxy::constructWithConfiguration(controller.parmReportContract().parmReportServerConfig()); 

            reportBytes = srsproxy.renderReportToByteArray(controller.parmreportcontract().parmreportpath(), 

                                                    parameterValueArray, 

                                                    settings.fileFormat(), 

                                                    settings.deviceinfo()); 

            container               binData; 

            Binary                  binaryData; 

            System.IO.MemoryStream  mstream = new System.IO.MemoryStream(reportBytes); 

            binaryData = Binary::constructFromMemoryStream(mstream); 

            if(binaryData) 

            { 

                binData = binaryData.getContainer(); 

            } 

            System.Byte[]       binData1; 

            System.IO.Stream    stream1; 

            for(int i = 0; i < conLen(binData); i++) 

            { 

                binData1 = conPeek(binData,i+1); 

                stream1  = new System.IO.MemoryStream(binData1); 

            } 

            drafterrorlog = new Set(Types::Record); 

             while select  iPayInvoiceErrorLog 

                where iPayInvoiceErrorLog.EmailSent == NoYes::No 

                    && iPayInvoiceErrorLog.CreatedDateTime >= fromPeriod 

                && iPayInvoiceErrorLog.CreatedDateTime <= toPeriod 

            { 

                drafterrorlog.add(iPayInvoiceErrorLog); 

                Logcheck = true; 

            } 

  

            if (Logcheck) 

                { 

                     

                    this.sendEmail(iPayInvoiceParameters.SendorEmail,iPayInvoiceParameters.ReceiverEmail,strFmt('Invoice error log failed list on - %1',today()),stream1,fileName);//--,logdetails,skipHTMLEncodingSet); 

              //  SysEmailTable::sendMail(iPayInvoiceParameters.SendorEmailuserInfo.LanguageiPayInvoiceParameters.ReceiverEmaildraftMap, '', '', false, '', false, skipHTMLEncodingSet); 

                    update_recordset iPayInvoiceErrorLogUpdate 

                    setting EmailSent = NoYes::Yes 

                    where  iPayInvoiceErrorLogUpdate.EmailSent == NoYes::No 

                    && iPayInvoiceErrorLogUpdate.CreatedDateTime >= fromPeriod 

                    && iPayInvoiceErrorLogUpdate.CreatedDateTime <= toPeriod; 

             

                    info("Email sent."); 

                } 

             

             

                else 

                { 

                    info("No records found."); 

                } 

            

                 Logcheck = false ; 

                ttscommit; 

             

        } 

        catch (Exception::Error) 

        { 

            throw error("Issue while sending email."); 

        } 

    } 

  

   public void sendEmail(Description EmailFrom,Description emailTo, Description Subject,System.IO.MemoryStream stream1,FileName filename) //,Map _map,set _set) 

    { 

        SysMailerSMTP           mailer = new SysMailerSMTP(); 

        SysMailerMessageBuilder builder = new SysMailerMessageBuilder(); 

        SysEmailParameters      parameters = SysEmailParameters::find(); 

        SysEmailMessageSystemTable  messageTable; 

  

        select firstonly messageTable  

            where messageTable.EmailId == 'INVError2'; 

        //you will have to setup the below parameters in sysadmin module 

        if (parameters.SMTPRelayServerName) 

        { 

            mailer.SMTPRelayServer(parameters.SMTPRelayServerName, 

                                        parameters.SMTPPortNumber, 

                                        parameters.SMTPUserName, 

                                        SysEmailParameters::password(), 

                                        parameters.SMTPUseNTLM); 

        } 

        else 

        { 

            warning("SERVER NOT FOUND"); 

        } 

       // _map.insert('IPaybleTable', this.htmlTable()); 

       // _set.add('IPaybleTable'); 

  

        builder.setFrom(EmailFrom); 

        builder.addTo(emailTo); 

        builder.setSubject(Subject); 

       // builder.setBody(messageTable.Mail); 

        

        builder.setBody(this.htmlTable(),true); 

        //builder.setBody(SysEmailMessage::stringExpand(messageTable.Mail,SysEmailTable::htmlEncodeParameters(_map))); 

        if(stream1 != null) 

        { 

            builder.addAttachment(stream1, fileName); 

        } 

  

        SysMailerFactory::getNonInteractiveMailer().sendNonInteractive(builder.getMessage()); 

    } 

  

    str htmlTable() 

    { 

        str                         ret                     = ""; 

        SetEnumerator               se                      = drafterrorlog.getEnumerator(); 

        IPayInvoiceErrorLog       iPayInvoiceErrorLogloc; 

  

        ret+='<p>Hi Team,</p>'; 

  

        ret +=' <p>Below Invoices are Processed in Dynamic 365FnO and find attached document for invoiced Status log.</p>'; 

        ret +=  '<p>Please review/Contact your administrator.</p>'; 

        ret += '<table border="1">'; 

        ret += "<b><tr style=background-color:#f0f0f0>"; 

        ret += '<td style=text-align:center>Invoice Number</td>'; 

        ret += '<td style=text-align:center>Ipayable Number</td>'; 

        ret += '<td style=text-align:center>Vendor Number</td>'; 

        ret += '<td style=text-align:center>Vendor Name</td>'; 

        ret += '<td style=text-align:center>Error Details</td>'; 

        ret += '<td style=text-align:center>File</td>'; 

        ret += "</tr></b>"; 

         

  

  

        while(se.moveNext()) 

        { 

            iPayInvoiceErrorLogloc = se.current(); 

  

            ret += "<tr>"; 

            ret += strFmt('<td>%1</td>', SysEmailTable::htmlEncode(iPayInvoiceErrorLogloc.InvoiceId)); 

            ret += strFmt('<td>%1</td>', SysEmailTable::htmlEncode(iPayInvoiceErrorLogloc.IPayableNo)); 

            ret += strFmt('<td>%1</td>', SysEmailTable::htmlEncode(iPayInvoiceErrorLogloc.VendorNo)); 

            ret += strFmt('<td>%1</td>', SysEmailTable::htmlEncode(iPayInvoiceErrorLogloc.VendorName)); 

            ret += strFmt('<td>%1</td>', SysEmailTable::htmlEncode(iPayInvoiceErrorLogloc.Log)); 

            ret += strFmt('<td>%1</td>', SysEmailTable::htmlEncode(iPayInvoiceErrorLogloc.FileName)); 

            ret += "</tr>"; 

        } 

  

        ret += "</table>"; 

    ret += '<p>Thanks &amp; Regards <briPayable Team</p>'; 

  

        return ret; 

    } 

  

} 

No comments:

Post a Comment