My requirement is to create XML files for the vend payment journal through code and send them to SharePoint.
using System.IO;
using System.IO.Path;
using Microsoft.Azure;
using Blobstorage = Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using Microsoft.Dynamics.Platform.Integration.SharePoint;
using Microsoft.Dynamics.ApplicationPlatform.Services.Instrumentation;
using Microsoft.DynamicsOnline.Infrastructure.Components.SharedServiceUnitStorage;
using Microsoft.Dynamics.AX.Framework.FileManagement;
internal final class YNV_PoBankIntegration
{
/// <summary>
/// Class entry point. The system will call this method when a designated menu
/// is selected or when execution starts and this class is set as the startup class.
/// </summary>
/// <param name = "_args">The specified arguments.</param>
public static void createXML(LedgerJournalTrans ledgerJournalTrans)
{
XmlDocument doc;
XmlElement Document;
XmlElement CstmrCdtTrfInitn;
XmlElement GrpHdr;
XmlElement oneChild;
XmlElement secondChild;
XmlElement thirdChild;
XmlElement fourthChild;
XmlElement InitgPtyNode;
XmlElement InitgPtyChild;
XmlElement PmtInfList;
XmlElement PmtInfListChild1;
XmlElement PmtInfListChild2;
XmlElement PmtInfListChild3;
XmlElement PmtInfListChild4;
XmlElement PmtInfListChild5;
XmlElement PmtTpInf;
XmlElement SvcLvlList;
XmlElement SvcLvlListChild1;
XmlElement ReqdExctnDt;
XmlElement DbtrList;
XmlElement DbtrListChild1;
XmlElement PstlAdr;
XmlElement Ctry;
XmlElement AdrLine;
XmlElement DbtrAcct;
XmlElement IBAN;
XmlElement Id;
XmlElement DbtrAgt;
XmlElement FinInstnId;
XmlElement BIC;
XmlElement CdtTrfTxInf;
XmlElement PmtId;
XmlElement EndToEndId;
XmlElement Amt;
XmlElement InstdAmt;
XmlElement CdtrAgt;
XmlElement FinInstnIdList;
XmlElement Cdtr;
XmlElement Nm;
XmlElement CdtrAcct;
boolean transactionStatus = NoYes::No;
DimensionAttributeValueCombination combination,combinationOffset;
LedgerJournalTrans ledgerJournalTransLoc,ledgerJournalTransLocSum;
LedgerJournalTable ledgerJournalTable = LedgerJournalTable::find(ledgerJournalTrans.JournalNum);
doc = XmlDocument::newBlank();
Document = doc.createElement('Document');
Document.setAttribute('xsi:schemaLocation','urn:iso:std:iso:20022:tech:xsd:pain.001.001.03 pain.001.001.03.xsd');
Document.setAttribute('xmlns:xsi','http://www.w3.org/2001/XMLSchema-instance');
Document.setAttribute('xmlns','urn:iso:std:iso:20022:tech:xsd:pain.001.001.03');
doc.appendChild(Document);
//CstmrCdtTrfInitn
CstmrCdtTrfInitn = doc.createElement('CstmrCdtTrfInitn');
Document.appendChild(CstmrCdtTrfInitn);
str formatted = System.String::Format(
'{0:yyyyMMddTHHmmss}',
DateTimeUtil::newDateTime(systemDateGet(), timeNow()));
System.DateTime dateTime = System.DateTime::get_UtcNow();
str utcTimeAsStr = dateTime.ToString('yyyyMdHHmmss');
select sum(AmountCurDebit),sum(AmountCurCredit) from ledgerJournalTransLocSum where ledgerJournalTransLocSum.JournalNum == ledgerJournalTable.JournalNum;
// GrpHdr
GrpHdr = doc.createElement('GrpHdr');
CstmrCdtTrfInitn.appendChild(GrpHdr);
utcDateTime todayDate = DateTimeUtil::getSystemDateTime();
oneChild = doc.createElement('MsgId');
oneChild.appendChild(doc.createTextNode(strFmt("%1-%2" ,ledgerJournalTrans.JournalNum , utcTimeAsStr)));
GrpHdr.appendChild(oneChild);
secondChild = doc.createElement('CreDtTm');
secondChild.appendChild(doc.createTextNode(formatted));
GrpHdr.appendChild(secondChild);
thirdChild = doc.createElement('NbOfTxs');
thirdChild.appendChild(doc.createTextNode(any2Str(ledgerJournalTable.numOfLines())));
GrpHdr.appendChild(thirdChild);
fourthChild = doc.createElement('CtrlSum');
fourthChild.appendChild(doc.createTextNode(any2Str(trunc(ledgerJournalTransLocSum.AmountCurDebit - ledgerJournalTransLocSum.AmountCurCredit))));
GrpHdr.appendChild(fourthChild);
// InitgPtyNode
InitgPtyNode = doc.createElement('InitgPtyc');
GrpHdr.appendChild(InitgPtyNode);
InitgPtyChild = doc.createElement('Nm');
InitgPtyChild.appendChild(doc.createTextNode(CompanyInfo::findRecId(CompanyInfo::current()).Name));
InitgPtyNode.appendChild(InitgPtyChild);
PaymentFormatCodeSets_W paymentFormatCodeSets_W = PaymentFormatCodeSets_W::find(VendPaymModeTable::find(ledgerJournalTrans.PaymMode).RecId);
// PmtInfList Node
PmtInfList = doc.createElement('PmtInf');
CstmrCdtTrfInitn.appendChild(PmtInfList);
PmtInfListChild1 = doc.createElement('PmtInfId');
PmtInfListChild1.appendChild(doc.createTextNode(strFmt('0%1%2 020240515-01',ledgerJournalTrans.JournalNum,paymentFormatCodeSets_W.Code)));
PmtInfList.appendChild(PmtInfListChild1);
PmtInfListChild2 = doc.createElement('PmtMtd');
PmtInfListChild2.appendChild(doc.createTextNode('TRF'));
PmtInfList.appendChild(PmtInfListChild2);
PmtInfListChild3 = doc.createElement('BtchBookg');
PmtInfListChild3.appendChild(doc.createTextNode('false'));
PmtInfList.appendChild(PmtInfListChild3);
PmtInfListChild4 = doc.createElement('NbOfTxs');
PmtInfListChild4.appendChild(doc.createTextNode(any2Str(ledgerJournalTable.numOfLines())));
PmtInfList.appendChild(PmtInfListChild4);
PmtInfListChild5 = doc.createElement('CtrlSum');
PmtInfListChild5.appendChild(doc.createTextNode(any2Str(trunc(ledgerJournalTransLocSum.AmountCurDebit - ledgerJournalTransLocSum.AmountCurCredit))));
PmtInfList.appendChild(PmtInfListChild5);
// PmtTpInf
PmtTpInf = doc.createElement('PmtTpInf');
PmtInfList.appendChild(PmtTpInf);
// SvcLvlList
SvcLvlList = doc.createElement('SvcLvl');
PmtTpInf.appendChild(SvcLvlList);
SvcLvlListChild1 = doc.createElement('Cd');
SvcLvlListChild1.appendChild(doc.createTextNode(paymentFormatCodeSets_W.Code));
SvcLvlList.appendChild(SvcLvlListChild1);
// ReqdExctnDt
ReqdExctnDt = doc.createElement('ReqdExctnDt');
ReqdExctnDt.appendChild(doc.createTextNode(any2Str((systemDateGet()))));
PmtInfList.appendChild(ReqdExctnDt);
// DbtrList
DbtrList = doc.createElement('Dbtr');
PmtInfList.appendChild(DbtrList);
DbtrListChild1 = doc.createElement('Nm');
DbtrListChild1.appendChild(doc.createTextNode(CompanyInfo::findByCompany_IN(ledgerJournalTrans.Company).Name));
DbtrList.appendChild(DbtrListChild1);
//PstlAdr
PstlAdr = doc.createElement('PstlAdr');
DbtrList.appendChild(PstlAdr);
Ctry = doc.createElement('Ctry');
Ctry.appendChild(doc.createTextNode(SysCountryRegionCode::countryInfo(ledgerJournalTrans.Company)));
PstlAdr.appendChild(Ctry);
AdrLine = doc.createElement('AdrLine');
AdrLine.appendChild(doc.createTextNode(CompanyInfo::findByCompany_IN(ledgerJournalTrans.Company).postalAddress().Address));
PstlAdr.appendChild(AdrLine);
//
DbtrAcct = doc.createElement('DbtrAcct');
PmtInfList.appendChild(DbtrAcct);
Id = doc.createElement('Id');
DbtrAcct.appendChild(Id)
;
IBAN = doc.createElement('IBAN');
combinationOffset = DimensionAttributeValueCombination::find(ledgerJournalTrans.OffsetLedgerDimension);
IBAN.appendChild(doc.createTextNode(BankAccountTable::find(combinationOffset.DisplayValue).AccountNum));
Id.appendChild(IBAN);
DbtrAgt = doc.createElement('DbtrAgt');
PmtInfList.appendChild(DbtrAgt);
FinInstnId = doc.createElement('FinInstnId');
DbtrAgt.appendChild(FinInstnId);
BIC = doc.createElement('BIC');
BIC.appendChild(doc.createTextNode(BankAccountTable::find(combinationOffset.DisplayValue).SWIFTNo));
FinInstnId.appendChild(BIC);
while select ledgerJournalTransLoc where ledgerJournalTransLoc.JournalNum == ledgerJournalTrans.JournalNum
{
transactionStatus = NoYes::Yes;
combination = DimensionAttributeValueCombination::find(ledgerJournalTransLoc.LedgerDimension);
CdtTrfTxInf = doc.createElement('CdtTrfTxInf');
PmtInfList.appendChild(CdtTrfTxInf);
PmtId = doc.createElement('PmtId');
CdtTrfTxInf.appendChild(PmtId);
EndToEndId = doc.createElement('EndToEndId');
EndToEndId.appendChild(doc.createTextNode(strFmt('%1-%2-05',ledgerJournalTransLoc.Voucher,ledgerJournalTransLoc.RecId)));
PmtId.appendChild(EndToEndId);
Amt = doc.createElement('Amt');
CdtTrfTxInf.appendChild(Amt);
InstdAmt = doc.createElement('InstdAmt');
InstdAmt.setAttribute("Ccy",ledgerJournalTransLoc.CurrencyCode);
if (ledgerJournalTransLoc.AmountCurDebit != 0)
{
InstdAmt.appendChild(doc.createTextNode(any2Str(trunc(ledgerJournalTransLoc.AmountCurDebit))));
}
else
{
InstdAmt.appendChild(doc.createTextNode(strFmt("-%1",any2Str(trunc(ledgerJournalTransLoc.AmountCurCredit)))));
}
Amt.appendChild(InstdAmt);
CdtrAgt = doc.createElement('CdtrAgt');
CdtTrfTxInf.appendChild(CdtrAgt);
FinInstnIdList = doc.createElement('FinInstnId');
CdtrAgt.appendChild(FinInstnIdList);
BIC = doc.createElement('BIC');
BIC.appendChild(doc.createTextNode(VendBankAccount::find(combination.displayValue,ledgerJournalTransLoc.CustVendBankAccountId).SWIFTNo));
FinInstnIdList.appendChild(BIC);
Nm = doc.createElement('Nm');
Nm.appendChild(doc.createTextNode(VendBankAccount::find(combination.displayValue,ledgerJournalTransLoc.CustVendBankAccountId).Name));
FinInstnIdList.appendChild(Nm);
PstlAdr = doc.createElement('PstlAdr');
FinInstnIdList.appendChild(PstlAdr);
Ctry = doc.createElement('Ctry');
Ctry.appendChild(doc.createTextNode(LogisticsAddressCountryRegion::find(LogisticsPostalAddress::findByLocation(VendBankAccount::find(combination.displayValue,ledgerJournalTransLoc.CustVendBankAccountId).Location).CountryRegionId).ISOcode));
PstlAdr.appendChild(Ctry);
AdrLine = doc.createElement('AdrLine');
AdrLine.appendChild(doc.createTextNode(LogisticsPostalAddress::findByLocation(VendBankAccount::find(combination.displayValue,ledgerJournalTransLoc.CustVendBankAccountId).Location).Address));
PstlAdr.appendChild(AdrLine);
Cdtr = doc.createElement('Cdtr');
CdtTrfTxInf.appendChild(Cdtr);
Nm = doc.createElement('Nm');
Nm.appendChild(doc.createTextNode('...... ..'));
Cdtr.appendChild(Nm);
PstlAdr = doc.createElement('PstlAdr');
Cdtr.appendChild(PstlAdr);
Ctry = doc.createElement('Ctry');
Ctry.appendChild(doc.createTextNode(LogisticsAddressCountryRegion::find(DirParty::primaryPostalAddress(VendTable::find(ledgerJournalTransLoc.accountDisplay()).Party).CountryRegionId).ISOcode));
PstlAdr.appendChild(Ctry);
AdrLine = doc.createElement('AdrLine');
AdrLine.appendChild(doc.createTextNode(DirParty::primaryPostalAddress(VendTable::find(ledgerJournalTransLoc.accountDisplay()).Party).Address));
PstlAdr.appendChild(AdrLine);
CdtrAcct = doc.createElement('CdtrAcct');
CdtTrfTxInf.appendChild(CdtrAcct);
Id = doc.createElement('Id');
CdtrAcct.appendChild(Id)
;
IBAN = doc.createElement('IBAN');
IBAN.appendChild(doc.createTextNode(VendBankAccount::find(combination.displayValue,ledgerJournalTransLoc.CustVendBankAccountId).BankIBAN));
Id.appendChild(IBAN);
}
Info("File sent to sharepoint");
System.Byte[] reportBytes = new System.Byte[0]();
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
reportBytes = enc.GetBytes(doc.outerXml());
System.IO.Stream streamLoc = new System.IO.MemoryStream(reportBytes);
if (transactionStatus == NoYes::Yes)
{
YNV_PoBankIntegration::sendFileToSharePoint(streamLoc,ledgerJournalTrans.JournalNum);
}
}
public static void sendFileToSharePoint(System.IO.Stream stream, LedgerJournalId ledgerJournalId)
{
Filename fileName;
FileUploadTemporaryStorageResult fileUploadResult;
VendParameters vendParameters =VendParameters::find();
if (fileUploadResult == null)
{
//fileName = System.Text.RegularExpressions.Regex::Replace(strFmt("%1-%2",ledgerJournalId,utcTimeAsStr), @"[\W_]", "");
System.DateTime dateTime = System.DateTime::get_UtcNow();
str utcTimeAsStr = dateTime.ToString('yyyyMdHHmmss');
str flileNameLoc = strFmt("%1%2.Xml",ledgerJournalId,utcTimeAsStr);
try
{
str defaultSPServer = vendParameters.YNV_SharePointURL; //'tekexperts.sharepoint.com';
str spSite = vendParameters.YNV_SharePointSite; //'sites/YNVArchitectureAndDesign';
str spFolderPath = vendParameters.YNV_FileLocation; //"Shared Documents/Finance/Integration/POC_BankIntegration";
str fileContetType = System.Web.MimeMapping::GetMimeMapping(flileNameLoc);
str externalId = xUserInfo::getExternalId(vendParameters.YNV_UserForSharepointUser);
Microsoft.Dynamics.AX.Framework.FileManagement.IDocumentStorageProvider storageProvider = new Microsoft.Dynamics.AX.Framework.FileManagement.SharePointDocumentStorageProvider(
defaultSPServer,
spSite,
spFolderPath,
externalId);
storageProvider.ProviderId = DocuStorageProviderType::SharePoint;
if (storageProvider != null)
{
str uniqueFilename = storageProvider.GenerateUniqueName(filename);
Microsoft.Dynamics.AX.Framework.FileManagement.DocumentLocation location = storageProvider.SaveFile(
newGuid(),
flileNameLoc,
fileContetType,
stream);
}
}
catch(Exception::Error)
{
error("Upload failed.");
}
}
}
}
output:-
No comments:
Post a Comment