Versions Compared
Key
- This line was added.
- This line was removed.
- Formatting was changed.
Case
Excerpt |
---|
Print Label on Planned Posting, i.e. Receive, Pick, Put-away, Ship, Move etc. |
Proposed solution
This examples prints on posting of Warehouse Receipt Lines
- You want to print labels from the mobile device
- You want to use the integrated Cloud Print Service solution
- The label should be printed automatically when posting occurs
Example 1: Print on Posting Warehouse Pick
// Step 1: Add
printerHeader steps
on postingIn order to determine when, where and what to print, we add a step on posting
Add the following code to create
// In order to determine when, where and what to print, we add a step on posting.
See also: How-to: Add Header Step
// In order to determine when, where and what to print, we add a step on posting
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS ReceiveMOB WMS Pick", 'OnGetReceiveOrderLinesOnPostPickOrder_OnAddStepsToAnyHeader', '', truetrue, truetrue)]
local procedure MyOnGetReceiveOrderLines OnPostPickOrder_OnAddStepsToAnyHeader(var _OrderValues: Record "MOB Common Element"; _RecRef: RecordRef; var _StepsElement: Record "MOB Steps ElementMOB Steps Element")
var
MobPrint MobPrint: Codeunit "MOB PrintMOB Print";
begin
if (_RecRef.Number() in [DataBase::"Warehouse Receipt Header", Database::"Purchase HeaderWarehouse Activity Header"]) thenbegin// This example is limited to Whse. Picks
// Break when 'Printer' step has been collected to prevent infinite loop
if _OrderValues.HasValue('Printer') then begin
exit;
_StepsElement.Create_ListStep(1, 'Printer');
_StepsElement.Set_header('Label printLabel print');
_StepsElement.Set_listValues(' ;' + MobPrintMobPrint.GetMobilePrinters('Item Label 3x2Item Label 3x2', '')); // Allow user to select blank printer + the printers attached to this labeltemplate
Allow user to also select a blank printer
_StepsElement.Set_helpLabel('If you want a label, please select a printerIf you want a label, please select a printer.');
end;
end;
Select the right event
The example code is for receive.
Select another event if you are working with another function.
Filter by label (Content by label) showLabels false max 150 showSpace false sort title excludeCurrent true cql label = "integrationevent" and label = "onaddstepsto" and label in ("order","orders")
Step 2: Handle steps on posting to issue print
// We read the collected step (printer).
// Issue a print based on printer, label and the current context (Order Line)
// Print engine will build a dataset end;
// Step 2: Handle Header step and issue print
// We read the collected step (printer)
// Issue a print based on printer, label and the current context (Order Header)
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS ReceiveMOB WMS Pick", 'OnPostReceiveOrderOnPostPickOrder_OnAfterPostAnyOrder', '', truetrue, truetrue)]
local procedure MyOnPostReceiveOrder MyOnPostPickOrder_OnAfterPostAnyOrder(var _OrderValues: Record "MOB Common ElementMOB Common Element"; _RecRef: RecordRef; var _ResultMessage: Text)
var
MobPrinter MobPrinter: Record "MOB PrinterMOB Printer";
TempPrintParameter TempPrintParameter: Record "MOB Print REST ParameterMOB Print REST Parameter" temporary;
MobPrint MobPrint: Codeunit "MOB PrintMOB Print";
MobLanguage MobPrintBuffer: Codeunit "MOB WMS LanguageMOB Print Buffer";
MobPrintBuffer: Codeunit "MOB Print Buffer";
PrintCommand: PrintCommand: Text;
begin
// -- Prepare to Print
// Did user select a printer?
If user selected ' ' blank printer, then exit
ifnot_OrderValues.HasValueGetValue('Printer') = ' ' then
exit;
// -- Print
// Init printer parameters
Evaluate // Init printer parameters
Evaluate(TempPrintParameter.Printer, _OrderValues.GetValue('Printer'));
TempPrintParameter// Printer selected
TempPrintParameter."Label-Template NameTemplate Name" := 'Item Label 3x2Item Label 3x2';
// Set parameters
MobPrintThe label to print - consider making this configurable
MobPrint.SetSourceRecRef(_RecRef);
MobPrint MobPrint.SetRequestElementsFromOrderValues(_OrderValues);
// Perform cloud print
if MobPrint
if MobPrint.Run(TempPrintParameter) then begin
// Command is returned from cloud
TempPrintParameterPrint was returned from cloud
TempPrintParameter.GetResponseContentAsBase64Text(PrintCommand);
// Convert the printer selected to an Address
MobPrint MobPrint.GetPrinterFromName(MobPrinter, TempPrintParameterTempPrintParameter.Printer);
// Save response to be sent in the next Mobile response
MobPrintBuffer MobPrintBuffer.Add(MobPrinter.Address, PrintCommandPrintCommand);
end else
// If failed, append Error to ResultMessage
_ResultMessage If failed, append Error to ResultMessage
_ResultMessage := _ResultMessage + ' ' + MobLanguage.GetMessage('PRINT_FAILED') + ': ' + GetLastErrorText' Print failed: ' + GetLastErrorText();
end;
Select the right event
The example code is for receive.
Select another event if you are working with another function.
Filter by label (Content by label) | ||||||
---|---|---|---|---|---|---|
|
Step 3: Modify print "Dataset" (optional)
- Use this event to modify the automatically generated dataset
- OnPrintLabel_OnAfterPopulateDataset
- You can also add custom values to the dataset (you have also created a customized label-template)See also Customize Labels
Version History
Version | Changes |
---|---|
MOB5.22 | Necessary events introduced |