Skip to main content
Solved

Script - multiple select update error


Could someone share the correct way to update a multiple select field using a script?

I have one table where I receive data from form submissions. When a submission is received, I use data from the submission to update a multiple select field in a record in another table. When I manually type my field update, as below, the script accepts the value:

await table.updateRecordAsync(id,{
'Multiple Select Field': [{ name:example1 }, { name: example2 }]
})

However, when I use JSON.parse() to create an array of objects with name keys and values using my submission data I receive a 'cannot accept provided value' error:

//My raw data is brought into an automation script as an input. Here is an example of the format:
let rawData = ["example1", "example2"]

//Here, I convert my rawData into objects with keys and values
let data = rawData.map(datum => JSON.parse(JSON.parse('{ "name":"'+datum+'" }'));

//Here, I attempt to update my table using the parsed data
await table.updateRecordAsync(id,{
'Communications Preferences': data
})

Shouldn't the parsed data be equivalent to the array I've written out above? When I console log it, it gives me an array of objects just like that array. Can anyone explain why I am getting an error, or what I need to do differently? Thanks in advance!

Best answer by Rupert_Hoffsch1

Your first example would work (array of objects with key name). Keep in mind though that these need to exist as options first. So potentially your multi select doesn't have these options yet?

You can programmatically update options via updateOptionsAsync on the field. 

const multipleSelectField = table.getField('My multiple select field');
await multipleSelectField.updateOptionsAsync({
choices: [
...multipleSelectField.options.choices,
{name: 'My new choice'},
],
});

 

View original
Did this topic help you find an answer to your question?

4 replies

Your first example would work (array of objects with key name). Keep in mind though that these need to exist as options first. So potentially your multi select doesn't have these options yet?

You can programmatically update options via updateOptionsAsync on the field. 

const multipleSelectField = table.getField('My multiple select field');
await multipleSelectField.updateOptionsAsync({
choices: [
...multipleSelectField.options.choices,
{name: 'My new choice'},
],
});

 


kuovonne
Forum|alt.badge.img+17
  • Brainy
  • 5987 replies
  • October 7, 2024

@Hannah_Beekman wrote:

Shouldn't the parsed data be equivalent to the array I've written out above? When I console log it, it gives me an array of objects just like that array. Can anyone explain why I am getting an error, or what I need to do differently? Thanks in advance!


Can you share screen shots?
- The configuration of the select field(s) in question

- The result of console log for the values of in your first script.

- The result of console log for the variables in your second script.

This bit of your code looks weird.

let data = rawData.map(datum => JSON.parse(JSON.parse('{ "name":"'+datum+'" }'));

You have two nested JSON.parse() that I would not expect. The inner JSON.parse() inputs a text string and outputs an object. Thus your outter JSON.parse() is getting an object as input, when it expects a text string.

Try something like this instead.

let data = rawData.map(datum => ({ "name": datum }));

 


  • Author
  • New Participant
  • 2 replies
  • October 7, 2024
kuovonne wrote:

@Hannah_Beekman wrote:

Shouldn't the parsed data be equivalent to the array I've written out above? When I console log it, it gives me an array of objects just like that array. Can anyone explain why I am getting an error, or what I need to do differently? Thanks in advance!


Can you share screen shots?
- The configuration of the select field(s) in question

- The result of console log for the values of in your first script.

- The result of console log for the variables in your second script.

This bit of your code looks weird.

let data = rawData.map(datum => JSON.parse(JSON.parse('{ "name":"'+datum+'" }'));

You have two nested JSON.parse() that I would not expect. The inner JSON.parse() inputs a text string and outputs an object. Thus your outter JSON.parse() is getting an object as input, when it expects a text string.

Try something like this instead.

let data = rawData.map(datum => ({ "name": datum }));

 



@kuovonne wrote:

This bit of your code looks weird.

 

let data = rawData.map(datum => JSON.parse(JSON.parse('{ "name":"'+datum+'" }'));

 


Thank you for catching this! I think this was just a case of sloppy copy/paste. I should have written this:

 

let data = rawData.map(datum => JSON.parse('{ "name":"'+datum+'" }'));

 

 


  • Author
  • New Participant
  • 2 replies
  • October 7, 2024
Rupert_Hoffsch1 wrote:

Your first example would work (array of objects with key name). Keep in mind though that these need to exist as options first. So potentially your multi select doesn't have these options yet?

You can programmatically update options via updateOptionsAsync on the field. 

const multipleSelectField = table.getField('My multiple select field');
await multipleSelectField.updateOptionsAsync({
choices: [
...multipleSelectField.options.choices,
{name: 'My new choice'},
],
});

 


Thank you! I think this was the cause of the issue. I had edited one of my multiple select options, but had not reset my test record, so ended up trying update with the unedited option!


Reply