Info | ||
---|---|---|
| ||
This article requires Mobile WMS extension version MOB5.25 (or newer). An older version of this article exists, see (Legacy) How-to: Select Line from Custom Barcode (MOB5.19 - MOB5.24) |
Description
Filter and reduce Order Lines by a scanned value.This article builds on the concept of Select Order Line by custom barcode (lineSelection)
Used for custom barcodes (Non GS1), in special cases where a regular expression is needed to decipher the barcode.
...
Follow the setup on Select Order Line by custom barcode (lineSelection) and define your regular expression for the Barcode converter.
...
[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", false);
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.
...
[EventSubscriber(ObjectType::Codeunit, Codeunit::"MOB WMS Whse. Inquiry", 'OnWhseInquiryOnCustomDocumentTypeAsXml', '', true, true)]
procedure MyOnWhseInquiryOnCustomDocumentTypeAsXml(_DocumentType: Text; var _XMLRequestDoc: XmlDocument; var _XMLResponseDoc: XmlDocument; var _IsHandled: Boolean)
var
RequestValues: Record "MOB NS Request Element" temporary;
MobToolbox: Codeunit "MOB Toolbox";
MobXMLMgt: Codeunit "MOB XML Management";
RequestMgt: Codeunit "MOB NS Request Management";
XMLResponseData: XmlNode;
SerialNumberInformationNode: XmlNode;
ScannedValue: Text;
begin
// Handle only "GetLineSelectionInformation"
if not (_DocumentType.Contains('GetLineSelectionInformation')) or _IsHandled then
exit;
// Save the incoming request values
RequestMgt.SaveAdhocFilters(_XMLRequestDoc, RequestValues);
// Get the request value of "SerialNumber" - we mapped the incoming barcode to this field
ScannedValue := RequestValues.GetValue('SerialNumber');
// Do you logic for Searching for the item
// Initialize the response document for order data
MobToolbox.InitializeResponseDoc(_XMLResponseDoc, XMLResponseData);
MobXMLMgt.AddElement(XMLResponseData, 'SerialNumberInformation', '', MobXMLMgt.NS_WHSEMODEL(), SerialNumberInformationNode);
// Respond with the Item, that the Scanned barcode represents
MobXMLMgt.AddElement(SerialNumberInformationNode, 'ItemNumber', GetItemFromBarcode(ScannedValue), MobXMLMgt.NS_WHSEMODEL(), SerialNumberInformationNode);
_IsHandled := true;
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;