cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
AIUYM19
Advocate V
Advocate V

Using Power Automate to send and receive SharePoint list attachments in PowerApps attachments control

This question involves both PowerApps and Power Automate. I decided to put it here, since the ultimate goal is to make the attachments control in a PowerApp work.

Setup: In my PowerApp, I have an orphaned attachments control—I copied it from an edit form, and pasted it on a screen independently before deleting the edit form. When the user loads this screen (the OnVisible property), I want to call a Power Automate flow that gets the attachments from a specific SharePoint list item, and then displays them in the attachments control.

Method: In the OnVisible property for the screen, I have this command...

ClearCollect(CurrentItemAttachments, 'AttachmentsTest'.Run(galItems.Selected.id));

In Power Automate, that AttachmentsTest flow looks like this...

a.png

 

b.png

After running a test, I confirmed that the flow does work, but it's sending the attachment contents back in an array of JSON strings. As a result, the attachments control looks like this...

c.png

How can I get the filenames to appear in the control as if I had connected PowerApps directly to SharePoint? The problem is that I need to keep the SharePoint list closed, and the only way to access it is via that PowerApp. The PowerApp will call a "passthrough" flow, which will then call another flow that actually interacts with SharePoint. This allows users of the PowerApp to use a controlled UI to access files in a SharePoint site they (intentionally) do not have access to.

The desired end result is to get this attachments control working as if I had it in an edit form connected directly to SharePoint.

1 ACCEPTED SOLUTION

Accepted Solutions
v-xida-msft
Community Support
Community Support

Hi @AIUYM19 ,

Could you please expand the "Response" action in your flow?

Do you want to fire flow to retrieve the Attachments of a specific SP List Item in your SP List?

Further, do you want to display the file name within the Attachments control?

 

Based on the flow's configuration that you mentioned, I think there is something wrong with it. I have made a test on my side, please consider take a try with the following workaround:

2.JPG

 

3.JPG

 

4.JPG

Within the "Append to array variable" action, Name set to AttachmentsArray variable, and the Value field set to following:

{
  "AbsoluteUri": @{items('Apply_to_each')?['AbsoluteUri']},
  "DisplayName": @{items('Apply_to_each')?['DisplayName']},
  "Id": @{items('Apply_to_each')?['Id']},
  "Value": @{body('Get_attachment_content')?['$content']}
}

Within the "Response" action, Body field set to AttachmentsArray variable, and the "Response Body JSON Schema" field set to following:

{
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "AbsoluteUri": {
                "type": "string"
            },
            "DisplayName": {
                "type": "string"
            },
            "Id": {
                "type": "string"
            },
            "Value": {
                "type": "string"
            }
        },
        "required": [
            "AbsoluteUri",
            "DisplayName",
            "Id",
            "Value"
        ]
    }
}

 

My App's configuration as below:

5.JPG

 

6.JPG

Set the OnSelect property of the "Retrieve" button to following:

ClearCollect(CurrentItemAttachments, 'Your Flow Name'.Run(BrowseGallery1.Selected.ID))

Note: On your side, you may need to execute above formula within the OnVisible property of your screen.

After that, the attachment file name would be shown up in the Attachments control. Please note that your CurrentItemAttachments collection must contains the following columns:

 

Best regards,

Community Support Team _ Kris Dai
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

4 REPLIES 4
v-xida-msft
Community Support
Community Support

Hi @AIUYM19 ,

Could you please expand the "Response" action in your flow?

Do you want to fire flow to retrieve the Attachments of a specific SP List Item in your SP List?

Further, do you want to display the file name within the Attachments control?

 

Based on the flow's configuration that you mentioned, I think there is something wrong with it. I have made a test on my side, please consider take a try with the following workaround:

2.JPG

 

3.JPG

 

4.JPG

Within the "Append to array variable" action, Name set to AttachmentsArray variable, and the Value field set to following:

{
  "AbsoluteUri": @{items('Apply_to_each')?['AbsoluteUri']},
  "DisplayName": @{items('Apply_to_each')?['DisplayName']},
  "Id": @{items('Apply_to_each')?['Id']},
  "Value": @{body('Get_attachment_content')?['$content']}
}

Within the "Response" action, Body field set to AttachmentsArray variable, and the "Response Body JSON Schema" field set to following:

{
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "AbsoluteUri": {
                "type": "string"
            },
            "DisplayName": {
                "type": "string"
            },
            "Id": {
                "type": "string"
            },
            "Value": {
                "type": "string"
            }
        },
        "required": [
            "AbsoluteUri",
            "DisplayName",
            "Id",
            "Value"
        ]
    }
}

 

