Help

The Community will be temporarily unavailable starting on Friday February 28. We’ll be back as soon as we can! To learn more, check out our Announcements blog post.

Does TypeCast only work on Create? What about Update?

Topic Labels: API
3592 1
cancel
Showing results for 
Search instead for 
Did you mean: 
Lean_Junio
4 - Data Explorer
4 - Data Explorer

Does typecast only work on .create? What if I want to update a mule-select field in update?
base('Sites').update([ 79 { 1 "id": recId, 2 "fields": { 3 "siteStreetAddress": {!!placeDetailsObj.street_number ? placeDetailsObj.street_number + ' ' : ''}{!!placeDetailsObj.route ? placeDetailsObj.route : ‘’}, 4 "siteCounty": {!!placeDetailsObj.administrative_area_level_2 ? placeDetailsObj.administrative_area_level_2 : ''}`, 5 "siteState": `{!!placeDetailsObj.administrative_area_level_1 ? placeDetailsObj.administrative_area_level_1 : ‘’}, 6 "siteCity": {!!placeDetailsObj.locality ? placeDetailsObj.locality : ''}`, 7 "siteZipExt": `{!!placeDetailsObj.postal_code_suffix ? placeDetailsObj.postal_code_suffix : ‘’}, 8 "siteZip": {!!placeDetailsObj.postal_code ? placeDetailsObj.postal_code : ''}`, 9 "siteNeighborhood": `{!!placeDetailsObj.neighborhood ? placeDetailsObj.neighborhood : ‘’}, 10 "siteGmapsUrl": ${!!placeDetailsObj.mapsUrl ? placeDetailsObj.mapsUrl : ‘’}, 11 "lat": placeDetailsObj.location.lat, 12 "lng": placeDetailsObj.location.lng, 13 "allGmapsTypes": placeDetailsObj.types 14 } 15 } 16 ], {typecast: true}, (err, record) => { 17 18 if (err) { 19 console.error(err); 20 return; 21 } 22 23 console.log(record.get('siteName')); 24 });

1 Reply 1
Mike_Pennisi
7 - App Architect
7 - App Architect

Hi, @Lean_Junio,

Yes, typecast also works when updating records.

Airtable’s API documentation for the “update” command states:

Automatic data conversion for update actions can be enabled via typecast parameter. See create record for details.

I verified this using the airtable.js library. Here’s my Node.js script:

'use strict';
var Airtable = require('airtable');

var apiKey = 'replace this string with an authentic API key';
var baseID = 'replace this string with an authentic Base ID';
var recordID = 'replace this string with an authentic record ID';

var base = new Airtable({apiKey: apiKey}).base(baseID);

base('SMS').update([
  {
    id: recordID,
    fields: {
      'my text field': '45'
    }
  }
], {typecast: false}, function(err, records) {
  if (err) {
    console.error(err);
    return;
  }
  console.log('Success!');
});

(By the way: you can improve the formatting of code blocks here on the forum by indenting the code by four spaces.)

I replaced the strings which start “replace this value” with authentic values and ran the script. The code reached the console.error statement and printed the following error:

AirtableError {
  error: 'INVALID_VALUE_FOR_COLUMN',
  message: 'Field "my text field" cannot accept the provided value',
  statusCode: 422
}

That’s because in my Base, the field named “my text field” is a text field. Airtable rejected my attempt to set it to a string value (even though the string describes a number).

But once I enabled type coercion by changing {typecast: false} to {typecast: true}, then the script reached the console.log statement and printed:

Success!

…and the value of the targeted cell was updated to the number 45 (because Airtable coerced the string value into a number value).