In this post we’re going to write a script that gets some input from the user that changes what the script does - in this case, either proceed with an operation or cancel the operation.

Imagine this is your base, perhaps your HR base holding details of your employees and the salaries they earn.

It is time for the annual review and your policy is to increase all salaries by the same rate (I’ve worked in a few companies where this always happens!). We could just update these one by one, but with a large team this will take a long time, so we’ve written a script that asks us by what percentage the salaries will increase, then applies this to the base.

Here’s the script:


let table = base.getTable('People');
let query = await table.selectRecordsAsync();

let salaryIncrease = await input.textAsync('By what percentage would you like to increase the salaries?');
let cancelOrProceed = await input.buttonsAsync(`Increasing the salaries by ${salaryIncrease}%`, ['Cancel', 'Proceed']);

if (cancelOrProceed === 'Cancel') {
    output.text('Salary increase cancelled');
} else {
    output.text('Proceeding with salary increase');
    for (let record of query.records) {
        let newSalary = record.getCellValue('Salary') * (1 + Number(salaryIncrease)/100);
        await table.updateRecordAsync(record, {
          "Salary": newSalary  
        })
        output.text(`Salary for ${record.name} updated`)
    }
}

Let’s break this down. We start by defining the table and querying it:


let table = base.getTable('People');
let query = await table.selectRecordsAsync();

We then ask the user to input the percentage they want to increase the salaries by:


let salaryIncrease = await input.textAsync('By what percentage would you like to increase the salaries?');

The user inputs a number and clicks on “Next”.

Our next line of code uses input.buttonsAsync to give the user a choice of responses:


let cancelOrProceed = await input.buttonsAsync(`Increasing the salaries by ${salaryIncrease}%`, ['Cancel', 'Proceed']);

In this case, we’re asking the user to respond by telling the script to proceed (and change all of the salaries) or cancel the operation (and leave the salaries as they are). The choice that the user makes (Cancel or Proceed) is assigned to the variable cancelOrProceed which we can now use in the remainder of the script. Two points to note here:

We now come to an extremely common device in programming of any sort - the “if/else” statement. We’ve seen a simple “if” statement in a previous post. The “if/else” statement takes this a step further and has the general form:


if (condition) {
  //  code to be executed if the condition is true
} else {
  //  code to be executed if the condition is false
}

We use the “if/else” statement to decide which bit of code to run next. If the variable cancelOrProceed is equal to Cancel then we don’t want to update the salaries and we simply output some text to say that the operation has been cancelled. If the cancelOrProceed variable is equal to any other value then the “else” code will be executed - in this case, we’ll:


else {
    output.text('Proceeding with salary increase');
    for (let record of query.records) {
        let newSalary = record.getCellValue('Salary') * (1 + Number(salaryIncrease)/100);
        await table.updateRecordAsync(record, {
          "Salary": newSalary  
        })
        output.text(`Salary for ${record.name} updated`)
    }
}

In the “else” statement, we define a new variable newSalary and set this to be the current salary multiplied by 1 + % increase. Note that when the user inputs the percentage increase value it is held as a string (even if they input a number), so we convert this to a number by using the Number() function.

Recap