Note: This release is in preview. Features described here don’t become generally available until the latest general availability date that Salesforce announces for this release. Before then, and where features are noted as beta, pilot, or developer preview, we can’t guarantee general availability within any particular time frame or at all. Make your purchase decisions only on the basis of generally available products and features.
BarcodeScanner Example–Modern Scanning API
The HTML template provides a minimal scanning user interface. There’s an element to display the results of the scans in a list view, a bit of static help text, and a button to start scanning.
1<!-- barcodeScannerMultiScan.html -->
2 <template>
3 <div class="slds-text-align_center">
4 <span class="slds-text-heading_large">BarcodeScanner: Multi-Scan</span>
5 </div>
6
7 <!-- Static help text -->
8 <div class="slds-text-color_weak slds-m-vertical_large slds-m-horizontal_medium">
9 <p>Tap <strong>Start a Scanning Session</strong> to open a barcode scanner camera view. Position barcodes in the scanner view to scan them.</p>
10 <p>Continue scanning items. Tap Done when you are done scanning.</p>
11 </div>
12
13 <!-- Scan button, always enabled -->
14 <div class="slds-align_absolute-center slds-m-vertical_large">
15 <lightning-button
16 variant="brand"
17 class="slds-var-m-left_x-small"
18 icon-name="utility:scan"
19 label="Start a Scanning Session"
20 title="Start scanning barcodes, until there are no more barcodes to scan"
21 onclick={beginScanning}
22 ></lightning-button>
23 </div>
24
25 <!-- After barcodes are scanned, their values are displayed here: -->
26 <template lwc:if={scannedBarcodes}>
27 <div class="slds-var-m-vertical_large slds-var-p-vertical_medium slds-border_top slds-border_bottom">
28 <p>Scanned barcode values are:</p>
29 <pre>{scannedBarcodesAsString}</pre>
30 </div>
31 </template>
32 </template>This example displays all the values of successful scans in a list view. It’s a streamlined example, emphasizing the scanning lifecycle of the modern scanning APIs.
1// barcodeScannerMultiScan.js
2import { LightningElement, track } from "lwc";
3import { getBarcodeScanner } from "lightning/mobileCapabilities";
4
5export default class BarcodeScannerContinuousDocDemo extends LightningElement {
6 barcodeScanner;
7 @track scannedBarcodes;
8
9 connectedCallback() {
10 this.barcodeScanner = getBarcodeScanner();
11 }
12
13 beginScanning() {
14 // Set your configuration options, including bulk and multi-scanning if desired, in this scanningOptions object
15 const scanningOptions = {
16 barcodeTypes: [this.barcodeScanner.barcodeTypes.QR],
17 scannerSize: "FULLSCREEN",
18 cameraFacing: "BACK",
19 showSuccessCheckMark: true,
20 enableBulkScan: true,
21 enableMultiScan: true,
22 };
23
24 // Make sure BarcodeScanner is available before trying to use it
25 if (this.barcodeScanner != null && this.barcodeScanner.isAvailable()) {
26 // Reset scannedBarcodes before starting new scanning session
27 this.scannedBarcodes = [];
28
29 // Start scanning barcodes
30 this.barcodeScanner
31 .scan(scanningOptions)
32 .then((results) => {
33 this.processScannedBarcodes(results);
34 })
35 .catch((error) => {
36 this.processError(error);
37 })
38 .finally(() => {
39 this.barcodeScanner.dismiss();
40 });
41 } else {
42 console.log("BarcodeScanner unavailable. Non-mobile device?");
43 }
44 }
45
46 processScannedBarcodes(barcodes) {
47 // Do something with the barcode scan value:
48 // - look up a record
49 // - create or update a record
50 // - parse data and put values into a form
51 // - and so on; this is YOUR code
52 console.log(JSON.stringify(barcodes));
53 this.scannedBarcodes = this.scannedBarcodes.concat(barcodes);
54 }
55
56 processError(error) {
57 // Check to see if user ended scanning
58 if (error.code == "USER_DISMISSED") {
59 console.log("User terminated scanning session.");
60 } else {
61 console.error(error);
62 }
63 }
64
65 get scannedBarcodesAsString() {
66 return this.scannedBarcodes.map((barcode) => barcode.value).join("\n");
67 }
68}