Certain functions such as Warehouse Pick and Directed Movement suggest an activity to the user. New functionality has been introduced so that when the user enters or scans an expected value then there is no need to make a round-trip back to Business Central.

This can improve performance, reduce limitations in SaaS environments and allow resilience of a kind in locations where reception can be poor.

Default Values:

  • A list of potential valid default values – for instance an item number plus all of it’s alternate references recorded in the Item Reference
  • Any non-blank value – for instance a lot or serial number where we defer the validation until the point of registration/posting.
  • Any value including blank.
  • A low/high number range – for instance if a pick has an outstanding quantity of 10, then the value range could be anything from 0 to 10.

This functionality only works during the collection phase, not at the point of posting when all data is finally collected.


Device Function

In order for the functionality to be activated, Enable Optimisation must be ticked against the relevant function (Picks and Directed Movements are the only functions supported at the present time as these are the only functions that suggest actions to the user).

The Stale Data Timeout can be set to 300 seconds as a recommendation and is used to force a round-trip should too much time have elapsed since the last round trip.  This is an experimental feature, so the fields may be hidden by default.


Device Log/Outbound

The Device Log Outbound Data page now shows details of these “Default Values” which is useful for testing and support purposes to see what data is being passed back to the device.


Optimisation Picking/Movement

Utilising the functionality implemented in the framework, picks and directed movements now behave as follows providing the functionality has been switched on against the Device Function:

When a pick is suggested the following values are returned to the device as expected default values:

ITEMNO – The Item No from the suggested pick line along with any Item References / Item Cross-References.

VARIANTCODE – The Variant Code from the suggested pick line, blanks allowed. Provided the item has variants.

PLACEBINCODE – The expected Place Bin.

QUANTITY – Minimum value of zero, maximum value of the outstanding quantity to pick.

TAKEBINCODE – The expected Take Bin.

TAKEBINCONTAINER – The expected Take Bin (If not using containers for this item/bin) or a list of valid containers in the expected Take Bin.

LOTNO – Allow Any Value = yes, provided item is lot tracked.

SERIALNO – Allow Any Value = yes, provided item is serial tracked.

Provided that the expected values/ranges are entered you should see no entries in the Device Log until all data is collected and the final POST round-trip is executed.

  • If there is another activity line on the pick to process, another set of expected default values will be returned to the device following registration of the activity.
  • A round-trip will occur regardless if the timeout expiry recorded against the device function has been exceeded.

 Care has been taken to pre-load and pre-lock a number of Data Items as part of the new processing.

Some concessions have been necessary to reduce round-trips – for instance you could enter an invalid lot or serial number but this will not be trapped until the device attempts to register the activity line.


Session Management Codeunit

procedure AddDefaultListValue(DataItemName: Code[50]; DefaultValue: Variant)

This function is used to add a default value to the list of expected values. For instance, you may choose to add the following to an ITEMNO data item:
•    Item Number.
•    Vendor Item No.
•    All Cross-reference entries of type barcode.

This would be expressed as:
SessionMgt.AddDefaultListValue('ITEMNO', Item."No.");
SessionMgt.AddDefaultListValue('ITEMNO', Item."Vendor Item No.");

procedure SetAllowAnyValue(DataItemName: Code[50]; AllowAnyValue: Boolean

This function is used to specify that any value is allowed, simply move to the next data item.

procedure SetAllowEmptyValue(DataItemName: Code[50]; AllowEmptyValue: Boolean)

This function is used to specify that a blank value is allowed, simply move to the next data item.

procedure SetDefaultValueRange(DataItemName: Code[50]; LowValue: Decimal; HighValue: Decimal)

This function is used to specify a valid default range of values. For instance, you may have a remaining pick quantity of ‘10’, so a range from ‘0’ to ‘10’ would be valid. This would be expressed as:

SessionMgt.SetDefaultValueRange('QUANTITY', 0, 10);

procedure SetDefaultValueError(DataItemName: Code[50]; ErrorMessageText: Text)

This function is used to specify the error to be displayed when a quantity is outside of range when using function SetDefaultValueRange(). For instance, if we set a default value range of 0..10, we want to display an error saying “Invalid quantity or insufficient quantity outstanding”:

SessionMgt.SetDefaultValueRange('QUANTITY', 0, 10);


'Invalid quantity or insufficient quantity outstanding');

procedure ClearDefaultValues(DataItemName: Code[50])

Clears the list of expected default values created by AddDefaultListValue().