Skip to main content

Hi all,

Having a really rough time trying to update a (User) record through Script.

I am trying to update multiple fields, names and types below:

  • Leads: Linked Field
  • "Source": Multi-Select
  • "Marketing Consent": Multi-Select
  • "Landlord of Properties": Linked Field
  • "UTM Source": Multi-Select
  • "UTM Medium": Multi-Select
  • "UTM Campaign": Multi-Select

I have checked my personal reference, and the scripting docs, and I can't for the life of me figure out what's going on...

 

I have double-checked that the multi-select field options are present before trying to update the record, but my issue highlighted in the issue below:

Example Log of Values:

 

Example Multi-Select // uniqueLandlordProperties (2) [Object, Object] 0: Object name: "0001271" 1: Object name: "0001262" Example Linked Field* // "uniqueLandlordLeads" (3) [Object, Object, Object] 0: Object name: "rec3WbJ2Xb3rTpj2q" 1: Object name: "rec9VnDniSERZkyIo" 2: Object name: "recjbDvZZtGh3YCih" *please note that (stupidly), the record Name/primary field is the record ID.

 

This is how I'm updating:

 

// Update const dataToUpdate = {} if (uniqueLandlordProperties.length > 0) dataToUpdate["Landlord of Properties"] = uniqueLandlordProperties; if (uniqueLandlordMarketingConsents.length > 0) dataToUpdate["Marketing Consent"] = uniqueLandlordMarketingConsents; if (uniqueLandlordSources.length > 0) dataToUpdate["Source"] = uniqueLandlordSources; if (uniqueLandlordUTMSources.length > 0) dataToUpdate["UTM Source"] = uniqueLandlordUTMSources; if (uniqueLandlordUTMMediums.length > 0) dataToUpdate["UTM Medium"] = uniqueLandlordUTMMediums; if (uniqueLandlordUTMCampaigns.length > 0) dataToUpdate["UTM Campaign"] = uniqueLandlordUTMCampaigns; if (uniqueLandlordLeads.length > 0) dataToUpdate["Leads"] = uniqueLandlordLeads; await usersTable.updateRecordAsync(landlordId, dataToUpdate);

 

All fields are failing to update, and I really don't understand why.

