Skip to main content

Notifications

Community site session details

Community site session details

Session Id :
Power Apps - Building Power Apps
Answered

barcodereader regarding stock count

(0) ShareShare
ReportReport
Posted on by 128

Hi

 

I would like to create a module in Power Apps to use for stock count.

The user should press a "Scan"-button to activate the barcodereader. When a product is scanned the user will have to fill in the number of products found and then press "Submit" to submit the data... Afterwards I would like the system to automatically prepare a new scan... (just like press "Submit" and afterwards pressing the "Scan" button...)

 

How can I create a button to submit the data AND start the next scanning - all in only one procedure?

Categories:
  • Verified answer
    jlke-as Profile Picture
    128 on at
    Re: barcodereader regarding stock count

    Hi Mark

    I found a shorter solution based on your idea about 2 barcodereaders and the order of executions...

    In the first barcodereader (Scan) I have a normal setup, where OnScan is used to collect the scanner-result.

    In the second barcodereader (Save and Scan) I use the OnScan to submit the current form - the same in OnCancel - and OnChange is used to collect the new scanner-result...

    Thanks for your input...

    Wkr Jørgen

  • Verified answer
    MarkRahn Profile Picture
    973 Super User 2025 Season 1 on at
    Re: barcodereader regarding stock count

    Hi @jlke-as ,

     

    Here is what I found for the Barcode Reader control:

    • OnScan Event is fired when the "Scan" button is pressed when the "Scanning Mode" is "Select to Scan". The OnScan Event fires as soon as a Scan happened when the "Scanning Mode" is set to "Automatically Scan".
    • OnCancel Event is fired if the "Back Arrow" button is pressed
    • OnChange Event fires last after either the OnScan Event or the OnCancel Event

     

    So to put it all together, you need something that will capture which event "OnScan" or "OnCancel" fired. In the "OnChange" event (which fires now matter what), call the SubmitForm. In the "OnSuccess" of the SubmitForm, determine if "OnScan" executed. If it did, then clear the form with NewForm() and set your barcode variable to the last item scanned.

     

    In SharePoint, I made a list with Title (required), ScanDate, and Quantity (required). I generated a Power App using that List. I deleted the "DetailsScreen1" screen and adjusted everything to just work with the "EditScreen1".

     

    I setup a form with two BarcodeReader buttons at the bottom. One was labeled "Scan". The other was labeled "Save and Scan". I used two Context variables named "scanCancelled" and "scanSuccess" which are set to true/false based on what Event fires. I also have a Context Variable named "varScannedItem" which holds the value of the last scanned item.

    Stock List Example AppStock List Example App

    I used the "Title" field to hold the Barcode. I set the "Title_DataCard" Default property to the Context Variable "varScannedItem".

     

    For the "BrowseScreen1", I set the "+" New item button OnSelect to:

    NewForm(EditForm1);
    
    Navigate(
     EditScreen1,
     ScreenTransition.None,
     {varScannedItem: Blank(),scanCancelled:false,scanSuccess:false}
    );

    For the "BrowseScreen1", I set the "BrowseGallery" OnSelect to:

    Navigate(
     EditScreen1,
     ScreenTransition.None,
     {
     varScannedItem: BrowseGallery1.Selected.Title,
     scanCancelled: false,
     scanSuccess: false
     }
    );

     

    For the "EditScreen1" "Scan" button, I set the "OnCancel" to:

    UpdateContext({scanCancelled:true,scanSuccess:false});

     

    For the "EditScreen1" "Scan" button, I set the "OnScan" to:

    UpdateContext({scanCancelled:false,scanSuccess:true});

     

    For the "EditScreen1" "Scan" button, I set the "OnChange" to:

    If(
     scanSuccess,
     UpdateContext({varScannedItem: Last(Self.Barcodes).Value});
     //reset values
     UpdateContext(
     {
     scanCancelled: false,
     scanSuccess: false
     }
     );
     If(
     IsBlank(DataCardValue_Quantity.Text),
     SetFocus(DataCardValue_Quantity);
     );
     
    );

     

    For the "EditScreen1" "Save and Scan" button, I set the "OnCancel" to:

    UpdateContext({scanCancelled:true,scanSuccess:false});

    For the "EditScreen1" "Save and Scan" button, I set the "OnScan" to:

    UpdateContext({scanCancelled:false,scanSuccess:true});

    For the "EditScreen1" "Save and Scan" button, I set the "OnChange" to:

    SubmitForm(EditForm1);

    For the "EditScreen1" "Save and Scan" button, I set the "Disabled" Property to:

    Not(EditForm1.Valid)

     

    For the "EditScreen1" "EditForm1", I set the "OnSuccess" event to:

    If(
     Not(scanSuccess) & Not(scanCancelled),
     //Below is the code that happens when the Check icon is clicked
     Back();
     ,
     //This code runs if the SaveAndScan button is clicked
     If(
     scanSuccess,
     NewForm(EditForm1);
     UpdateContext({varScannedItem: Last(BarcodeReaderSaveAndScan.Barcodes).Value});
     SetFocus(DataCardValue_Quantity);
     );
     
    );
    UpdateContext(
     {
     scanCancelled: false,
     scanSuccess: false
     }
    );

     

    -Mark

     

    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

  • jlke-as Profile Picture
    128 on at
    Re: barcodereader regarding stock count

    It might be the solution, but I cannot get it to work 100%... 

    Do you know in which order the processes are executed in the BarcodeReader module?

    When you press the "Scan"-button, the scanner is activated...

    Then the scanner scans the barcode...

    When is it the "OnScan" executed? - and when is the "Onchange" executed..? (which one is first)

    wkr Jørgen

  • MarkRahn Profile Picture
    973 Super User 2025 Season 1 on at
    Re: barcodereader regarding stock count

    Hi @jlke-as 

     

    Apparently there is not a good way to do this. I just found this regarding the Barcode Reader:

    https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/controls/control-barcodereader

    Select() barcode reader control

    The barcode reader control doesn't support Select(). As a workaround, set the barcode reader fill color to transparent and put it in front of the control you wanted to select the barcode reader with. This will result in the same experience for the app user where selecting the control launches the barcode reader experience as they will be selecting an invisible barcode reader button instead of the actual control.

     

    This means to get this to work we are going to have to get creative. On your form, you will need to try adding another Barcode Reader control/button. Change the text for that button to be "Submit" (or whatever you had the text on your Submit button to).

     

    For the "OnChange" event for that button, put in the same code you have for your original Submit button.

     

    SubmitForm(MyForm1);​

     

     

    In the "OnSuccess" event for the EditForm, put in the code to clear the form and get it ready for the next item:

     

    NewForm(MyForm1);

     

     

    I don't know exactly how you have your form set up to read in the values from the Barcode Reader control, but now that you have two controls you will probably need to use a variable to hold the values of the one last used by using a Set() function.

     

    -Mark

     

    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

     

  • jlke-as Profile Picture
    128 on at
    Re: barcodereader regarding stock count

    Hi Mark

    Thanks for your reply.

    However it doen't work... The "scanbutton" is the Barcodereader-button - and the system doesn't consider this to be "an element with a onselect-property"... (it looks like a button, but it isn't)

    How can I activate the barcodereader with out pressing the "button" representing the barcodereader?

    wkr Jørgen

  • MarkRahn Profile Picture
    973 Super User 2025 Season 1 on at
    Re: barcodereader regarding stock count

    Hi @jlke-as 

     

    I am going to make some assumptions that:

    1. you are using an EditForm named MyForm1 that is already connected to the backend for data.
    2. you have a Submit button where the "OnSelect" code is:

     

    SubmitForm(MyForm1);​

     

    • you have a Scan Button named ScanButton

     

    The EditForm will have a Property named "OnSuccess" that will run code when the form is saved successfully.

     

    In the "OnSuccess", you would want to put something like:

     

    NewForm(MyForm1);
    Select(ScanButton);

     

    This will clear the form and select the ScanButton.

     

    Also make sure you put a "Close" button to close the form in case the user has no more data to enter.

     

    -Mark

     

    If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Understanding Microsoft Agents - Introductory Session

Confused about how agents work across the Microsoft ecosystem? Register today!

Markus Franz – Community Spotlight

We are honored to recognize Markus Franz as our April 2025 Community…

Kudos to the March Top 10 Community Stars!

Thanks for all your good work in the Community!

Leaderboard

#1
WarrenBelz Profile Picture

WarrenBelz 146,702 Most Valuable Professional

#2
RandyHayes Profile Picture

RandyHayes 76,287 Super User 2024 Season 1

#3
Pstork1 Profile Picture

Pstork1 66,015 Most Valuable Professional

Leaderboard