Our help desk asked for one Save button in Power Apps that patches attachments to a SharePoint list item, not SubmitForm. An agent picks a service request, drops in a screenshot and a notes file, and saves. They already had Patch logic for other columns and didn’t want two save paths.
Here’s what we’re building. I attached two files to Password reset #1005 and clicked Save. The banner confirms the Patch, and the counter, which reads the item’s attachments from SharePoint, went from 0 to 2:

In this tutorial, we’ll patch attachments to SharePoint list items from a canvas app the way that actually works. We’ll build a one-card Edit form, save it with Patch and the form’s Updates, see why the classic control fails outside a form, and then save files without any form using the modern Attachments control.
The finished screen has four parts:
- galPatch, a gallery of service requests with the item ID and status.
- frmAtt, a classic Edit form trimmed to two cards: Title and Attachments.
- Save (Patch + form), a button that runs Patch with
frmAtt.Updatesfor new and existing items. - A label that counts the files SharePoint has on the selected item.
The short version: the classic Attachments control only uploads from inside a form, so you patch the form’s Updates record. If you want no form at all, the modern Attachments control can go straight into Patch.
Before You Start
You need edit rights on a SharePoint list and a Power Apps license that covers SharePoint, which most Microsoft 365 business plans include. Attachments must be on for the list. If someone switched them off, see how to turn list attachments on or off in the advanced settings.
I built this in my Service Desk Demo app on the Service Requests list (620 items) on /sites/SPGuides. Only these columns matter here:
| Name | Type | Notes |
|---|---|---|
| Title | Single line of text | Password reset #1005 |
| Status | Choice | New, In Progress, Closed |
| ID | Number (built in) | Shown in the gallery |
| Attachments | Built-in list attachments | Where the files land |
And these are the two items we’ll work with:
| ID | Title | Status | Files before the test |
|---|---|---|---|
| 1 | Laptop replacement #1000 | New | 2 (Laptop-Quote-Oct-2026.pdf, Warranty-Terms.docx) |
| 2 | Password reset #1005 | Closed | 0 |

Build the Demo App Step by Step
New to canvas apps? These steps create the app and connect the list. Skip to Step 1 if your app is already connected.
1. Go to make.powerapps.com, select Home, then Start with design.

2. On the Create page, pick Create from blank (a canvas app).

3. In Start with a blank canvas, choose Tablet so the gallery and form fit side by side.

4. In Power Apps Studio, select Add data, type SharePoint and pick the SharePoint connector. A data source is just a connection your app reads from and writes to.

5. Paste your site URL under Connect to a SharePoint site and select Connect.

6. Check Service Requests under Choose a list and select Connect. Press Ctrl+S now and then to save the app.

Two moves you’ll use in every step: the property dropdown left of the fx formula bar picks which property you’re editing, and the Play button at the top right (or Alt + click in the editor) runs the app.
Step 1: Add the Gallery and the File Counter
Goal: a list of requests to pick from, plus a label that tells us what SharePoint really holds. If galleries are new to you, our Power Apps gallery control guide covers the basics.
- Select Insert > Vertical gallery, rename it galPatch, and set Items to
'Service Requests'. - Keep Title as the heading and set the subtitle label’s Text to the formula below.
- Insert a Text label above the form area and set its Text to the counter formula.
"ID " & ThisItem.ID & " | " & ThisItem.Status.Value
"Files on this item in SharePoint: " & CountRows(galPatch.Selected.Attachments)
Checkpoint: each row reads like Password reset #1005 with ID 2 | Closed under it, and the counter shows 0 for that item.
Step 2: Insert a Classic Edit Form
The classic Attachments control only saves from inside a form, so the form is the carrier (the Insert tab doesn’t even list the control on its own).
- Select Insert and type Edit form in the search box.
- Under Classic, pick Edit form.
- Choose Service Requests as the data source and rename the form frmAtt.
- Set the form’s Item property so it follows the gallery.

