cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
jlke-as
Helper III
Helper III

barcodereader regarding stock count

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?

2 ACCEPTED SOLUTIONS

Accepted Solutions

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.

View solution in original post

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

View solution in original post

6 REPLIES 6

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.

jlke-as
Helper III
Helper III

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

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
Helper III
Helper III

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

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.

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

Helpful resources

Announcements

Community will be READ ONLY July 16th, 5p PDT -July 22nd

Dear Community Members,   We'd like to let you know of an upcoming change to the community platform: starting July 16th, the platform will transition to a READ ONLY mode until July 22nd.   During this period, members will not be able to Kudo, Comment, or Reply to any posts.   On July 22nd, please be on the lookout for a message sent to the email address registered on your community profile. This email is crucial as it will contain your unique code and link to register for the new platform encompassing all of the communities.   What to Expect in the New Community: A more unified experience where all products, including Power Apps, Power Automate, Copilot Studio, and Power Pages, will be accessible from one community.Community Blogs that you can syndicate and link to for automatic updates. We appreciate your understanding and cooperation during this transition. Stay tuned for the exciting new features and a seamless community experience ahead!

Summer of Solutions | Week 4 Results | Winners will be posted on July 24th

We are excited to announce the Summer of Solutions Challenge!   This challenge is kicking off on Monday, June 17th and will run for (4) weeks.  The challenge is open to all Power Platform (Power Apps, Power Automate, Copilot Studio & Power Pages) community members. We invite you to participate in a quest to provide solutions in the Forums to as many questions as you can. Answers can be provided in all the communities.    Entry Period: This Challenge will consist of four weekly Entry Periods as follows (each an “Entry Period”)   - 12:00 a.m. PT on June 17, 2024 – 11:59 p.m. PT on June 23, 2024 - 12:00 a.m. PT on June 24, 2024 – 11:59 p.m. PT on June 30, 2024 - 12:00 a.m. PT on July 1, 2024 – 11:59 p.m. PT on July 7, 2024 - 12:00 a.m. PT on July 8, 2024 – 11:59 p.m. PT on July 14, 2024   Entries will be eligible for the Entry Period in which they are received and will not carryover to subsequent weekly entry periods.  You must enter into each weekly Entry Period separately.   How to Enter: We invite you to participate in a quest to provide "Accepted Solutions" to as many questions as you can. Answers can be provided in all the communities. Users must provide a solution which can be an “Accepted Solution” in the Forums in all of the communities and there are no limits to the number of “Accepted Solutions” that a member can provide for entries in this challenge, but each entry must be substantially unique and different.    Winner Selection and Prizes: At the end of each week, we will list the top ten (10) Community users which will consist of: 5 Community Members & 5 Super Users and they will advance to the final drawing. We will post each week in the News & Announcements the top 10 Solution providers.  At the end of the challenge, we will add all of the top 10 weekly names and enter them into a random drawing.  Then we will randomly select ten (10) winners (5 Community Members & 5 Super Users) from among all eligible entrants received across all weekly Entry Periods to receive the prize listed below. If a winner declines, we will draw again at random for the next winner.  A user will only be able to win once overall. If they are drawn multiple times, another user will be drawn at random.  Individuals will be contacted before the announcement with the opportunity to claim or deny the prize.  Once all of the winners have been notified, we will post in the News & Announcements of each community with the list of winners.   Each winner will receive one (1) Pass to the Power Platform Conference in Las Vegas, Sep. 18-20, 2024 ($1800 value). NOTE: Prize is for conference attendance only and any other costs such as airfare, lodging, transportation, and food are the sole responsibility of the winner. Tickets are not transferable to any other party or to next year’s event.   ** PLEASE SEE THE ATTACHED RULES for this CHALLENGE**   Week 1 Results: Congratulations to the Week 1 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Community MembersNumber of SolutionsSuper UsersNumber of Solutions @anandm08  23 @WarrenBelz  31 @DBO_DV  10 @Amik  19 AmínAA 6 @mmbr1606  12 @rzuber  4 @happyume  7 @Giraldoj  3@ANB 6 (tie)   @SpongYe  6 (tie)     Week 2 Results: Congratulations to the Week 2 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge. Community MembersSolutionsSuper UsersSolutions @anandm08  10@WarrenBelz 25 @DBO_DV  6@mmbr1606 14 @AmínAA 4 @Amik  12 @royg  3 @ANB  10 @AllanDeCastro  2 @SunilPashikanti  5 @Michaelfp  2 @FLMike  5 @eduardo_izzo  2   Meekou 2   @rzuber  2   @Velegandla  2     @PowerPlatform-P  2   @Micaiah  2     Week 3 Results: Congratulations to the Week 3 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge.   Week 3:Community MembersSolutionsSuper UsersSolutionsPower Apps anandm0861WarrenBelz86DBO_DV25Amik66Michaelfp13mmbr160647Giraldoj13FLMike31AmínAA13SpongYe27     Week 4 Results: Congratulations to the Week 4 qualifiers, you are being entered in the random drawing that will take place at the end of the challenge.   Week 4:Community MembersSolutionsSuper UsersSolutionsPower Apps DBO-DV21WarranBelz26Giraldoj7mmbr160618Muzammmil_0695067Amik14samfawzi_acml6FLMike12tzuber6ANB8   SunilPashikanti8

Check Out | 2024 Release Wave 2 Plans for Microsoft Dynamics 365 and Microsoft Power Platform

On July 16, 2024, we published the 2024 release wave 2 plans for Microsoft Dynamics 365 and Microsoft Power Platform. These plans are a compilation of the new capabilities planned to be released between October 2024 to March 2025. This release introduces a wealth of new features designed to enhance customer understanding and improve overall user experience, showcasing our dedication to driving digital transformation for our customers and partners.    The upcoming wave is centered around utilizing advanced AI and Microsoft Copilot technologies to enhance user productivity and streamline operations across diverse business applications. These enhancements include intelligent automation, AI-powered insights, and immersive user experiences that are designed to break down barriers between data, insights, and individuals. Watch a summary of the release highlights.    Discover the latest features that empower organizations to operate more efficiently and adaptively. From AI-driven sales insights and customer service enhancements to predictive analytics in supply chain management and autonomous financial processes, the new capabilities enable businesses to proactively address challenges and capitalize on opportunities.    

Updates to Transitions in the Power Platform Communities

We're embarking on a journey to enhance your experience by transitioning to a new community platform. Our team has been diligently working to create a fresh community site, leveraging the very Dynamics 365 and Power Platform tools our community advocates for.  We started this journey with transitioning Copilot Studio forums and blogs in June. The move marks the beginning of a new chapter, and we're eager for you to be a part of it. The rest of the Power Platform product sites will be moving over this summer.   Stay tuned for more updates as we get closer to the launch. We can't wait to welcome you to our new community space, designed with you in mind. Let's connect, learn, and grow together.   Here's to new beginnings and endless possibilities!   If you have any questions, observations or concerns throughout this process please go to https://aka.ms/PPCommSupport.   To stay up to date on the latest details of this migration and other important Community updates subscribe to our News and Announcements forums: Copilot Studio, Power Apps, Power Automate, Power Pages

Users online (932)