cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
LisKr
Resolver I
Resolver I

upload dialogue with attachment control

Hi everyone,

I'm currently building an upload dialogue inside my PowerApp. The goal is, that the user selects a file and uploads it to a SP library (done via a flow) and if the flow is completed, the app should notify the user. I got it to work with the image upload control.

But now I got the instruction, that the users not only need to upload images, but also other file types like pdf, videos etc. So I changed the image upload control to an attachment control like in formulas and swapped the name of the image control to the attachment control in my function. But it now throws an error saying "The column "file.contentBytes" in the data source expects type "blob" but you are providing type "table". I don't really get what type blob is or why it doesn't work with the attachments control, but does with the image control.  Also, I did stick to the video about uploading by Reza Dorrani (https://www.youtube.com/watch?v=QUwzvUXgj58) and even if I delete the function and re-add it exactly like he did, it is still the same.

 

I'll show you some screenshots:

 

LisKr_0-1712741429377.png

That's what it is like with the old image control. ⬆️

 

 

 

LisKr_1-1712741520912.png

An here it is using the attachment control. ⬆️

Even if I delete the if statement and the notify function, the error is still the same.

 

What am I doing wrong here? And what do I do, if I want more than one file to be uploaded? I saw a solution with a ForAll function, but I'm not sure how to connect that with notifying the user.

 

3 ACCEPTED SOLUTIONS

Accepted Solutions
WarrenBelz
Most Valuable Professional
Most Valuable Professional

Hi @LisKr ,

Can you please remember to post your code in Text as it saves re-typing here. This code is OCR'd, so please watch spelling. You need to refer to the attachment control Value - not Image