DataSource = 'Service Requests'
Item = galPatch.Selected
Step 3: Add the Attachments Field and Trim the Form
My new form came with nine default fields and no Attachments field, so we add it by hand.
- With frmAtt selected, open Edit fields and select Add field.
- In Choose a field, check Attachments (it sits at the top) and select Add.
- Remove every other field except Title: hover the field, select … and Remove.

Why trim it? Patch only sends what’s in Updates, and fewer cards means fewer required fields that could block the save.
Checkpoint: the form shows a Title box and an Attachments area with an Attach file link.
Step 4: Check the Attachment Control Settings
Select the control inside the Attachments card and rename it attForm. The classic attachment control keeps its file list in the card, and the card’s Update property hands it to the form:
attForm.Attachments
On the Display tab, my card showed Max attachments 6 and Max attachment size 10. Microsoft measures that size in MB per file, where 1 MB is 1,000,000 bytes.

Want different link text, such as Add a screenshot? The card is locked. Open the Advanced tab, select Unlock to change properties, then edit AddAttachmentText, MaxAttachmentsText or NoAttachmentsText.

Step 5: Save With Patch and the Form’s Updates
This is the part people search for. frmAtt.Updates is a record of every card’s value, attachments included, and Microsoft documents it for exactly this: pulling values out of a form to save with Patch.
- Insert a Button, set its Text to Save (Patch + form).
- Pick OnSelect in the property dropdown.
- Paste the formula below into the formula bar.
If(
frmAtt.Mode = FormMode.New,
Patch('Service Requests', Defaults('Service Requests'), frmAtt.Updates),
Patch('Service Requests', galPatch.Selected, frmAtt.Updates)
);
Notify("Saved with Patch + frmAtt.Updates", NotificationType.Success);
EditForm(frmAtt)

The If picks the base record. For an existing item, it’s galPatch.Selected, which Patch can trace back to SharePoint. For a new item, it’s Defaults('Service Requests'), which tells Patch to create a row. EditForm(frmAtt) puts the form back in Edit mode afterward.
Add two helper buttons: New request with NewForm(frmAtt) and Discard changes with ResetForm(frmAtt), which drops unsaved edits the same way you’d reset other inputs on a form.
NewForm(frmAtt)
ResetForm(frmAtt)
Test the App
Press Play, pick Password reset #1005 (ID 2, no files yet) and select Attach file. I added Password-Reset-Screenshot.png and Reset-Notes.txt. Both show Unsaved, and the counter still says 0 because nothing has reached SharePoint:

Select Save (Patch + form). You get the green Saved with Patch + frmAtt.Updates banner from the top of this article, the Unsaved tags disappear, and the counter reads 2.
Checkpoint: SharePoint’s REST endpoint for item 2 listed both files under /sites/SPGuides/Lists/Service Requests/Attachments/2/, so the Patch really wrote them.
Why Patch Fails With the Attachment Control Outside a Form
This is the without a form question from the search results. I copied the classic control out of the form, named it attOutside, and set its Items to galPatch.Selected.Attachments. It still let me pick files, so it looks like it should work:

Then I patched its table straight into the Attachments column:
Patch(
'Service Requests',
galPatch.Selected,
{Attachments: attOutside.Attachments}
)
Power Apps underlined the record and refused it with this error:
The type of this argument '{Attachments}' does not match the expected type 'Table (Attachment)'. Found type 'Table'.

I tried two ForAll reshapes too, one building DisplayName, Id and Value and one adding AbsoluteUri. The first gave the same error and the second gave The function ‘Patch’ has some invalid arguments. That matches Microsoft’s docs: the classic control uploads only inside a form and doesn’t accept ForAll-built tables.
Variation: Patch Attachments Without a Form (Modern Control)
If you truly want no form, use the modern Attachments control. Turn on Modern controls and themes under Settings > Updates, insert it from Input, and bind Items to the gallery’s attachments. I walk through every setting in the modern attachment control tutorial; the save is one Patch:
Patch(
'Service Requests',
galAttRequests.Selected,
{Attachments: attRequest.Attachments}
)

