- Created by Johannes Sebastian Nielsen, last modified by Morten Bjørn Larsen on Oct 04, 2022
You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 26 Next »
Requirement
This article requires Mobile WMS Extension version MOB5.23
Case
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
Step 1: Add printer steps on posting
In order to determine when, where and what to print, we add a step on posting
Add the following code to create 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 Receive", 'OnGetReceiveOrderLines_OnAddStepsToAnyHeader', '', true, true)]
local procedure MyOnGetReceiveOrderLines_OnAddStepsToAnyHeader(_RecRef: RecordRef; var _StepsElement: Record "MOB Steps Element")
var
MobPrint: Codeunit "MOB Print";
begin
if (_RecRef.Number() in [DataBase::"Warehouse Receipt Header", Database::"Purchase Header"]) then begin
_StepsElement.Create_ListStep(1, 'Printer');
_StepsElement.Set_header('Label print');
_StepsElement.Set_listValues(' ;' + MobPrint.GetMobilePrinters('Item Label 3x2', '')); // Allow user to select blank printer + the printers attached to this labeltemplate
_StepsElement.Set_helpLabel('If 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.
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
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
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Receive", 'OnPostReceiveOrder_OnAfterPostAnyOrder', '', true, true)]
local procedure MyOnPostReceiveOrder_OnAfterPostAnyOrder(var _OrderValues: Record "MOB Common Element"; _RecRef: RecordRef; var _ResultMessage: Text)
var
MobPrinter: Record "MOB Printer";
TempPrintParameter: Record "MOB Print REST Parameter" temporary;
MobPrint: Codeunit "MOB Print";
MobLanguage: Codeunit "MOB WMS Language";
MobPrintBuffer: Codeunit "MOB Print Buffer";
PrintCommand: Text;
begin
// -- Prepare to Print
// Did user select a printer?
if _OrderValues.GetValue('Printer') = ' ' then
exit;
// -- Print
// Init printer parameters
Evaluate(TempPrintParameter.Printer, _OrderValues.GetValue('Printer'));
TempPrintParameter."Label-Template Name" := 'Item Label 3x2';
// Set parameters
MobPrint.SetSourceRecRef(_RecRef);
MobPrint.SetRequestElementsFromOrderValues(_OrderValues);
// Perform cloud print
if MobPrint.Run(TempPrintParameter) then begin
// Command is returned from cloud
TempPrintParameter.GetResponseContentAsBase64Text(PrintCommand);
// Convert the printer selected to an Address
MobPrint.GetPrinterFromName(MobPrinter, TempPrintParameter.Printer);
// Save response to be sent in the next Mobile response
MobPrintBuffer.Add(MobPrinter.Address, PrintCommand);
end else
// If failed, append Error to ResultMessage
_ResultMessage := _ResultMessage + ' ' + MobLanguage.GetMessage('PRINT_FAILED') + ': ' + GetLastErrorText();
end;
Select the right event
The example code is for receive.
Select another event if you are working with another function.
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
Step 3: Modify print "Dataset" (optional)
Use this event to modify the automatically generated dataset, to suit your label needs.
- OnPrintLabel_OnAfterPopulateDataset
- You can also add custom values to the dataset (you have also created a customized label-template)
Requirement
This article requires Mobile WMS Extension version MOB5.23
Case
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
Step 1: Add printer steps on posting
In order to determine when, where and what to print, we add a step on posting
Add the following code to create 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 Receive", 'OnGetReceiveOrderLines_OnAddStepsToAnyHeader', '', true, true)]
local procedure MyOnGetReceiveOrderLines_OnAddStepsToAnyHeader(_RecRef: RecordRef; var _StepsElement: Record "MOB Steps Element")
var
MobPrint: Codeunit "MOB Print";
begin
if (_RecRef.Number() in [DataBase::"Warehouse Receipt Header", Database::"Purchase Header"]) then begin
_StepsElement.Create_ListStep(1, 'Printer');
_StepsElement.Set_header('Label print');
_StepsElement.Set_listValues(' ;' + MobPrint.GetMobilePrinters('Item Label 3x2')); // Allow user to select blank printer + the printers attached to this labeltemplate
_StepsElement.Set_helpLabel('If 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.
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
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
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Receive", 'OnPostReceiveOrder_OnAfterPostAnyOrder', '', true, true)]
local procedure MyOnPostReceiveOrder_OnAfterPostAnyOrder(var _OrderValues: Record "MOB Common Element"; _RecRef: RecordRef; var _ResultMessage: Text)
var
MobPrinter: Record "MOB Printer";
TempPrintParameter: Record "MOB Print REST Parameter" temporary;
MobPrint: Codeunit "MOB Print";
MobLanguage: Codeunit "MOB WMS Language";
MobPrintBuffer: Codeunit "MOB Print Buffer";
PrintCommand: Text;
begin
// -- Prepare to Print
// Did user select a printer?
if _OrderValues.GetValue('Printer') = ' ' then
exit;
// -- Print
// Init printer parameters
Evaluate(TempPrintParameter.Printer, _OrderValues.GetValue('Printer'));
TempPrintParameter."Label-Template Name" := 'Item Label 3x2';
// Set parameters
MobPrint.SetSourceRecRef(_RecRef);
MobPrint.SetRequestElementsFromOrderValues(_OrderValues);
// Perform cloud print
if MobPrint.Run(TempPrintParameter) then begin
// Command is returned from cloud
TempPrintParameter.GetResponseContentAsBase64Text(PrintCommand);
// Convert the printer selected to an Address
MobPrint.GetPrinterFromName(MobPrinter, TempPrintParameter.Printer);
// Save response to be sent in the next Mobile response
MobPrintBuffer.Add(MobPrinter.Address, PrintCommand);
end else
// If failed, append Error to ResultMessage
_ResultMessage := _ResultMessage + ' ' + MobLanguage.GetMessage('PRINT_FAILED') + ': ' + GetLastErrorText();
end;
Select the right event
The example code is for receive.
Select another event if you are working with another function.
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
-
Page:
Step 3: Modify print "Dataset" (optional)
Use this event to modify the automatically generated dataset, to suit your label needs.
- OnPrintLabel_OnAfterPopulateDataset
- You can also add custom values to the dataset (you have also created a customized label-template)
- No labels