My App's configuration as below:

5.JPG

 

6.JPG

Set the OnSelect property of the "Retrieve" button to following:

ClearCollect(CurrentItemAttachments, 'Your Flow Name'.Run(BrowseGallery1.Selected.ID))

Note: On your side, you may need to execute above formula within the OnVisible property of your screen.

After that, the attachment file name would be shown up in the Attachments control. Please note that your CurrentItemAttachments collection must contains the following columns:

 

Best regards,

Community Support Team _ Kris Dai
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

@v-xida-msft 

Progress! Thank you, Kris. I didn't realize I needed to pass all four fields back to PowerApps. I am attempting to get the attachments from a specific list item in the SharePoint list (using the id variable in the flow). Here was my Response step in my Power Automate flow before I edited it per your instructions.

c.png

The file names are appearing in the attachment control now, but clicking one of the entries throws an error saying, "The file could not be downloaded." Wasn't the file content (including formatting info) passed to PowerApps in the Value field? Since it was passed to PowerApps in a JSON array as a string, do I need to convert it back to a binary first, before displaying it in the attachments control?

Eventually, I need to get to a point where the user can interact with the attachment control the same way as if the control were inside an edit form connected to SharePoint (downloads and uploads). I think I can manage the uploads part using this tutorial. However, the downloads part is proving difficult.

Hi @AIUYM19 ,

Yeah, you are right. The issue is related to the Value property within the attachments collection. Actually, the attachments collection should be in following format:

1.JPG

 

The "Value" property within the Attachments should be an reference to the Attachments file of a SP List Item rather than a binary content. The format of the "Value" property value should be as below:

appres://datasources/<Your SP List Name>/table/<Your List Id>/rows/<Item ID>/reference/https:%2F%2Fasia-001.azure-apim.net%2Fapim%2Fsharepointonline%2F<Resource ID>%2Fdatasets%2Fhttps%25253A%25252F%25252F<SharePoint Domain>.sharepoint.com%25252Fsites%25252F<Site Name>%2Ftables%2F<Your List ID>%2Fitems%2F<Item ID>%2Fattachments%2F%2525252fLists%2525252f<Your SP List Name>%2525252fAttachments%2525252f<Item ID>%2525252fPciture.jpg%2F$value

You could consider generated an app based on your SP list, and set the OnSelect property of the Gallery to following:

ClearCollect(Collection1, ThisItem.Attachments)

when you click an item including attachments, you will get the attachments collection as above screenshot I provided. Then you could find the "Value" property in your own collection table.

 

Within your flow, you need to assign above "Value" property value as value for the Value attribute within your "Append to array variable" action as below:

2.JPG

concat('appres://datasources/<Your SP List Name>/table/<Your List Id>/rows/',variables('ItemID'),'/reference/https:%2F%2Fasia-001.azure-apim.net%2Fapim%2Fsharepointonline%2F<Resource ID>%2Fdatasets%2Fhttps%25253A%25252F%25252F<SharePoint Domain>.sharepoint.com%25252Fsites%25252F<Site Name>%2Ftables%2F<Your List ID>%2Fitems%2F',variables('ItemID'),'%2Fattachments%2F%2525252fLists%2525252f<Your SP List Name>%2525252fAttachments%2525252f',variables('ItemID'),'%2525252fPciture.jpg%2F$value')

Replace the <Your SP List Name>, <Your List ID>, <Resource ID>, <SharePoint Domain>, <Site Name> with actual value from your above collection table. And make the <Item ID> as dynamic content value, which receives the value from the ItemID variable in your flow.

 

Please consider take a try with above solution, then check if the issue is solved.

 

Best regards,

Community Support Team _ Kris Dai
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

@v-xida-msft  Sorry about the delay. I couldn't get this latest method to work. The browser still said "the item couldn't be downloaded" when I clicked the attachment in the control. Due to time, constraints, I temporarily connected the Power App directly to the necessary SharePoint lists and libraries. I will need to come back to this later, when I have more time to work on it.

For security reasons, I really shouldn't have the app connected directly to SharePoint (hence the intervening Power Automate flows). When I get a chance, I will look at this again. In the meantime, your first method worked to get the list of attachments into the attachment control. So, I will mark that as a solution for now.

Helpful resources

Announcements
Power Apps News & Annoucements carousel

Power Apps News & Announcements

Keep up to date with current events and community announcements in the Power Apps community.

Power Apps Community Blog Carousel

Power Apps Community Blog

Check out the latest Community Blog from the community!

Top Solution Authors
Top Kudoed Authors
Users online (3,351)