Mail Util d365fo x++

Mail Util d365fo x++

Code:

public class DSPMMailUtil
{
    str                     emailBody, emailSubject;
    List                    emailToList;
    List                    emailCCList;
    System.IO.Stream        fileStream;
    Filename                fileName;
    SysMailerMessageBuilder messageBuilder;
    str                     message;
    str                     template;
    boolean                 sendInteractive = false;
    str                     emailFrom = SysEmailParameters::find().SMTPUserName;
    Common                  common;

    public static DSPMMailUtil construct()
    {
        return new DSPMMailUtil();
    }

    public str parmTemplate(str _template = template)
    {
        template = _template;
        return template;
    }

    public Common parmCommon(Common _common = common)
    {
        common = _common;
        return common;
    }

    public str parmMessage(str _message = message)
    {
        message = _message;
        return Message;
    }

    public str parmEmailBody(str _emailBody = emailBody)
    {
        emailBody = _emailBody;
        return emailBody;
    }

    public str parmEmailSubject(str _emailSubject = emailSubject)
    {
        emailSubject = _emailSubject;
        return emailSubject;
    }

    public Filename parmFilename(Filename _Filename = Filename)
    {
        Filename = _Filename;
        return Filename;
    }

    public System.IO.Stream parmFileStream(System.IO.Stream _fileStream = fileStream)
    {
        fileStream = _fileStream;
        return fileStream;
    }

    public List parmEmailList(List _emailToList = emailToList)
    {
        emailToList = _emailToList;
        return emailToList;
    }

    public List parmEmailCCList(List _emailCCList = emailCCList)
    {
        emailCCList = _emailCCList;
        return emailCCList;
    }

    public void addEmailTo(Email _emailTo)
    {
        if(!emailToList)
            emailToList = new List(Types::String);

        emailToList.addEnd(_emailTo);
    }

    public void addEmailCC(Email _emailCC)
    {
        if(!emailCCList)
            emailCCList = new List(Types::String);

        emailCCList.addEnd(_emailCC);
    }

    public void addWorkerTo(HcmPersonnelNumberId _employeeId)
    {
        this.addEmailTo(HcmWorker::findByPersonnelNumber(_employeeId).email());
    }

    public void addWorkerCC(HcmPersonnelNumberId _employeeId)
    {
        this.addEmailCC(HcmWorker::findByPersonnelNumber(_employeeId).email());
    }

    public boolean parmSendInteractive(boolean _sendInteractive = sendInteractive)
    {
        sendInteractive = _sendInteractive;
        return sendInteractive;
    }

    public boolean send()
    {
        boolean         ret;
        ListEnumerator  emailListEnumerator;
        ListEnumerator  ccListEnumerator;
        System.Exception exception;

        if(this.validateParms())
        {
            try
            {
                messageBuilder = new SysMailerMessageBuilder();
                messageBuilder.setFrom(emailFrom);
                messageBuilder.setSubject(emailSubject);
                
                if(template)
                {
                    messageBuilder.setBody(this.generateMapping(), true);
                }
                else
                {
                    messageBuilder.setBody(emailBody, false);
                }


                emailListEnumerator = emailToList.getEnumerator();
                
                if(emailCCList)
                {
                    ccListEnumerator    = emailCCList.getEnumerator();

                    while(ccListEnumerator.moveNext())
                    {
                        messageBuilder.addCc(any2Str(ccListEnumerator.current()));
                    }
                }
                

                while(emailListEnumerator.moveNext())
                {
                    messageBuilder.addTo(any2Str(emailListEnumerator.current()));
                }

                if(fileStream)
                {
                    messageBuilder.addAttachment(fileStream,fileName);
                }

                ret     = this.sendEmail(messageBuilder.getMessage(),sendInteractive);
                Message = 'Email Sent Successfully.';
            }
            catch (Exception::Error)
            {
                ret     = false;
                Message = 'Error in sending Email';
                error(Message);
            }
            catch (exception)
            {
                ret     = false;
                Message = strFmt('Error in sending Email- %1-%2', emailSubject, exception.Message);
                error(Message);
            }
            catch
            {
                ret     = false;
                Message = strFmt('Error in sending Email- %1', emailSubject);
                error(Message);
            }
        }
        return ret;
    }

    private boolean validateParms()
    {
        boolean ret;
        ;

        ret = true;

        if(!emailToList)
        {
            Message = 'Email List is Empty';
            error(Message);
            ret = false;
        }
        else if(!emailFrom)
        {
            Message = 'SMTP Username must be filled in';
            error(Message);
            ret = false;
        }
        else
        {
            Email toEmail;
            ListEnumerator  emailListEnumerator;
            emailListEnumerator = emailToList.getEnumerator();

            while(emailListEnumerator.moveNext())
            {
                toEmail = any2Str(emailListEnumerator.current());
                
                if(toEmail && toEmail != '')
                {
                    ret = true;
                    break;
                }
                else
                {
                    ret = false;
                }
            }

            DSPMUtil::showWarning(!ret, 'Email is empty');
        }
        return ret;
    }

    private boolean sendEmail(System.Net.Mail.MailMessage _mailMessage, boolean _intractive)
    {
        boolean                     messageSent;
        SysIMailerNonInteractive    nonInteractiveMailer;
        SysIMailerInteractive       interactiveMailer;
        
        
        if(_intractive)
        {
            messageSent = SysMailerFactory::sendInteractive(_mailMessage);
        }
        else
        {
            messageSent = SysMailerFactory::sendNonInteractive(_mailMessage);
        }
        

        return messageSent;
    }

    public Notes generateMapping()
    {
        SYSTABLEFIELDIDVIEW     SYSTABLEFIELDIDVIEW;
        Map                     map = new Map(Types::String,Types::String);

        SysDictTable    dictTable = new SysDictTable(common.TableId);
        SysDictField    dictField;
        FieldId         fieldId = dictTable.fieldNext(0);

        while (fieldId && !isSysId(fieldId))
        {
            select SYSTABLEFIELDIDVIEW  where SYSTABLEFIELDIDVIEW.ID == common.TableId && SYSTABLEFIELDIDVIEW.FIELDID == fieldId;
            map.insert(SYSTABLEFIELDIDVIEW.name, strFmt("%1", common.(fieldId)));
            fieldId = dictTable.fieldNext(fieldId);
        }
        
        message      = SysEmailMessageTable::find(template, companyinfo::languageId()).Mail;
        emailSubject = SysEmailMessageTable::find(template, companyinfo::languageId()).Subject;
        Notes result = SysEmailMessage::stringExpand(message, SysEmailTable::htmlEncodeParameters(map));
        return result;
    }

}

Comments

Popular posts from this blog

D365FO – AX – X++ –Refresh, Reread, Research, and ExecuteQuery

Create Inventory Journal through Code in D365FO X++

SalesLine Reservation in D365fo x++