Hi everyone,
I've created an MS form to capture photo submissions but when I go to download the files it adds the name of the person who submitted the form/attachment in the file name. So instead of the file name reading "Supermarket" it is labelled as "Supermarket_Smith_John".
I've created a cloud flow to transfer data from the form onto a SharePoint list. Is there somewhere on my flow where I can input an action to remove the username from the file name?
Please note that I am a complete novice so you'll have to explain to me in simple terms 🙂
I've also attached a screenshot of my process flow.
Thanks
Sayyied
I had the same problem and after some testing I may have found a solution for this.
Please note this solution does not work for anonymous responses, however you could bluit in a condition for this.
The solution I found works like this:
- For each attachment
json(outputs('Get_response_details')?['body/r07de2b546a4744baa4df6dee5027c30e'])​​
Where ['body/r07de2b546a4744baa4df6dee5027c30e'] corresponds to the Forms questions where you can add attachments
- Get the User Profile of the responder of the form
- Compose the file name (including the user name) of the attachment
- Then compose the user name in the same way as it's added to the File Title (_ + Given Name + (space) + Surname)
concat('_',outputs('Get_user_profile_(V2)')?['body/givenName'], ' ', outputs('Get_user_profile_(V2)')?['body/surname'])​​
- Remove the composed User Name for the File Title by replacing it with a blank
replace(outputs('Compose_-_File_Name_with_extension'),outputs('Compose_-_User_Name'), '')​​
I Hope it also work for your situation.
Hi @Cayshin
Sorry for my delayed response, I've updated my cloud flow as follows:
But the problem still persists.
I also tried to enter the following express (as highlighted in your above answer) in the 'Inputs' field: replace(outputs('Compose'), concat('_', last(split(outputs('Compose'),'_'))), concat('.',last(split(outputs('Compose'),'.'))))
But it keeps saying 'Invalid expression'
If I submit an attachment via MS forms the submitters name is still automatically added to the naming of the file. Do you have any thoughts as to what I'm doing wrong? Do you have any thoughts on this @MarconettiMarco?
So I did some testing and learned that the dynamic content that holds the filename is actually a string list that contains other data.
For MarconettiMarco's suggestion to work, we need to extract the filename from that content. Here is an expression you can use to do that (replace the bold section with your dynamic content. You may need to do some trial and error to find the right one. Ex. dump them all into a compose, run it, check the results to see which one has the data you want):
json(outputs('Get_response_details')?['body/r4550c900756e412eb445dac014bc7d43'])[0]['name']
With the expression, we're converting the string list to a JSON array. The [0] means we're selecting the first (and in this case, only) "row" of data from the array, then the ['name'] means we're selecting the name field which holds our filename.
So now that we have extracted the filename, I'd like to make a small change to MarnettiMacro's code. He's suggesting to perform a split at each occurrence of an underscore ("_") then selecting the first element returned by that split. But what if the person submitting a photo already has/puts their own underscores in the filename? Then we're going to be missing part of the filename. So in actually, we only want to remove everything after the last underscore (but keep the file extension).
Here's an expression that will remove everything (except the file extension) after the last underscore:
There may be other ways to accomplish the same as the expression above, but this should work for your purposes.
So far I've tried using the 'Upload photographs', 'Resource data', 'Please reformat...' and 'Resource data' Dynamic Content within the expression you highlighted above, but alas no luck.
Is there any other solution I can try?
For context, my MS forms is set up as below.
1. Please type in subject's name
- Text box answer
2. Please rename each file in the following convention (Surname, First Name) and check the button below to confirm.
- Button
3. Is this an urgent request?
- Yes/No
4. If so please confirm your deadline.
- Date
5. Upload photographs
- Upload button
**Submit**
Hello @Sayyied2022 ,
I don't know how is build your Forms. Anyhow I think you should use the "Please reformat..." value, am I right?
BR,
Marco
Here are all the dynamic content options available to me:
I have previously tested the 'Upload photographs' option located under 'Dynamic content'.
Is there an expression you can send me that I can just copy and paste?
Btw I'm not too sure where that 'name' option has disappeared to. I'm referencing what was seen in my previous message.
ok @Sayyied2022 ,
no worries, from where are you grabbing the incorrect file name? From the "Get response details" action?
BR,
Marco
Thanks @MarconettiMarco
I've followed the instructions as you highlighted above but it's still not working 😞
I enter the expression trim(first(split(,'_'))) and I select the 'Name' dynamic content in between ( and ,
This results in the following expression:
I noticed your box is blue but mine is purple (not too sure if this makes a difference):
For context, on the MS forms I built out there is a 'name' field but that doesn't automatically rename the file or anything. On the MS forms I ask people to rename the file prior to uploading any attachments. A question is included in the form asking for confirmation that they've done this and they have to check a button as confirmation.
Hope that made sense. Do forgive me if this is annoying. I don't work in IT so this is all new to me.
Sayyied
like this:
trim(first(split(outputs('Get_response_details')?['body/ref24e6486aa24a05ac15e6313beb66b8'],'_')))
If I have answered your question, please mark my post as Solved.
If you like my response, please give it a Thumbs Up.
BR,
Marco
Hello @Sayyied2022 ,
my Compose action represents only an example.
You can directly put the "trim" expression in the related "Create item" action field, replacing "outputs('Compose')" with the question grabbed from Forms.
If I have answered your question, please mark my post as Solved.
If you like my response, please give it a Thumbs Up.
BR,
Marco