What's going on?!?

 Full code below (sorry it's messy, I'm trying to debug...

 

// console.log("Turned Off") let inputConfig = input.config() let foundLandlordLeadIds = inputConfig.foundLandlordLeadIds let landlordId = inputConfig.landlordId let role = inputConfig.userRole[0] console.log("foundLandlordLeadIds", foundLandlordLeadIds) console.log("landlordId", landlordId) console.log("role", role) if(role === "Landlord") { let webhook = `https://hook.eu2.make.com/xfnmooxk91jxshgt9vcqb8bqjjvexutc?landlordId=${landlordId}&foundMarketingLeads=${foundLandlordLeadIds}` fetch(webhook) let leads let usersTable = base.getTable("Users") let landlord = await usersTable.selectRecordAsync(landlordId, { fields: [ "Email", "Landlord of Properties", "Marketing Consent", "Source", "UTM Source", "UTM Medium", "UTM Campaign", "Leads" ] }) let landlordProperties = landlord.getCellValue("Landlord of Properties") ? landlord.getCellValue("Landlord of Properties") : [] let landlordMarketingConsent = landlord.getCellValue("Marketing Consent") ? landlord.getCellValue("Marketing Consent") : [] let landlordSource = landlord.getCellValue("Source") ? landlord.getCellValue("Source") : [] let landlordUTMSource = landlord.getCellValue("UTM Source") ? landlord.getCellValue("UTM Source") : [] let landlordUTMMedium = landlord.getCellValue("UTM Medium") ? landlord.getCellValue("UTM Medium") : [] let landlordUTMCampaign = landlord.getCellValue("UTM Campaign") ? landlord.getCellValue("UTM Campaign") : [] let landlordLeads = landlord.getCellValue("Leads") ? landlord.getCellValue("Leads") : [] console.log("landlordLeads", landlordLeads) if(foundLandlordLeadIds && foundLandlordLeadIds.length > 0) { let foundLeadObjArray = [] for( let lead of foundLandlordLeadIds) { let obj = { id: lead, name: lead, } foundLeadObjArray.push(obj) } let leadsTable = base.getTable("Leads") let leadsRecords = await leadsTable.selectRecordsAsync({ fields: [ "Airtable Record ID", "Source", "Marketing Consent", "All Properties", "UTM Source", "UTM Medium", "UTM Campaign" ], recordIds: foundLandlordLeadIds }) let leads = leadsRecords.records console.log("leads", leads) let landlordLeadProperties = [] let landlordLeadMarketingConsents = [] let landlordLeadSources = [] let landlordLeadUTMSources = [] let landlordLeadUTMMediums = [] let landlordLeadUTMCampaigns = [] for(let lead of leads) { let leadsProperties = lead.getCellValue("All Properties") let leadsMarketingConsents = lead.getCellValue("Marketing Consent") let leadsMarketingSources = lead.getCellValue("Source") let leadsUTMSources = lead.getCellValue("UTM Source") let leadsUTMMediums = lead.getCellValue("UTM Medium") let leadsUTMCampaigns = lead.getCellValue("UTM Campaign") leadsProperties && leadsProperties.length > 0 ? leadsProperties.forEach(val => landlordLeadProperties.push(val)) : null; leadsMarketingConsents && leadsMarketingConsents.length > 0 ? leadsMarketingConsents.forEach(val => landlordLeadMarketingConsents.push(val)) : null; leadsMarketingSources && leadsMarketingSources.length > 0 ? leadsMarketingSources.forEach(val => landlordLeadSources.push(val)) : null; leadsUTMSources && leadsUTMSources.length > 0 ? leadsUTMSources.forEach(val => landlordLeadUTMSources.push(val)) : null; leadsUTMMediums && leadsUTMMediums.length > 0 ? leadsUTMMediums.forEach(val => landlordLeadUTMMediums.push(val)) : null; leadsUTMCampaigns && leadsUTMCampaigns.length > 0 ? leadsUTMCampaigns.forEach(val => landlordLeadUTMCampaigns.push(val)) : null; } console.log("landlordLeadProperties", landlordLeadProperties) console.log("landlordLeadMarketingConsents", landlordLeadMarketingConsents) console.log("landlordLeadSources", landlordLeadSources) console.log("landlordLeadUTMSources", landlordLeadUTMSources) console.log("landlordLeadUTMMediums", landlordLeadUTMMediums) console.log("landlordLeadUTMCampaigns", landlordLeadUTMCampaigns) console.log("landlordProperties", landlordProperties) console.log("landlordMarketingConsent", landlordMarketingConsent) console.log("landlordSource", landlordSource) console.log("landlordUTMSource", landlordUTMSource) console.log("landlordUTMMedium", landlordUTMMedium) console.log("landlordUTMCampaign", landlordUTMCampaign) let uniqueLandlordProperties = deduplicateAndStrip([landlordLeadProperties, landlordProperties]) let uniqueLandlordMarketingConsents = deduplicateAndStrip([landlordLeadMarketingConsents, landlordMarketingConsent]) let uniqueLandlordSources = deduplicateAndStrip([landlordLeadSources, landlordSource]) let uniqueLandlordUTMSources = deduplicateAndStrip([landlordLeadUTMSources, landlordUTMSource]) let uniqueLandlordUTMMediums = deduplicateAndStrip([landlordLeadUTMMediums, landlordUTMMedium]) let uniqueLandlordUTMCampaigns = deduplicateAndStrip([landlordLeadUTMCampaigns, landlordUTMCampaign]) let uniqueLandlordLeads = deduplicateAndStrip([foundLeadObjArray, landlordLeads]) console.log("uniqueLandlordProperties", uniqueLandlordProperties) console.log("uniqueLandlordMarketingConsents", uniqueLandlordMarketingConsents) console.log("uniqueLandlordSources", uniqueLandlordSources) console.log("uniqueLandlordUTMSources", uniqueLandlordUTMSources) console.log("uniqueLandlordUTMMediums", uniqueLandlordUTMMediums) console.log("uniqueLandlordUTMCampaigns", uniqueLandlordUTMCampaigns) console.log("uniqueLandlordLeads", uniqueLandlordLeads) let fields = [] let propertiesField = usersTable.getField("Landlord of Properties") let marketingConsentField = usersTable.getField("Landlord of Properties") let sourceField = usersTable.getField("Source") let utmSourceField = usersTable.getField("UTM Source") let utmMediumField = usersTable.getField("UTM Medium") let utmCampaignField = usersTable.getField("UTM Campaign") let leadsField = usersTable.getField("UTM Campaign") console.log("propertiesField", propertiesField) console.log("marketingConsentField", marketingConsentField) console.log("sourceField", sourceField) console.log("utmSourceField", utmSourceField) console.log("utmMediumField", utmMediumField) console.log("utmCampaignField", utmCampaignField) console.log("leadsField", leadsField) // await usersTable.updateRecordAsync(landlordId, { // "Landlord of Properties": uniqueLandlordProperties, // "Marketing Consent": uniqueLandlordMarketingConsents, // "Source": uniqueLandlordSources, // "UTM Source": uniqueLandlordUTMSources, // "UTM Medium": uniqueLandlordUTMMediums, // "UTM Campaign": uniqueLandlordUTMCampaigns, // "Leads": uniqueLandlordLeads // }) const dataToUpdate = {} if (uniqueLandlordProperties.length > 0) dataToUpdate["Landlord of Properties"] = uniqueLandlordProperties; if (uniqueLandlordMarketingConsents.length > 0) dataToUpdate["Marketing Consent"] = uniqueLandlordMarketingConsents; if (uniqueLandlordSources.length > 0) dataToUpdate["Source"] = uniqueLandlordSources; if (uniqueLandlordUTMSources.length > 0) dataToUpdate["UTM Source"] = uniqueLandlordUTMSources; if (uniqueLandlordUTMMediums.length > 0) dataToUpdate["UTM Medium"] = uniqueLandlordUTMMediums; if (uniqueLandlordUTMCampaigns.length > 0) dataToUpdate["UTM Campaign"] = uniqueLandlordUTMCampaigns; if (uniqueLandlordLeads.length > 0) dataToUpdate["Leads"] = uniqueLandlordLeads; await usersTable.updateRecordAsync(landlordId, dataToUpdate); } } // // Return Array of Full Objects // // function deduplicateAndStrip(arrays) { // // const combinedArray = arrays.flat(); // // const deduplicatedMap = combinedArray.reduce((map, obj) => { // // if (!map.has(obj.name)) { // // map.set(obj.name, obj); // // } // // return map; // // }, new Map()); // // return Array.from(deduplicatedMap.values()); // // } // Return Array of Objects with Name Value function deduplicateAndStrip(arrays) { const combinedArray = arrays.flat(); const deduplicatedMap = combinedArray.reduce((map, obj) => { if (!map.has(obj.name)) { map.set(obj.name, { name: obj.name }); // Store only the name property } return map; }, new Map()); return Array.from(deduplicatedMap.values()); } // // Return Array of Strings // // function deduplicateAndStrip(arrays) { // // const combinedArray = arrays.flat(); // // const deduplicatedMap = combinedArray.reduce((map, obj) => { // // if (!map.has(obj.name)) { // // map.set(obj.name, obj.name); // // } // // return map; // // }, new Map()); // // return Array.from(deduplicatedMap.values()); // // }

 

Hmm could you provide access to an example base with the script set up already?  It'd make it a lot easier to help you with troubleshooting stuff

I'm also curious what shows up when you do a console log of `dataToUpdate`