The Community will be temporarily unavailable starting on Friday February 28. We’ll be back as soon as we can! To learn more, check out our Announcements blog post.
May 24, 2022 07:59 AM
Hello,
Can someone help me to write a code to extract all the URLs associated with my attachment in a particular record?
As you can see here, i have 3 photos where i need to generate “https://dl.airtablexxx1,https://dl.airtablexxx2,https://dl.airtablexxx3” in a field named “joined”
Thank you for helping me
Solved! Go to Solution.
May 25, 2022 07:10 AM
Sorry, didn’t check for that. Here you go:
const table = base.getTable("Table 5")
const recordsQuery = await table.selectRecordsAsync();
let updateArray = [];
// iterate over all records
recordsQuery.records.forEach(record => {
const attField = record.getCellValue("Attachment 1");
// iterate over object and save as url
if(attField) {
let urlArray = [];
attField.forEach(item => urlArray.push(item.url))
const urlString = urlArray.join(', ')
updateArray.push({id: record.id, fields: {"Joined": urlString}})
}
})
// update records
while (updateArray.length > 0) {
await table.updateRecordsAsync(updateArray.slice(0, 50));
updateArray = updateArray.slice(50);
}
May 24, 2022 08:32 AM
Hi Kenny, just wrote a script that does the job (please change table name in base.getTable("...")
as well as the attachment field in const attField = record.getCellValue("...");
and the field to be updated at the end):
const table = base.getTable("Table 5")
const record = await input.recordAsync("Please select record", table);
// Select attachment field
const attField = record.getCellValue("Attachment 1");
// iterate over object and save as url
let urlArray = [];
attField.forEach(item => urlArray.push(item.url))
const urlString = urlArray.join(', ')
// update field
await table.updateRecordAsync(record.id, {
"Joined": urlString,
})
This script works with a button as well as by selecting the record in the script. Please let me know if you have any questions!
May 24, 2022 08:34 AM
PS: Works for any number of attachments / URLs in a given field
May 24, 2022 08:30 PM
Thanks for your effort. Can we RUN this script in the dashboard so that the script runs for the WHOLE records?
May 24, 2022 11:25 PM
I assume with “dashboard” you mean the app section on the right side? In this case we would need to iterate over all records instead of selecting a single record (via button or input in script). Then we run the script for every record just like before:
const table = base.getTable("Table 5")
const recordsQuery = await table.selectRecordsAsync();
// iterate over all records
recordsQuery.records.forEach(async record => {
const attField = record.getCellValue("Attachment 1");
// iterate over object and save as url
let urlArray = [];
attField.forEach(item => urlArray.push(item.url))
const urlString = urlArray.join(', ')
// update field
await table.updateRecordAsync(record.id, {
"Joined": urlString,
})
})
You will still have to replace those field names in red of course.
May 24, 2022 11:40 PM
Sorry it was too early here and didn’t think about API rate limits :grinning_face_with_big_eyes: (15 writes per second and 50 records in one call). I changed the script and it should work for any number of records:
const table = base.getTable("Table 5")
const recordsQuery = await table.selectRecordsAsync();
let updateArray = [];
// iterate over all records
recordsQuery.records.forEach(record => {
const attField = record.getCellValue("Attachment 1");
// iterate over object and save as url
let urlArray = [];
attField.forEach(item => urlArray.push(item.url))
const urlString = urlArray.join(', ')
updateArray.push({id: record.id, fields: {"Joined": urlString}})
})
// update records
while (updateArray.length > 0) {
await table.updateRecordsAsync(updateArray.slice(0, 50));
updateArray = updateArray.slice(50);
}
May 25, 2022 01:58 AM
Thanks mate! It’s very useful.
May 25, 2022 07:03 AM
Rupert, i got strikethrough syntax there. Is it okay to proceed?
May 25, 2022 07:05 AM
I got this error…
The “Joined” field is Single Text field in my side. Is this correct?
May 25, 2022 07:08 AM
Is it because i have records which has empty attachment field? If yes, how can i ignore those records?