If( 
   MLIProductionInstructions-MachineGrade:CreateFolder+uploadimage.Run( 
      InputDetaiLsMachineGradelD.Text;
      {
         file: 
         {
            contentBytes: First(DetailsMachineUploadAttachments.Attachments).Value; 
            name: First(DetailsMachineUploadAttachments.Attachments).Name
         }
      }
   ).status = "Completed"; 
   Notify("Upload successful !”;Success)
);;

 

Please click Accept as solution if my post helped you solve your issue. This will help others find it more readily. It also closes the item. If the content was useful in other ways, please consider giving it Thumbs Up.

MVP (Business Applications)   Visit my blog Practical Power Apps

View solution in original post

WarrenBelz
Most Valuable Professional
Most Valuable Professional

@LisKr ,

If you are using the Attachment control solely for this purpose and do not set the MaxAttachments to 1 (as I do), then Last() is probably better (from a user perspective), but that is superseded by your most recent question. Yes, you can call the As variable whatever you want and attach them all

ForAll(
   AttachmentsControlName.Attachments As _Files,
   UploadFileToDocumentLibrary.Run(
      {
         contentBytes: _Files.Value,
         name: _Files.Name
      }
   )
);

Just be careful on (particularly) mobile devices that you do not try to add too many large files.

 

Please click Accept as solution if my post helped you solve your issue. This will help others find it more readily. It also closes the item. If the content was useful in other ways, please consider giving it Thumbs Up.

MVP (Business Applications)   Visit my blog Practical Power Apps

 

 

View solution in original post

WarrenBelz
Most Valuable Professional
Most Valuable Professional

@LisKr ,

The top line is to clear the collection at the start, but you can put it at the end if you want.

ForAll(
   DetailsMachineUploadAttach.Attachments As FILE;
   Collect(
      colAttach;
      Table(
         {
            Loaded:
            'MLIProductionInstructions-Machine:CreateFolder+uploadimage'.Run(
               InputDetailsMachineID.Text;
               {
                  contentBytes: FILE.Value;
                  name: FILE.Name
               }
            ).status
         }
      )
   )
);;
If(
   CountRows(colAttach) = CountRows(DetailsMachineUploadAttach.Attachments);
   Notify(
      "Upload successful!";
      NotificationType.Success
   )
);;
Clear(colAttach)

As I mentioned, I tested it here and it worked as expected.
As it is not possible to create a Variable inside a ForAll() sequence, I created a collection, with the Collect() command adding a new line for each Flow run return value. I then compare the number of records in the collection with the number of attachments - if they are the same, then all instances of the Flow ran successfully.

 

Please click Accept as solution if my post helped you solve your issue. This will help others find it more readily. It also closes the item. If the content was useful in other ways, please consider giving it Thumbs Up.

MVP (Business Applications)   Visit my blog Practical Power Apps

View solution in original post

23 REPLIES 23
WarrenBelz
Most Valuable Professional
Most Valuable Professional

Hi @LisKr ,

Can you please remember to post your code in Text as it saves re-typing here. This code is OCR'd, so please watch spelling. You need to refer to the attachment control Value - not Image

If( 
   MLIProductionInstructions-MachineGrade:CreateFolder+uploadimage.Run( 
      InputDetaiLsMachineGradelD.Text;
      {
         file: 
         {
            contentBytes: First(DetailsMachineUploadAttachments.Attachments).Value; 
            name: First(DetailsMachineUploadAttachments.Attachments).Name
         }
      }
   ).status = "Completed"; 
   Notify("Upload successful !”;Success)
);;

 

Please click Accept as solution if my post helped you solve your issue. This will help others find it more readily. It also closes the item. If the content was useful in other ways, please consider giving it Thumbs Up.

MVP (Business Applications)   Visit my blog Practical Power Apps

Thanks for your reply! I already tried refering to the attachment control (as you can see in my second screenshot), that's when the error started to appear. This was my code:

 

If('MLIProductionInstructions-MachineGrade:CreateFolder+uploadimage'.Run(
        InputDetailsMachineID.Text;
        {
            file: {
                contentBytes: DetailsMachineUploadAttach.Attachments.Value;
                name: DetailsMachineUploadAttach.Attachments.Name
            }
        }
    ).status = "Completed"; Notify("Upload successful!";NotificationType.Success)
);;
Notify(
    "Upload successful!";
    NotificationType.Success
)

 

 

 

I just tried your code and it still throws the same error, unfortunately.

Edit: I tried it again and it seems to work. I might have had a mistake in the name.

The following questions still remain:

 

Can you explain why I need to use First function? Or what do I need to do, if I want to upload more than just one file at the same time?

 

WarrenBelz
Most Valuable Professional
Most Valuable Professional

@LisKr ,

The issue is that an Attachment Control content is a Table and you only want one record from that Table. It is probably better to use Last() so you can keep adding as you have mentioned.

 

Please click Accept as solution if my post helped you solve your issue. This will help others find it more readily. It also closes the item. If the content was useful in other ways, please consider giving it Thumbs Up.

MVP (Business Applications)   Visit my blog Practical Power Apps

I didn't know that it's a table. Good to know! I'm quite new to PowerApps and try to teach myself piece by piece whenever I need something new, so I apologize if my questions seem kinda odd or stupid.

 

So why do we have to use either First() or Last()? Can't I use all the records of that table at once? And what about that solution with ForAll() I have seen, is it  a good practice? It was something like

 

 

ForAll(
    AttachmentsControlName.Attachments As FILE,
    UploadFileToDocumentLibrary.Run(
        {
            contentBytes: FILE.Value,
            name: FILE.Name
        }
    )
);

 

 

 

I don't really get what that "as file" means. I've also seen someone use "as document" instead of "as file", so is document or file just kind of a random word to make it easier to refer to the files?

And how could I nest that code into my if statment with the notification?

WarrenBelz
Most Valuable Professional
Most Valuable Professional

@LisKr ,

If you are using the Attachment control solely for this purpose and do not set the MaxAttachments to 1 (as I do), then Last() is probably better (from a user perspective), but that is superseded by your most recent question. Yes, you can call the As variable whatever you want and attach them all

ForAll(
   AttachmentsControlName.Attachments As _Files,
   UploadFileToDocumentLibrary.Run(
      {
         contentBytes: _Files.Value,
         name: _Files.Name
      }
   )
);

Just be careful on (particularly) mobile devices that you do not try to add too many large files.

 

Please click Accept as solution if my post helped you solve your issue. This will help others find it more readily. It also closes the item. If the content was useful in other ways, please consider giving it Thumbs Up.

MVP (Business Applications)   Visit my blog Practical Power Apps

 

 

Thanks for your explanation. That really helps!

 

Is there a maximum of files to upload at once that you recommend so it doesn't affect performance or creates other kind of issues?

 

And I tried to put that ForAll code into my If statement, but it throws many errors and I'm confused what I did wrong. (The idea is that clicking on a button should trigger a flow that uploads the files in the attachment control and when it's done, notifies the user.)

 

 

If(ForAll(DetailsMachineUploadAttach.Attachment As FILE;
    'MLIProductionInstructions-Machine:CreateFolder+uploadimage'.Run(
        InputDetailsMachineID.Text;
        {
                contentBytes: FILE.Value;
                name: FILE.Name
            }
       
    ).status = "Completed";
    Notify(
        "Upload successful!";
        NotificationType.Success
    )
)
);;

 

 

 

Screenshots of the errors:

LisKr_0-1712823697285.png

⬆️it says "invalid number of arguments. got 3, expected 2" , "invalid number of arguments. got 1, expected 2 or more" and "invalid name. attachment is not recognized".

 

 

LisKr_1-1712823800412.png

⬆️"incompatible type. Column "file:contentBytes" in the data source expects type blob, but you use type error."

"function Run has invalid arguments"

"invalid name. "FILE" isn't recognized".

 

 

Did I just put the ForAll in the wrong place? Or am I just thinking too complicated about how to archieve my scenario?

WarrenBelz
Most Valuable Professional
Most Valuable Professional

@LisKr ,

The issue is that you cannot really return a value from a multiple ForAll patch like that - theoretically, it will return only the last one, but I don't think even that would work as evidenced by your error. If you want to add multiple files, you probably need to disregard the error check and remove the returned value from the Flow.

 

Please click Accept as solution if my post helped you solve your issue. This will help others find it more readily. It also closes the item. If the content was useful in other ways, please consider giving it Thumbs Up.

MVP (Business Applications)   Visit my blog Practical Power Apps

Do I understand you correctly:

It is only possible to upload multiple files OR do an action based on the return from the flow but only when uploading one file? Both together doesn't work? (I'm asking cause English is not my native language, so I want to make sure I understand what you want to tell me)

 

The reason why I added that flow response and the if statement, is because when I upload a file to SP, the gallery that should show the files in that library only shows the "old" files without the recently uploaded one. And when I put a refresh (done with a variable) into the code directly after the flow run function, it refreshes while the flow is still running and so still doesn't show the newly added file. So I thought by adding the response and the notification based on it, it would force the app to wait until the flow is finished to execute the refresh.

That's the whole purpose behind it. I also read about the possibility of archieving that with a timer control but that doesn't seem like a good practice to me, because the time is hardcoded and  if the flow should take longer than that estimated time, the refresh would still be too soon...

 

Do you have another approach for that maybe? Or do you think it's better to just stick with uploading one file at a time? Would it maybe help, if I made screenshots from the UI of the app or if I posted the whole code with the refresh etc.?

WarrenBelz
Most Valuable Professional
Most Valuable Professional

@LisKr ,

The issue is that it is several Flows that are being run in quick succession, and you cannot really set a variable to the entire result of that. A timer may be a better option for the refresh.

 

Please click Accept as solution if my post helped you solve your issue. This will help others find it more readily. It also closes the item. If the content was useful in other ways, please consider giving it Thumbs Up.

MVP (Business Applications)   Visit my blog Practical Power Apps

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