Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 30 Next »

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::CodeunitCodeunit::"MOB WMS Receive", 'OnGetReceiveOrderLines_OnAddStepsToAnyHeader''', true, true)]
    local procedure MyOnGetReceiveOrderLines_OnAddStepsToAnyHeader(_RecRef: RecordRefvar _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.


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::CodeunitCodeunit::"MOB WMS Receive", 'OnPostReceiveOrder_OnAfterPostAnyOrder''', true, true)]
    local procedure MyOnPostReceiveOrder_OnAfterPostAnyOrder(var _OrderValues: Record "MOB Common Element"; _RecRef: RecordRefvar _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 not _OrderValues.HasValue('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(TempPrintParameterthen 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.


Step 3: Modify print "Dataset" (optional)

Use this event to modify the automatically generated dataset, to suit your label needs.



  • No labels