requestCustomFieldsValues
requestCustomFieldsValues
Mandatory: No
Description: The requestCustomFieldsValues feature in the Client App enables the CRM Connector to request and retrieve the specified custom fields from a CRM in a required format. This ensures that the custom fields are accurately fetched and formatted according to the application's needs.
Implementation Example
// This is a part of the mandatory in-place event message handler
const processCRMConnectMessageData = async (event) => {
  if (event.origin !== CRM_CONNECT_ORIGIN) { 
      return; 
  }
  const { action, data } = event.data;
  if (action === 'requestCustomFieldsValues') {
    processRequestCustomFieldsValues(data);
  }
};
const processRequestCustomFieldsValues = async (data) => {
  const customFields = await getCustomFieldsValues(data.object);
  publishMessage(clientIframe, CRM_CONNECT_ORIGIN, 'ClientAppMessage', 'customFieldsDataResponse', customFields);
}
const getCustomFieldsValues = async (object) => {
  const voiceCustomFields = []; // Filter the voice custom fields from the object parameter (There might be empty string values so they must be filtered out)
  const digitalCustomFields = []; // Filter the digital custom fields from the object parameter (There might be empty string values so they must be filtered out)
  const customFields = {
    digital: await getCustomFieldAttributes(digitalCustomFields),
    voice: await getCustomFieldAttributes(voiceCustomFields)
  };
  // The required object MUST BE a stringified JSON object
  return JSON.stringify(customFields);
}
export const getCustomFieldAttributes = async (fieldNames) => {
  const returnedCustomFieldResult = {};
  const response = await <your_CRM_API_custom_fields_fetching_implementation>;
  if (response.status !== 200) {
    // Error handling mechanism
    return;
  }
  const customFields = []; // Retrieve the custom fields from your API Response
  if (!customFields.length) {
    return;
  }
  // Iterate through the customFields array and build the required object
  for (const field of customFields) {
    returnedCustomFieldResult[field.key] = parseCustomFieldAttributes(field);
  }
  return returnedCustomFieldResult;
}
export const parseCustomFieldAttributes = (customField) => {
  if (!customField) {
    return;
  }
  return {
    customFieldInfo: {
      // STRING: the text type, it is required to be named to STRING
      // PICKLIST: the dropdown type, it is required to be named to PICKLIST
      customFieldType: customField.type === 'text' ? 'STRING' : 'PICKLIST',
      customFieldLabel: customField.title
    }
  }
}
Message formats
CRM Connector
{ "type": "CRMConnectMessage", "action": "requestCustomFieldsValues", "data": <crmConnectorDataObject> }
CRM Connector data object format
{
  "object": {
    "digital": <array>, // String array of digital custom field names
    "fieldType": <string>, // The field type
    "voice": <array>, // String array of voice custom field names
  }
}
CRM Connector data object example
{
    "object": {
        "fieldType": "Task",
        "voice": [ "custom_voice1", "", "" ],
        "digital": [ "custom_digital1", "", "" ]
    }
}
Client Application
{ "type": "ClientAppMessage", "action": "customFieldsDataResponse", "data": <customFieldsObject> }
Custom Fields object format
{
  "digital": {
    [customDigitalFieldKey]: <customFieldObjectDetails>
  },
  "voice": {
    [customVoiceFieldKey]: <customFieldObjectDetails>
  }
}
Custom Fields object example
{
  "digital": {
    "custom_digital1": {
      "customFieldInfo": {
      "customFieldLabel": "Custom Digital Field 1",
      "customFieldType": "STRING",
      "customFieldSize": 25
      },
    }
  },
  "voice": {
    "custom_voice1": {
      "customFieldInfo": {
      "customFieldLabel": "Custom Voice Field 1",
      "customFieldType": "PICKLIST",
      "picklistDefaultValue": "Cat"
      },
      "customFieldOption": [
        { "name": "Dog", "value": "Dog" },
        { "name": "Cat", "value": "Cat" },
        { "name": "Pigeon", "value": "Pigeon" },
      ]
    }
  }
}
Custom Field object details format
{
  "customFieldInfo": {
    "customFieldLabel": <string>,
    "customFieldType": <string>,
    "customFieldSize": <number>, // Optional
    "picklistDefaultValue": <string>, // Optional
  },
  "customFieldOption": <array> // Optional (Array of <K:V> pairs)
}
Custom Field object details text example
{
  "customFieldInfo": {
    "customFieldLabel": "Custom Digital Field 1",
    "customFieldType": "STRING",
    "customFieldSize": 25 // Max text size
  },
}
Custom Field object details dropdown example
{
  "customFieldInfo": {
    "customFieldLabel": "Custom Voice Field 1",
    "customFieldType": "PICKLIST",
    "picklistDefaultValue": "Cat"
  },
  "customFieldOption": [
    { "name": "Dog", "value": "Dog" },
    { "name": "Cat", "value": "Cat" },
    { "name": "Pigeon", "value": "Pigeon" },
  ]
}
Updated 7 months ago