Mar 24, 2021 08:37 PM
I am wanting to hard code the table variables into the script airtable provides to convert URL’s into attachments, so that I can run it via an automation.
This is the script:
let settings = input.config({
title: "Convert URLs to attachments",
description: `This script will download all attachments from a URL into an attachment field. The
source field can be a URL field or any text field containing a URL. Each cell should only contain a single URL.`,
items: [
input.config.table("table", { label: "Table" }),
input.config.field("urlField", {
parentTable: "table",
label: "URL field",
}),
input.config.field("attachmentField", {
parentTable: "table",
label: "Attachment field",
description: "URLs will be downloaded into this field",
}),
],
});
async function convertURLsToAttachments() {
let { table, urlField, attachmentField } = settings;
if (attachmentField.type !== "multipleAttachments") {
output.text(
`${attachmentField.name} is not a attachment field.\nRun the script again when you have an attachment field.`
);
return;
}
let skipAlreadySet = await input.buttonsAsync(
"Skip attachment entries that already have files?",
[
{ label: "Yes", value: true },
{ label: "No", value: false },
]
);
let updates = [];
for (let record of (
await table.selectRecordsAsync({ fields: [urlField, attachmentField] })
).records) {
let existingAttachments = record.getCellValue(attachmentField) || [];
if (skipAlreadySet && existingAttachments.length) continue;
let urls = record.getCellValueAsString(urlField);
if (typeof urls !== "string") continue;
let attachmentsFromUrls = urls.split("\n").map((url) => ({ url }));
updates.push({
id: record.id,
fields: {
[attachmentField.id]: [
...existingAttachments,
...attachmentsFromUrls,
],
},
});
}
for (let i = 0; i < updates.length; i += 50) {
await table.updateRecordsAsync(updates.slice(i, i + 50));
}
}
await convertURLsToAttachments();
Apr 05, 2021 11:05 AM
I don’t quite know if this is what you mean…
const table = base.tables.filter( t => t.name === "<YOUR TABLE NAME>");
But this will allow you to ‘hard code’ from the available tables, so that your Automation will recognize where the attachments are. You can’t just remove the input.config.table
portion though but this should get you started.
Apr 05, 2021 04:17 PM
You can do something like this to replace the input.config section …
let settings = {}
settings.table = base.getTable("Table Name")
settings.urlField = settings.table.getField("url field name")
settings.attachmentField = settings.table.getField("attachment field name")