Barcode Scan Mode: General Information
A barcode scan mode is the main scan component of the MYOB barcode-driven engine.
Learning Objectives
In this chapter, you will learn how to define the required properties of the barcode scan mode.
Applicable Scenarios
You create a barcode scan mode in the following cases:
- You are creating a custom barcode-driven form. You have defined a barcode scan class for this form and created an instance of the descendant of the ScanMode class in the CreateScanModes() method implementation. Now you need to define this descendant itself.
- You need to add a scan mode to an existing barcode-driven form. You have created a scan extension of a barcode scan class and overridden the CreateScanModes() method to return the new scan mode, as described in Extension of Scan Components: Customization of Components. Now you need to implement this new mode.
Barcode Scan Components
All barcode scan components except ScanMode<TScanBasis> are descendants
of the ScanComponent<TScanBasis> class.
ScanComponent<TScanBasis> provides access to the barcode scan class
via its Basis
property. The class also contains information about the mode
to which it belongs.
Scan Mode
ScanMode<TScanBasis> is the main component of the BarcodeDrivenStateMachine and the base class for all modes. It provides access to all other components and defines their structure and the relationships between them.
Recommendations for Scan Components
All scan components that you create should be either abstract
classes or
sealed
classes. You can introduce an abstract
component
to provide a base implementation that is shared by multiple sealed
components. We recommend this approach to prevent other developers from using inheritance to
alter the behavior of the components defined in your code. Inheritance should be used only
when the developer creates a new scan mode or a new barcode-driven MYOB Acumatica form from scratch. To alter the behavior of scan components, the developer should use the
method interception approach because this approach makes it possible to apply multiple
customizations to one component. For details on this approach, see Extension of Scan Components: Method Interceptors.
abstract
nor sealed
. However, you should not use
inheritance to customize their behavior. In customization scenarios, you should use only
the method interception approach.Because scan components are strictly bound to a specific barcode-driven form, you can nest these components within the barcode scan class or even within each other. For example, you can nest the following: scan modes within the barcode scan class; scan states, scan transitions, and scan commands within the scan mode; and scan extensions within the components that use them.
Implementation of a Scan Mode
- You define the required properties of the mode, as shown in Barcode Scan Mode: To Define the Required Properties.
For a scan mode, you must define the mode identifier and a user-friendly description, which are the required properties. We recommend that you make the code value of the mode statically available, and also available as a C# constant and a BQL constant.
- You implement the component creation methods, as described in the following chapters:
- Implementing Barcode Scan States
- Implementing Barcode Scan Transitions
- Defining the List of Barcode Scan Commands
- Defining the Set of Scan Mode Redirects
The component creation methods are optional for implementation. By default, they return empty sets; however, in most cases, the default behavior would be insufficient to make the barcode scan mode usable.
- You define the mode resetting logic, as specified in the Resetting a Barcode Scan Mode chapter.