Description
Filter and reduce Order Lines by a scanned value.This article builds on the concept of Select, Add or Refresh Order Lines by Scan (LineSelection)
Used for custom barcodes (Non GS1), in special cases where a regular expression is needed to decipher the barcode.
Step 1 - Set up mobile config
Follow the setup on Select, Add or Refresh Order Lines by Scan (LineSelection) and define your regular expression for the Barcode converter.
Step 2 - Register "GetLineSelectionInformation"
You must register this mobile document type.
Use event OnAfterCreateDefaultDocumentTypes
// Step 2
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Setup Doc. Types", 'OnAfterCreateDefaultDocumentTypes', '', true, true)]
local procedure OnAfterCreateDefaultDocumentTypes()
var
MobWmsSetupDocTypes: Codeunit "MOB WMS Setup Doc. Types";
begin
MobWmsSetupDocTypes.CreateDocumentType('GetLineSelectionInformation', '', Codeunit::"MOB WMS Whse. Inquiry");
end;
Remember to run Create Document Types from Mobile WMS Setup. Otherwise you will get this error.
Step 3 - Respond with Item No.
Respond to the "GetLineSelectionInformation" request and return an Item no.
Adjust the code to your needs.
You are likely to decipher the "ScannedValue".
// Step 3
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Whse. Inquiry", 'OnWhseInquiryOnCustomDocumentType', '', true, true)]
local procedure OnWhseInquiryOnCustomDocumentType(_DocumentType: Text; var _RequestValues: Record "MOB NS Request Element"; var _ResponseElement: Record "MOB NS Resp Element"; var _RegistrationTypeTracking: Text; var _IsHandled: Boolean)
var
SerialNumber: Code[50];
begin
if _IsHandled then
exit;
if _DocumentType = 'GetLineSelectionInformation' then begin
SerialNumber := _RequestValues.GetValue('SerialNumber', true);
_ResponseElement.Set_SerialNumberInformation(GetItemFromBarcode(SerialNumber));
_IsHandled := true;
end;
end;
procedure GetItemFromBarcode(ScannedValue: Text): Code[20]
var
Item: Record Item;
begin
// Please make your own logic to identify the Item from a barcode
Item.SetRange("Description 2", ScannedValue);
if Item.FindFirst() then
exit(Item."No.");
end;