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; }
}
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
Post a Comment