Oct 02, 2020 10:16 AM
Wanted to share this script in case it’s helpful for anyone else with a similar need. I initially came up with the idea so I could randomly review a list of records and assign single-select field values using buttons for each one. This is one of the first scripts I started with, and have come back to it with improvements as I’ve learned — thanks to the incredible help from some teammates :raised_hands: ! This version’s been edited for a general audience so that it’s hopefully adaptable to other bases easily :slightly_smiling_face:
Note, it uses the Script settings beta, and to see what it looks like in a base, here’s an example in Airtable Universe.
// SCRIPT SETTINGS
let settings = input.config({
title: '👓 Random record reviewer',
description: 'Pulls a random record, then prompts you to choose a select field option.',
items: [
input.config.table('table',{
label: 'Table'
}),
input.config.field('field1',{
label: 'Select field to EDIT ✍️',
description: 'A select field type you wish to edit',
parentTable: 'table'
}),
input.config.field('field2',{
label: 'Primary field to review 👓',
description: 'Select a field with values to display during the review',
parentTable: 'table'
}),
input.config.field('field3',{
label: 'Secondary field to review 👓',
description: 'Select a field with values to display during the review',
parentTable: 'table'
}),
input.config.view('view',{
label: 'View with records to review 👓',
description: 'Note: Filter this view based on the Select field (to show only records with empty values) if you\'d like',
parentTable: 'table'
})
]
});
// SETTINGS TO VARIABLES
let table = settings.table;
let viewName = settings.view.name
let view = settings.view;
let field1 = settings.field1;
let field2 = settings.field2;
let field3 = settings.field3;
// GATHERS RECORDS FOR RANDOM SELECTION
let listRecords = [];
let result = await view.selectRecordsAsync();
for (let record of result.records)
{
listRecords.push(
{
title: record.getCellValueAsString(field2),
notes: record.getCellValueAsString(field3),
type: record.getCellValueAsString(field1),
id: record.id,
}
);
};
while (listRecords.length > 0) {
// RANDOMIZER
let randomIndex = Math.floor(Math.random()*listRecords.length);
let randomElement = listRecords[randomIndex];
output.markdown('### Primary field:');
output.markdown(`${randomElement.title}`);
output.markdown('### Secondary field:');
output.markdown(`${randomElement.notes}`);
output.markdown('******');
output.markdown('### Select the `'+`${field1.name}`+'` for this record:');
const optionButtons = async(label, optionValue) => {
let options = field1.options.choices
let buttons = []
for(let o=0; o<options.length; o++){
let optionName = options[o]['name']
buttons.push({
label: optionName
})
}
return input.buttonsAsync('',buttons)
}
let optionChosen = await optionButtons('',field1.name);
let updateRecord = await table.updateRecordAsync(randomElement.id,{
[`${field1.name}`]: {name: optionChosen},
})
// REMOVE THE RECORD FROM THE ARRAY
listRecords.splice(randomIndex, 1);
// CLEAR THE OUTPUT FOR THE NEXT RECORD
output.clear();
}
output.markdown(`**All done! There are no more records to classify in this view **`);
Oct 20, 2020 06:18 AM
It doesnt work, i copied the base.
I want to get a random record from a specific Row, and its ID
Oct 20, 2020 09:16 AM
Hi Cesar - I just copied the base and it worked for me, could you share some details on what’s not working right or a screenshot of what you’re seeing? Happy to help make sure the script is working properly!
Oct 20, 2020 09:30 AM
Oct 20, 2020 10:04 AM
Thanks Cesar - Sorry about that! It looks like you’re not in the Script settings beta so the Scripting app isn’t recognizing the input.config()
call. If you fill out this form, we can enable it for your account though, and after that the script should work. Let me know if you run into any trouble!
Oct 26, 2020 04:10 PM
Hi @Alex.Wolfe, is it possible to call a webhook from a button but if one record has value"A", call webhook “1” but if the record has “B” value call webhook “2”? in the same button?
Oct 26, 2020 04:57 PM
Hey Cesar! If you’re using a button field then you could build in logic using an IF()
or similar function (airtable.com/formulas for more on that!) to output one URL under certain conditions, or another URL under other conditions.
So that could look something like the example formula below:
IF({field}="A","url-output-1",IF({field}="B","url-output-2"))