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):
// 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!
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):
// 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!
PS: Works for any number of attachments / URLs in a given field
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):
// 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!
Thanks for your effort. Can we RUN this script in the dashboard so that the script runs for the WHOLE records?
Thanks for your effort. Can we RUN this script in the dashboard so that the script runs for the WHOLE records?
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:
// iterate over all records
recordsQuery.records.forEach(async record => {
const attField = record.getCellValue("Attachment 1");
// iterate over object and save as url
let urlArray = y];
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.
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:
// iterate over all records
recordsQuery.records.forEach(async record => {
const attField = record.getCellValue("Attachment 1");
// iterate over object and save as url
let urlArray = y];
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.
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:
// update records
while (updateArray.length > 0) {
await table.updateRecordsAsync(updateArray.slice(0, 50));
updateArray = updateArray.slice(50);
}
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:
// update records
while (updateArray.length > 0) {
await table.updateRecordsAsync(updateArray.slice(0, 50));
updateArray = updateArray.slice(50);
}
Thanks mate! It’s very useful.
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:
// 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(', ')
// 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(', ')
// 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(', ')
// 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(', ')
// update records
while (updateArray.length > 0) {
await table.updateRecordsAsync(updateArray.slice(0, 50));
updateArray = updateArray.slice(50);
}
@Rupert_Hoffschmidt, unfortunately this script only works if the “Joined” field is initially empty.
When i update the images in “attachment” field, running this script doesn’t change what inside the “Joined” field.
Is there any script line should i put so that it always updates?
@Rupert_Hoffschmidt, unfortunately this script only works if the “Joined” field is initially empty.
When i update the images in “attachment” field, running this script doesn’t change what inside the “Joined” field.
Is there any script line should i put so that it always updates?
Hi Kenny, yes it only works for adding attachments, but not deleting attachments from the field. I’ve added some code (if attField == null...) for deleting whatever is in the field IF the attachment is empty. I’ve tested all possible combinations and it seems to work well:
// 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(', ')