/// <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 iPayInvoiceErrorLog, iPayInvoiceErrorLogUpdate;;
iPayInvoiceParameters iPayInvoiceParameters;
utcDateTime fromPeriod, ToPeriod;
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.SendorEmail, userInfo.Language, iPayInvoiceParameters.ReceiverEmail, draftMap, '', '', 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 & Regards <br> iPayable Team</p>';
return ret;
}
}