Without any code development, it can actually be done through the "Batch" button at the post Confirmation prompt, but the requirement we have is to complete the work in the least time possible, what we've done is just to bring this manual user process into code.
The usual posting can be done by 2 lines:
salesFormLetter = SalesFormLetter::construct(DocumentStatus::PackingSlip);
salesFormLetter.update(......)
But that involve wait time, the user needs to wait till the posting to finish before they regain control and move on to the next task, so we modify it a bit to put the job into batch and return the control to user.
I've extracted the code into a job to show it here.
The "Init values" section is done as a setup in our solution, but I've replaced it with hard coded text here to shows the use of SalesFormLetter and add them into batch through code.
It is separated into 3 sections:
- Initialize the values
- Construct the SalesFormLetter class and pass in the required parameters & PrintJobSettings
- Create the batch job and task
static void Job1(Args _args)
{
SalesFormLetter salesFormLetter;
SalesId salesId;
SalesTable salesTable;
BatchInfo batchInfo;
BatchHeader batchHeader;
BatchGroupId groupId;
BatchCaption batchInfoCaption, batchHeaderCaption;
PrintJobSettings printJobSettings;
boolean printToFile;
NoYes printReport;
FileName fileName;
;
//Init values ==============================================================
salesId = "SO-101263";
salesTable = salesTable::find(salesId);
fileName = strFmt("\\\\serverName\\SOConfirmation_%1.pdf", salesId);
groupId = "TST";
batchInfoCaption = "Order confirmation posting: " + salesId;
batchHeaderCaption = "Order confirmation: " + salesId;
printReport = NoYes::Yes;
printToFile = false; //If 'printReport' is true, then this indicate print to file or printer
//Construct SalesFormLetter and init values ================================
salesFormLetter = SalesFormLetter::construct(DocumentStatus::Confirmation);
salesFormLetter.salesTable(salesTable);
salesFormLetter.transDate (systemdateget());
salesFormLetter.specQty (SalesUpdate::All);
salesFormLetter.proforma (NoYes::No);
salesFormLetter.printFormLetter (printReport);
salesFormLetter.printCODLabel (NoYes::No);
salesFormLetter.printFreightSlip (NoYes::No);
salesFormLetter.printShippingLabel (NoYes::No);
salesFormLetter.usePrintManagement (false);
salesFormLetter.creditRemaining (salesFormLetter.creditRemaining());
salesFormLetter.createParmUpdate(false);
salesFormLetter.initParameters(salesFormLetter.salesParmUpdate(), Printout::Current);
salesFormLetter.giroType(salesTable.GiroType);
salesFormLetter.initLinesQuery();
//PrintJobSettings
printJobSettings = new PrintJobSettings(salesFormLetter.printerSettingsFormletter(PrintSetupOriginalCopy::Original));
if(printToFile)
{
printJobSettings.setTarget(PrintMedium::File);
printJobSettings.warnIfFileExists(false);
printJobSettings.format(PrintFormat::PDF);
printJobSettings.fileName(fileName);
}
else
{
printJobSettings.setTarget(PrintMedium::PrintArchive);
}
salesFormLetter.updatePrinterSettingsFormLetter(printJobSettings.packPrintJobSettings());
//Init BatchInfo, BatchHeader, and add into batch job ======================
batchInfo = salesFormLetter.batchInfo();
batchInfo.parmBatchExecute(NoYes::Yes);
batchInfo.parmCaption(batchInfoCaption);
batchInfo.parmGroupId(groupId);
batchInfo.parmRunClass(salesFormLetter);
batchHeader = batchInfo.parmBatchHeader();
batchHeader.parmCaption(batchHeaderCaption);
batchInfo.doBatch();
}
Order confirmation added into batch job |
Batch job waiting to be executed |
Task within the batch job, waiting to be executed |
Task completed Note: The order confirmation process added additional task to it when it executes. |
Report printed into the Print Archive |
No comments:
Post a Comment