Skip to main content

Hello, is it possible to create a script that automates an application I already have? Essentially I have an application that will convert a URL to an attachment, but would like to have it run on a script instead of having to click the button multiple times a day to get it to run.


Code for the application currently is:


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();

Be the first to reply!

Reply