Purpose:
The purpose of this blog post is to demonstrate how can we create print management settings in X++
Product:
Dynamics AX 2012
Description:
The code creates a print management settings record on a customer for collection letter note document and uses first contact of type email and purpose “Collection” found on the customer record to create print destination settings.
Code:
static void MAKCustPrintMgmtSettings(Args _args)
{
PrintMgmtSettings printMgtSettings;
PrintMgmtDocInstance printMgtDocInstance;
SRSPrintDestinationSettings printDestinationSettings;
PrintMgmtReportFormat PrintMgmtReportFormat;
PrintMgmtDocumentType PrintMgmtDocumentType;
PrintMgmtDocInstanceType PrintMgmtDocInstanceType;
NoYes NoYes;
SRSReportFileFormat SRSReportFileFormat;
SRSPrintMediumType SRSPrintMediumType;
str EmailTo;
CustTable custTable;
LogisticsElectronicAddress electronicAddress;
LogisticsElectronicAddressRole electronicAddrRole;
LogisticsLocationRole locationRole;
container record;
int totalRecords = 0;
container printerSetting = conNull();
try
{
while select custTable where custTable.AccountNum == 'C000115'
{
select firstOnly electronicAddress
where electronicAddress.Location == DirPartyLocation::findOrCreate(custTable.Party, 0).Location
&& electronicAddress.Type == LogisticsElectronicAddressMethodType::Email
join electronicAddrRole
where electronicAddrRole.ElectronicAddress == electronicAddress.RecId
join locationRole
where locationRole.RecId == electronicAddrRole.LocationRole
&& locationRole.Name == "Collection";
if (electronicAddress.RecId)
{
EmailTo = electronicAddress.Locator;
}
printDestinationSettings = new SRSPrintDestinationSettings(printerSetting);
printDestinationSettings.unpack(printerSetting);
printDestinationSettings.caption("@SYS131685");
printDestinationSettings.emailTo(EmailTo);
printDestinationSettings.printMediumType(SRSPrintMediumType::Email);
printDestinationSettings.emailSubject('Collection Letter');
printDestinationSettings.emailAttachmentFileFormat(SRSReportFileFormat::PDF);
printDestinationSettings.numberOfCopies(1);
printMgtDocInstance = PrintMgmtDocInstance::find(custTable.RecId, custTable.TableId, PrintMgmtNodeType::CustTable, PrintMgmtDocumentType::CustCollectionLetter, 1);
ttsBegin;
if (printMgtDocInstance)
{
printMgtDocInstance.selectForUpdate(true);
}
printMgtDocInstance.Name = ""; // To override give a blank value
printMgtDocInstance.DocumentType = PrintMgmtDocumentType::CustCollectionLetter;
printMgtDocInstance.PrintType = PrintMgmtDocInstanceType::Original;
printMgtDocInstance.PriorityId = 1;
printMgtDocInstance.Suppress = NoYes::No;
printMgtDocInstance.ReferencedTableId = custTable.TableId;
printMgtDocInstance.ReferencedRecId = custTable.RecId;
printMgtDocInstance.NodeType = PrintMgmtNodeType::CustTable;
if (printMgtDocInstance)
{
printMgtDocInstance.update();
}
else
{
printMgtDocInstance.insert();
}
select firstOnly printMgtSettings
order by PriorityID
where printMgtSettings.ParentId==printMgtDocInstance.RecId
&& printMgtSettings.PriorityID == 1;
if (printMgtSettings)
{
printMgtSettings.selectForUpdate(true);
}
printMgtSettings.ParentId = printMgtDocInstance.RecId;
printMgtSettings.ReportFormat = PrintMgmtReportFormat::findByType(PrintMgmtDocumentType::CustCollectionLetter, 'CustCollectionJour.Report', '').RecId;
printMgtSettings.PrintJobSettings = printDestinationSettings.pack();
printMgtSettings.NumberOfCopies = 1;
printMgtSettings.PriorityId = 1;
if (printMgtSettings)
{
printMgtSettings.update();
}
else
{
printMgtSettings.insert();
}
ttsCommit;
totalRecords++;
if (printMgtDocInstance && printMgtSettings)
{
info(strFmt("Customer %1 updated successfully", custTable.AccountNum));
}
else
{
error(strFmt("Failed to update customer %1", custTable.AccountNum));
}
}
}
catch (Exception::Error)
{
throw(Exception::Error);
}
info(strFmt("Total records read = %1", totalRecords));
}