- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎Nov 28, 2023 11:54 AM - edited ‎Nov 28, 2023 12:17 PM
Title.
I am still getting the hang of scripting, Airtable, and scripting for Airtable. Goal of script:
- User chooses up to two options in multi-select field.
- Those multi-select options are 1:1 with the names of the records that are being linked. (IDs are included regardless).
- Link those up to two records from the Signature Hardware Vendor multi-select field into the Vendor(s) linked records field.
Ill gladly take hints on updating or fixing my bad code leading up to the portion in question, but I can confirm everything shown below is working BESIDES the linking of two different records.
const { recordId , QASubtype, SHVendor} = input.config();
const table = base.getTable('tblFvUDsFR14aJ8Nu');
if (QASubtype==="Signature Hardware Quick Add"){
await table.updateRecordAsync(recordId,{
"Manufacturer(s)": [{ id: 'recBUCS8K6yzHS1Nd' }]
});
if (SHVendor==="Signature_Hardware - 1481"){
await table.updateRecordAsync(recordId,{
"Vendor(s)": [{ id: 'recyW5pRLYxqFIMkt' }]
});
};
if (SHVendor==="All Ferguson (Group)"){
await table.updateRecordAsync(recordId,{
"Vendor(s)": [{ id: 'recSIDlhGWnWdlpdv' }]
});
};
if (SHVendor==="Signature_Hardware - 1481, All Ferguson (Group)" || SHVendor==="All Ferguson (Group), Signature_Hardware - 1481"){
table.updateRecordAsync(recordId,{
"Vendor(s)": [{ id: 'recyW5pRLYxqFIMkt' }]
});
await table.updateRecordAsync(recordId,{
"Vendor(s)":[
...recordId.GetCellValue('Vendor(s)'),
{ id: 'recSIDlhGWnWdlpdv' }
]
});
};
};
Solved! Go to Solution.
Accepted Solutions

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎Dec 01, 2023 07:07 PM
That is because it does not follow the format when there are multiple records.
For multiple records, vendorId should be like this.
const { recordId, QASubtype, SHVendor, Mfr, VCVendor, BCUrgent, OPriority } = input.config();
const table = base.getTable('tblFvUDsFR14aJ8Nu');
let vendorId, seriesName, manufacturerId, priorityName;
if (QASubtype === "Signature Hardware Quick Add") {
manufacturerId = 'recBUCS8K6yzHS1Nd'
if (String(SHVendor) === "Signature_Hardware - 1481") {
vendorId = [{id: 'recyW5pRLYxqFIMkt'}];
} else if (String(SHVendor) === "All Ferguson (Group)") {
vendorId = [{id: 'recSIDlhGWnWdlpdv'}];
} else if (String(SHVendor) === "Signature_Hardware - 1481,All Ferguson (Group)" || String(SHVendor) === "All Ferguson (Group),Signature_Hardware - 1481") {
vendorId = [{id: 'recyW5pRLYxqFIMkt'}, {id: 'recSIDlhGWnWdlpdv'}];
}
if (manufacturerId) {
await table.updateRecordAsync(recordId, { "Manufacturer(s)": [{ id: manufacturerId }] });
}
if (vendorId) {
await table.updateRecordAsync(recordId, { "Vendor(s)": vendorId });
}
}

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎Nov 28, 2023 03:55 PM
Do you want to do it like this?
const { recordId , QASubtype, SHVendor} = input.config();
const table = base.getTable('tblFvUDsFR14aJ8Nu');
if (QASubtype==="Signature Hardware Quick Add"){
await table.updateRecordAsync(recordId,{
"Manufacturer(s)": [{ id: 'recBUCS8K6yzHS1Nd' }]
});
if (SHVendor==="Signature_Hardware - 1481"){
await table.updateRecordAsync(recordId,{
"Vendor(s)": [{ id: 'recyW5pRLYxqFIMkt' }]
});
};
if (SHVendor==="All Ferguson (Group)"){
await table.updateRecordAsync(recordId,{
"Vendor(s)": [{ id: 'recSIDlhGWnWdlpdv' }]
});
};
if (SHVendor==="Signature_Hardware - 1481, All Ferguson (Group)" || SHVendor==="All Ferguson (Group), Signature_Hardware - 1481"){
await table.updateRecordAsync(recordId,{
"Vendor(s)": [{ id: 'recyW5pRLYxqFIMkt' }, { id: 'recSIDlhGWnWdlpdv' }]
});
};
};
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎Nov 29, 2023 10:49 AM - edited ‎Nov 29, 2023 11:54 AM
Sho,
I actually tried to run that originally and got nothing. I am discovering I made an error both in my post and in my solution, Vendor(s) is not linking no matter which value it is. Manufacturer(s) fills in, then nothing else.
When ran onto this record, the second one listed here, we see it adds "Signature Hardware" as the Manufacturer(s), but not "Signature_Hardware - 1481" as the Vendor. So as of right now neither my version or yours is working on "Vendor(s)".
Also confirmed the ID:
We determined one of the errors was lack of string (), however this and a small overhaul has still left us with the double case still not working.
const { recordId, QASubtype, SHVendor, Mfr, VCVendor } = input.config();
const table = base.getTable('tblFvUDsFR14aJ8Nu');
let vendorId;
if (QASubtype === "Signature Hardware Quick Add") {
if (String(SHVendor) === "Signature_Hardware - 1481") {
vendorId = 'recyW5pRLYxqFIMkt';
} else if (String(SHVendor) === "All Ferguson (Group)") {
vendorId = 'recSIDlhGWnWdlpdv';
} else if (String(SHVendor) === "Signature_Hardware - 1481, All Ferguson (Group)" || String(SHVendor) === "All Ferguson (Group), Signature_Hardware - 1481") {
vendorId = ['recyW5pRLYxqFIMkt', 'recSIDlhGWnWdlpdv'];
}
if (vendorId) {
await table.updateRecordAsync(recordId, { "Vendor(s)": [{ id: vendorId }] });
}
}

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎Nov 29, 2023 03:19 PM
Are errors displayed? If there is an error indicated, tell me about it.
Updates to linked record fields must follow the field's write format.
Array<{ id: string }>
It needs to be an array of objects
"Vendor(s)": [{ id: 'recyW5pRLYxqFIMkt' }, { id: 'recSIDlhGWnWdlpdv' }]
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎Nov 30, 2023 07:11 AM
No errors - just for some reason it refuse to accept two values.
The field is set to accept multiple values, I can do it by hand, and as far as we can tell the way the script is written should satisfy all requirements.

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎Nov 30, 2023 03:46 PM
It appears to be an IF statement issue.
Try running
console.log(String(SHVendor));
does it match?
If SHVendor is a Lookup field, the separator should be "," and not contain spaces.
} else if (String(SHVendor) === "Signature_Hardware - 1481,All Ferguson (Group)" || String(SHVendor) === "All Ferguson (Group),Signature_Hardware - 1481") {
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎Dec 01, 2023 04:12 AM
Good call on this. Strangely the output was showing a space after the comma so I emulated the same. Turns out, no space. New error though!
Error: Field "fldl2gccVFlUGyvn1" cannot accept the provided value.
at main on line 19
Line 19 is of course the line where the record field is being set to the array. The current code:
const { recordId, QASubtype, SHVendor, Mfr, VCVendor, BCUrgent, OPriority } = input.config();
const table = base.getTable('tblFvUDsFR14aJ8Nu');
let vendorId, seriesName, manufacturerId, priorityName;
if (QASubtype === "Signature Hardware Quick Add") {
manufacturerId = 'recBUCS8K6yzHS1Nd'
if (String(SHVendor) === "Signature_Hardware - 1481") {
vendorId = 'recyW5pRLYxqFIMkt';
} else if (String(SHVendor) === "All Ferguson (Group)") {
vendorId = 'recSIDlhGWnWdlpdv';
} else if (String(SHVendor) === "Signature_Hardware - 1481,All Ferguson (Group)" || String(SHVendor) === "All Ferguson (Group),Signature_Hardware - 1481") {
vendorId = ['recyW5pRLYxqFIMkt', 'recSIDlhGWnWdlpdv'];
}
if (manufacturerId) {
await table.updateRecordAsync(recordId, { "Manufacturer(s)": [{ id: manufacturerId }] });
}
if (vendorId) {
await table.updateRecordAsync(recordId, { "Vendor(s)": [{ id: vendorId }] });
}
}

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎Dec 01, 2023 07:07 PM
That is because it does not follow the format when there are multiple records.
For multiple records, vendorId should be like this.
const { recordId, QASubtype, SHVendor, Mfr, VCVendor, BCUrgent, OPriority } = input.config();
const table = base.getTable('tblFvUDsFR14aJ8Nu');
let vendorId, seriesName, manufacturerId, priorityName;
if (QASubtype === "Signature Hardware Quick Add") {
manufacturerId = 'recBUCS8K6yzHS1Nd'
if (String(SHVendor) === "Signature_Hardware - 1481") {
vendorId = [{id: 'recyW5pRLYxqFIMkt'}];
} else if (String(SHVendor) === "All Ferguson (Group)") {
vendorId = [{id: 'recSIDlhGWnWdlpdv'}];
} else if (String(SHVendor) === "Signature_Hardware - 1481,All Ferguson (Group)" || String(SHVendor) === "All Ferguson (Group),Signature_Hardware - 1481") {
vendorId = [{id: 'recyW5pRLYxqFIMkt'}, {id: 'recSIDlhGWnWdlpdv'}];
}
if (manufacturerId) {
await table.updateRecordAsync(recordId, { "Manufacturer(s)": [{ id: manufacturerId }] });
}
if (vendorId) {
await table.updateRecordAsync(recordId, { "Vendor(s)": vendorId });
}
}