On Laptop replacement #1000 this saved Laptop-Quote-Oct-2026.pdf and Warranty-Terms.docx with the banner Attachments saved. and no form on the screen:

Note: the modern control is still a preview feature, and Microsoft says previews aren’t meant for production use. For a production app today, I’d ship the form method above.
Variation: Save Attachments With Power Automate
A flow makes sense when the files must go somewhere the control can’t reach, such as a document library or a second list. The app sends each file’s name and content to a flow, and the flow adds it with the SharePoint connector. Here’s the full build: save form attachments to a SharePoint list with Power Automate.
For plain list attachments on the same item, I’d skip the flow. Patch is faster, needs no extra license check, and has fewer moving parts.
Troubleshooting
- “Found type ‘Table'” error: you’re patching a classic control that sits outside a form. Move it back into the form and patch
frmAtt.Updates, or switch to the modern control. - Files stay marked Unsaved: nothing is uploaded until Patch or SubmitForm runs. Check that the Save button’s OnSelect actually ran (look for the banner).
- Attachments isn’t in the Add field list: attachments are off for that list, or the form points at a different data source.
- Can’t change MaxAttachments or the link text: the card is locked. Use Unlock to change properties on the Advanced tab.
- “Cannot serialize” error when sending files to a flow: the JSON function can’t handle the attachment table as is. Here’s how to fix the JSON attachments error.
- Mobile quirks: Microsoft notes Power Apps Mobile adds one file at a time, and files in OneDrive may need downloading to the device first.
Important: keep the user on the same gallery item until they save. If they click another request, the form loads that item and the unsaved files are lost.
Where to Take It Next
- Make a file required when Status is Closed by setting the card’s Required property, then guard the Save button with the form’s Valid property. Our Power Apps form validation examples show the pattern.
- Show the saved files with icons per type in a second gallery: file type icons in a Power Apps gallery.
- Let users attach files right in each gallery row instead of a side form: add attachments in a Power Apps gallery.
If you’re building apps like this at work, our Power Apps training course covers forms, Patch and SharePoint data step by step.
Want more Patch and form tricks? These pair well with this build:
Frequently Asked Questions
Can you patch attachments to a SharePoint list in Power Apps?
Yes. Put the classic Attachments control inside an Edit form and run Patch(List, Gallery.Selected, Form.Updates). The Updates record carries the attachment table in the shape SharePoint expects.
How do I patch attachments to a SharePoint list without a form?
Use the modern Attachments control (preview) and run Patch(List, Gallery.Selected, {Attachments: Control.Attachments}). The classic control outside a form fails with a Table (Attachment) type error.
Why does Patch say the Attachments argument does not match Table (Attachment)?
The table comes from a classic attachment control outside a form, or from ForAll. Microsoft says the classic control only uploads inside a form. See the Attachments control reference.
How do I create a new SharePoint item with attachments using Patch?
Switch the form to New mode with NewForm(frmAtt), then run Patch(List, Defaults(List), frmAtt.Updates). Defaults tells Patch to create a row. See the Patch function reference.
Do I need Power Automate to add attachments from Power Apps?
No, not for list attachments on the same item. Patch with the form’s Updates or the modern control is enough. Use a flow when files must go to a document library or another list.

Hey! I’m Bijay Kumar, founder of SPGuides.com and a Microsoft Business Applications MVP (Power Automate, Power Apps). I launched this site in 2020 because I truly enjoy working with SharePoint, Power Platform, and SharePoint Framework (SPFx), and wanted to share that passion through step-by-step tutorials, guides, and training videos. My mission is to help you learn these technologies so you can utilize SharePoint, enhance productivity, and potentially build business solutions along the way.