From 00adc9789d14420c1fdb87ecfaaef97ee49fac62 Mon Sep 17 00:00:00 2001
From: Gabriel Carleton-Barnes <15103-gcb@users.noreply.drupalcode.org>
Date: Thu, 10 Nov 2022 13:04:18 -0500
Subject: [PATCH] Issue #3165707 by gcb, AaronBauman, olivier.bouwman: Allow
 for multiple items when mapping related term strings

---
 .../RelatedTermString.php                     |  52 +-
 .../src/SalesforceMappingFieldPluginBase.php  |   2 +
 ...ontent.field_salesforce_test_tax_singl.yml |  28 +
 ...e.node.field_salesforce_test_tax_singl.yml |  19 +
 ...apping.salesforce_mapping.test_mapping.yml |  13 +
 .../tests/src/Functional/PushParamsTest.php   |  53 ++
 src/Tests/objectDescribe.json                 | 536 +++++++++++++++---
 7 files changed, 598 insertions(+), 105 deletions(-)
 create mode 100644 modules/salesforce_mapping/tests/modules/salesforce_mapping_test/config/install/field.field.node.salesforce_mapping_test_content.field_salesforce_test_tax_singl.yml
 create mode 100644 modules/salesforce_mapping/tests/modules/salesforce_mapping_test/config/install/field.storage.node.field_salesforce_test_tax_singl.yml

diff --git a/modules/salesforce_mapping/src/Plugin/SalesforceMappingField/RelatedTermString.php b/modules/salesforce_mapping/src/Plugin/SalesforceMappingField/RelatedTermString.php
index 01a1019a..2d3d5052 100644
--- a/modules/salesforce_mapping/src/Plugin/SalesforceMappingField/RelatedTermString.php
+++ b/modules/salesforce_mapping/src/Plugin/SalesforceMappingField/RelatedTermString.php
@@ -42,7 +42,7 @@ class RelatedTermString extends SalesforceMappingFieldPluginBase {
         '#options' => $options,
         '#empty_option' => $this->t('- Select -'),
         '#default_value' => $this->config('drupal_field_value'),
-        '#description' => $this->t('Select a taxonomy reference field.<br />If more than one term is referenced, the term at delta zero will be used.<br />A taxonomy reference field will be used to sync to the term name.<br />If a term with the given string does not exist one will be created.'),
+        '#description' => $this->t('Select a taxonomy reference field.<br />A taxonomy reference field will be used to sync to the term name.<br />If a term with the given string does not exist one will be created.'),
       ];
     }
     return $pluginForm;
@@ -71,7 +71,10 @@ class RelatedTermString extends SalesforceMappingFieldPluginBase {
     }
 
     // Map the term name to the salesforce field.
-    return $field->entity->getName();
+    foreach ($field->referencedEntities() as $referencedEntity) {
+      $referencedEntities[] = $referencedEntity->getName();
+    }
+    return $referencedEntities;
   }
 
   /**
@@ -98,29 +101,38 @@ class RelatedTermString extends SalesforceMappingFieldPluginBase {
     // Get the appropriate vocab from the field settings.
     $vocabs = $instance->getSetting('handler_settings')['target_bundles'];
 
-    // Look for a term that matches the string in the salesforce field.
-    $query = \Drupal::entityQuery('taxonomy_term');
-    $query->condition('vid', $vocabs, 'IN');
-    $query->condition('name', $value);
-    $tids = $query->execute();
-
-    if (!empty($tids)) {
-      $term_id = reset($tids);
+    if (empty($vocabs)) {
+      return;
     }
 
-    // If we cant find an existing term, create a new one.
-    if (empty($term_id)) {
-      $vocab = reset($vocabs);
+    // If this is a multi-value field, split the value from Salesforce into parts.
+    $field_values = explode(";", $value);
+
+    foreach ($field_values as $field_value) {
+      // Look for a term that matches the string in the salesforce field.
+      $query = \Drupal::entityQuery('taxonomy_term');
+      $query->condition('vid', $vocabs, 'IN');
+      $query->condition('name', $field_value);
+      $tids = $query->execute();
 
-      $term = Term::create([
-        'name' => $value,
-        'vid' => $vocab,
-      ]);
-      $term->save();
-      $term_id = $term->id();
+      if (!empty($tids)) {
+        $term_ids[] = reset($tids);
+      }
+
+      // If we cant find an existing term, create a new one.
+      if (empty($tids)) {
+        $vocab = reset($vocabs);
+
+        $term = Term::create([
+          'name' => $field_value,
+          'vid' => $vocab,
+        ]);
+        $term->save();
+        $term_ids[] = $term->id();
+      }
     }
 
-    return $term_id;
+    return $term_ids;
   }
 
   /**
diff --git a/modules/salesforce_mapping/src/SalesforceMappingFieldPluginBase.php b/modules/salesforce_mapping/src/SalesforceMappingFieldPluginBase.php
index 69f4b5d5..5f84b7f5 100644
--- a/modules/salesforce_mapping/src/SalesforceMappingFieldPluginBase.php
+++ b/modules/salesforce_mapping/src/SalesforceMappingFieldPluginBase.php
@@ -218,6 +218,8 @@ abstract class SalesforceMappingFieldPluginBase extends PluginBase implements Sa
         $value = (int) $value;
         break;
 
+      // Picklists are single-value, but can submit their values as arrays.
+      case 'picklist':
       case 'multipicklist':
         if (is_array($value)) {
           $value = implode(';', $value);
diff --git a/modules/salesforce_mapping/tests/modules/salesforce_mapping_test/config/install/field.field.node.salesforce_mapping_test_content.field_salesforce_test_tax_singl.yml b/modules/salesforce_mapping/tests/modules/salesforce_mapping_test/config/install/field.field.node.salesforce_mapping_test_content.field_salesforce_test_tax_singl.yml
new file mode 100644
index 00000000..3263f2b7
--- /dev/null
+++ b/modules/salesforce_mapping/tests/modules/salesforce_mapping_test/config/install/field.field.node.salesforce_mapping_test_content.field_salesforce_test_tax_singl.yml
@@ -0,0 +1,28 @@
+langcode: en
+status: true
+dependencies:
+  config:
+    - field.storage.node.field_salesforce_test_tax_singl
+    - node.type.salesforce_mapping_test_content
+    - taxonomy.vocabulary.salesforce_test_vocabulary
+id: node.salesforce_mapping_test_content.field_salesforce_test_tax_singl
+field_name: field_salesforce_test_tax_singl
+entity_type: node
+bundle: salesforce_mapping_test_content
+label: 'Salesforce Test Taxonomy Ref - single value'
+description: ''
+required: false
+translatable: false
+default_value: {  }
+default_value_callback: ''
+settings:
+  handler: 'default:taxonomy_term'
+  handler_settings:
+    target_bundles:
+      salesforce_test_vocabulary: salesforce_test_vocabulary
+    sort:
+      field: name
+      direction: asc
+    auto_create: false
+    auto_create_bundle: ''
+field_type: entity_reference
diff --git a/modules/salesforce_mapping/tests/modules/salesforce_mapping_test/config/install/field.storage.node.field_salesforce_test_tax_singl.yml b/modules/salesforce_mapping/tests/modules/salesforce_mapping_test/config/install/field.storage.node.field_salesforce_test_tax_singl.yml
new file mode 100644
index 00000000..e385e4cd
--- /dev/null
+++ b/modules/salesforce_mapping/tests/modules/salesforce_mapping_test/config/install/field.storage.node.field_salesforce_test_tax_singl.yml
@@ -0,0 +1,19 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - node
+    - taxonomy
+id: node.field_salesforce_test_tax_singl
+field_name: field_salesforce_test_tax_singl
+entity_type: node
+type: entity_reference
+settings:
+  target_type: taxonomy_term
+module: core
+locked: false
+cardinality: 1
+translatable: true
+indexes: {  }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/modules/salesforce_mapping/tests/modules/salesforce_mapping_test/config/install/salesforce_mapping.salesforce_mapping.test_mapping.yml b/modules/salesforce_mapping/tests/modules/salesforce_mapping_test/config/install/salesforce_mapping.salesforce_mapping.test_mapping.yml
index dca63494..ed07ad6b 100644
--- a/modules/salesforce_mapping/tests/modules/salesforce_mapping_test/config/install/salesforce_mapping.salesforce_mapping.test_mapping.yml
+++ b/modules/salesforce_mapping/tests/modules/salesforce_mapping_test/config/install/salesforce_mapping.salesforce_mapping.test_mapping.yml
@@ -105,6 +105,19 @@ field_mappings:
     direction: sync
     description: ''
     id: 9
+  -
+    drupal_field_type: RelatedTermString
+    drupal_field_value: field_salesforce_test_tax_ref
+    salesforce_field: d5__Test_Multipicklist__c
+    direction: drupal_sf
+    id: 10
+  -
+    drupal_field_type: RelatedTermString
+    drupal_field_value: field_salesforce_test_tax_singl
+    salesforce_field: LeadSource
+    direction: drupal_sf
+    id: 11
+
 push_limit: 0
 push_retries: 3
 push_frequency: 0
diff --git a/modules/salesforce_mapping/tests/src/Functional/PushParamsTest.php b/modules/salesforce_mapping/tests/src/Functional/PushParamsTest.php
index 89341f6b..50092ce0 100644
--- a/modules/salesforce_mapping/tests/src/Functional/PushParamsTest.php
+++ b/modules/salesforce_mapping/tests/src/Functional/PushParamsTest.php
@@ -9,6 +9,7 @@ use Drupal\node\Entity\Node;
 use Drupal\salesforce_mapping\Entity\MappedObject;
 use Drupal\salesforce_mapping\Entity\SalesforceMapping;
 use Drupal\salesforce_mapping\PushParams;
+use Drupal\taxonomy\Entity\Term;
 use Drupal\Tests\BrowserTestBase;
 use DateTime;
 
@@ -97,6 +98,8 @@ class PushParamsTest extends BrowserTestBase {
       'Description' => 'https://example.com',
       'd5__Multipicklist_Test__c' => 'Value 1;Value 2;Value 3',
       'Department' => '<p>Sample formatted text</p>',
+      'd5__Test_Multipicklist__c' => NULL,
+      'LeadSource' => NULL,
     ];
     $actual = $pushParams->getParams();
     ksort($actual);
@@ -151,6 +154,8 @@ class PushParamsTest extends BrowserTestBase {
       'Description' => 'https://example.com',
       'd5__Multipicklist_Test__c' => 'Value 1;Value 2;Value 3',
       'Department' => null,
+      'd5__Test_Multipicklist__c' => '',
+      'LeadSource' => '',
     ];
     $actual = $pushParams->getParams();
     ksort($actual);
@@ -158,4 +163,52 @@ class PushParamsTest extends BrowserTestBase {
     $this->assertEquals($expected, $actual);
   }
 
+  /**
+   * Test taxonomy reference values.
+   */
+  public function testTaxRef() {
+    /** @var SalesforceMapping $mapping */
+    $mapping = SalesforceMapping::load('test_mapping');
+    $vocab = 'salesforce_test_vocabulary';
+    /** @var Term $term1 */
+    $term1 = Term::create([
+      'name' => $this->randomMachineName(),
+      'vid' => $vocab,
+    ]);
+    $term1->save();
+    /** @var Term $term2 */
+    $term2 = Term::create([
+      'name' => $this->randomMachineName(),
+      'vid' => $vocab,
+    ]);
+    $term2->save();
+
+    // Entity 1 is the target reference.
+    $entity1 = Node::create([
+        'type' => 'salesforce_mapping_test_content',
+        'title' => 'Test Example',
+        'field_salesforce_test_tax_ref' => [$term1->id(), $term2->id()],
+        'field_salesforce_test_tax_singl' => [$term1->id()],
+    ]);
+    $entity1->save();
+
+    // Create a PushParams and assert it's created as we expect.
+    $pushParams = new PushParams($mapping, $entity1);
+    $expected = [
+      'Birthdate' => NULL,
+      'd5__Do_Not_Mail__c' => FALSE,
+      'd5__Multipicklist_Test__c' => "",
+      'd5__Test_Multipicklist__c' => $term1->getName() . ';' . $term2->getName(),
+      'Description' => NULL,
+      'Email' => '',
+      'FirstName' => 'SALESFORCE TEST',
+      'LeadSource' => $term1->getName(),
+      'RecordTypeId' => '012i0000001B15mAAC',
+      'ReportsToId' => NULL,
+    ];
+    $actual = $pushParams->getParams();
+    ksort($actual);
+    ksort($expected);
+    $this->assertEquals($expected, $actual);
+  }
 }
diff --git a/src/Tests/objectDescribe.json b/src/Tests/objectDescribe.json
index bb22337b..d1149393 100644
--- a/src/Tests/objectDescribe.json
+++ b/src/Tests/objectDescribe.json
@@ -3,6 +3,7 @@
   "fields": {
     "Id": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 18,
       "calculated": false,
@@ -25,6 +26,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -60,6 +62,7 @@
     },
     "IsDeleted": {
       "aggregatable": false,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -82,6 +85,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -117,6 +121,7 @@
     },
     "MasterRecordId": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 18,
       "calculated": false,
@@ -139,6 +144,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -176,6 +182,7 @@
     },
     "AccountId": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 18,
       "calculated": false,
@@ -198,6 +205,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -235,6 +243,7 @@
     },
     "LastName": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 240,
       "calculated": false,
@@ -257,6 +266,7 @@
       "extraTypeInfo": "personname",
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -292,6 +302,7 @@
     },
     "FirstName": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 120,
       "calculated": false,
@@ -314,6 +325,7 @@
       "extraTypeInfo": "personname",
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -349,6 +361,7 @@
     },
     "Salutation": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 120,
       "calculated": false,
@@ -371,6 +384,7 @@
       "extraTypeInfo": "personname",
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -442,6 +456,7 @@
     },
     "Name": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 363,
       "calculated": false,
@@ -464,6 +479,7 @@
       "extraTypeInfo": "personname",
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -499,6 +515,7 @@
     },
     "RecordTypeId": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 18,
       "calculated": false,
@@ -521,6 +538,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -558,6 +576,7 @@
     },
     "OtherStreet": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 765,
       "calculated": false,
@@ -580,6 +599,7 @@
       "extraTypeInfo": "plaintextarea",
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -615,6 +635,7 @@
     },
     "OtherCity": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 120,
       "calculated": false,
@@ -637,6 +658,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -672,6 +694,7 @@
     },
     "OtherState": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 240,
       "calculated": false,
@@ -694,12 +717,13 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
       "idLookup": false,
       "inlineHelpText": null,
-      "label": "Other State\\/Province",
+      "label": "Other State\/Province",
       "length": 80,
       "mask": null,
       "maskType": null,
@@ -729,6 +753,7 @@
     },
     "OtherPostalCode": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 60,
       "calculated": false,
@@ -751,12 +776,13 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
       "idLookup": false,
       "inlineHelpText": null,
-      "label": "Other Zip\\/Postal Code",
+      "label": "Other Zip\/Postal Code",
       "length": 20,
       "mask": null,
       "maskType": null,
@@ -786,6 +812,7 @@
     },
     "OtherCountry": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 240,
       "calculated": false,
@@ -808,6 +835,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -843,6 +871,7 @@
     },
     "OtherLatitude": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -865,6 +894,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": false,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -900,6 +930,7 @@
     },
     "OtherLongitude": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -922,6 +953,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": false,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -957,6 +989,7 @@
     },
     "OtherGeocodeAccuracy": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 120,
       "calculated": false,
@@ -979,6 +1012,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -1092,6 +1126,7 @@
     },
     "OtherAddress": {
       "aggregatable": false,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -1114,6 +1149,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": false,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -1149,6 +1185,7 @@
     },
     "MailingStreet": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 765,
       "calculated": false,
@@ -1171,6 +1208,7 @@
       "extraTypeInfo": "plaintextarea",
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -1206,6 +1244,7 @@
     },
     "MailingCity": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 120,
       "calculated": false,
@@ -1228,6 +1267,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -1263,6 +1303,7 @@
     },
     "MailingState": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 240,
       "calculated": false,
@@ -1285,12 +1326,13 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
       "idLookup": false,
       "inlineHelpText": null,
-      "label": "Mailing State\\/Province",
+      "label": "Mailing State\/Province",
       "length": 80,
       "mask": null,
       "maskType": null,
@@ -1320,6 +1362,7 @@
     },
     "MailingPostalCode": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 60,
       "calculated": false,
@@ -1342,12 +1385,13 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
       "idLookup": false,
       "inlineHelpText": null,
-      "label": "Mailing Zip\\/Postal Code",
+      "label": "Mailing Zip\/Postal Code",
       "length": 20,
       "mask": null,
       "maskType": null,
@@ -1377,6 +1421,7 @@
     },
     "MailingCountry": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 240,
       "calculated": false,
@@ -1399,6 +1444,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -1434,6 +1480,7 @@
     },
     "MailingLatitude": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -1456,6 +1503,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": false,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -1491,6 +1539,7 @@
     },
     "MailingLongitude": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -1513,6 +1562,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": false,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -1548,6 +1598,7 @@
     },
     "MailingGeocodeAccuracy": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 120,
       "calculated": false,
@@ -1570,6 +1621,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -1683,6 +1735,7 @@
     },
     "MailingAddress": {
       "aggregatable": false,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -1705,6 +1758,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": false,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -1740,6 +1794,7 @@
     },
     "Phone": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 120,
       "calculated": false,
@@ -1762,6 +1817,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -1797,6 +1853,7 @@
     },
     "Fax": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 120,
       "calculated": false,
@@ -1819,6 +1876,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -1854,6 +1912,7 @@
     },
     "MobilePhone": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 120,
       "calculated": false,
@@ -1876,6 +1935,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -1911,6 +1971,7 @@
     },
     "HomePhone": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 120,
       "calculated": false,
@@ -1933,6 +1994,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -1968,6 +2030,7 @@
     },
     "OtherPhone": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 120,
       "calculated": false,
@@ -1990,6 +2053,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -2025,6 +2089,7 @@
     },
     "AssistantPhone": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 120,
       "calculated": false,
@@ -2047,6 +2112,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -2082,6 +2148,7 @@
     },
     "ReportsToId": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 18,
       "calculated": false,
@@ -2104,6 +2171,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -2141,6 +2209,7 @@
     },
     "Email": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 240,
       "calculated": false,
@@ -2163,6 +2232,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -2198,6 +2268,7 @@
     },
     "Title": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 384,
       "calculated": false,
@@ -2220,6 +2291,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -2255,6 +2327,7 @@
     },
     "Department": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 240,
       "calculated": false,
@@ -2277,6 +2350,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -2312,6 +2386,7 @@
     },
     "AssistantName": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 120,
       "calculated": false,
@@ -2334,6 +2409,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -2369,6 +2445,7 @@
     },
     "LeadSource": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 120,
       "calculated": false,
@@ -2391,6 +2468,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -2462,6 +2540,7 @@
     },
     "Birthdate": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -2484,6 +2563,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -2519,6 +2599,7 @@
     },
     "Description": {
       "aggregatable": false,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 96000,
       "calculated": false,
@@ -2541,6 +2622,7 @@
       "extraTypeInfo": "plaintextarea",
       "filterable": false,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": false,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -2576,6 +2658,7 @@
     },
     "OwnerId": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 18,
       "calculated": false,
@@ -2598,6 +2681,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -2635,6 +2719,7 @@
     },
     "CreatedDate": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -2657,6 +2742,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": false,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -2692,6 +2778,7 @@
     },
     "CreatedById": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 18,
       "calculated": false,
@@ -2714,6 +2801,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -2751,6 +2839,7 @@
     },
     "LastModifiedDate": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -2773,6 +2862,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": false,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -2808,6 +2898,7 @@
     },
     "LastModifiedById": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 18,
       "calculated": false,
@@ -2830,6 +2921,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -2867,6 +2959,7 @@
     },
     "SystemModstamp": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -2889,6 +2982,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": false,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -2924,6 +3018,7 @@
     },
     "LastActivityDate": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -2946,6 +3041,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -2981,6 +3077,7 @@
     },
     "LastCURequestDate": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -3003,6 +3100,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": false,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -3038,6 +3136,7 @@
     },
     "LastCUUpdateDate": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -3060,6 +3159,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": false,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -3095,6 +3195,7 @@
     },
     "LastViewedDate": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -3117,6 +3218,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": false,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -3152,6 +3254,7 @@
     },
     "LastReferencedDate": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -3174,6 +3277,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": false,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -3209,6 +3313,7 @@
     },
     "EmailBouncedReason": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 765,
       "calculated": false,
@@ -3231,6 +3336,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -3266,6 +3372,7 @@
     },
     "EmailBouncedDate": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -3288,6 +3395,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": false,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -3323,6 +3431,7 @@
     },
     "IsEmailBounced": {
       "aggregatable": false,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -3345,6 +3454,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -3380,6 +3490,7 @@
     },
     "PhotoUrl": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 765,
       "calculated": false,
@@ -3402,6 +3513,7 @@
       "extraTypeInfo": "imageurl",
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -3437,6 +3549,7 @@
     },
     "Jigsaw": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 60,
       "calculated": false,
@@ -3459,6 +3572,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -3494,6 +3608,7 @@
     },
     "JigsawContactId": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 60,
       "calculated": false,
@@ -3516,6 +3631,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -3549,8 +3665,70 @@
       "updateable": false,
       "writeRequiresMasterRead": false
     },
+    "IndividualId": {
+      "aggregatable": true,
+      "aiPredictionField": false,
+      "autoNumber": false,
+      "byteLength": 18,
+      "calculated": false,
+      "calculatedFormula": null,
+      "cascadeDelete": false,
+      "caseSensitive": false,
+      "compoundFieldName": null,
+      "controllerName": null,
+      "createable": true,
+      "custom": false,
+      "defaultValue": null,
+      "defaultValueFormula": null,
+      "defaultedOnCreate": false,
+      "dependentPicklist": false,
+      "deprecatedAndHidden": false,
+      "digits": 0,
+      "displayLocationInDecimal": false,
+      "encrypted": false,
+      "externalId": false,
+      "extraTypeInfo": null,
+      "filterable": true,
+      "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
+      "groupable": true,
+      "highScaleNumber": false,
+      "htmlFormatted": false,
+      "idLookup": false,
+      "inlineHelpText": null,
+      "label": "Individual ID",
+      "length": 18,
+      "mask": null,
+      "maskType": null,
+      "name": "IndividualId",
+      "nameField": false,
+      "namePointing": false,
+      "nillable": true,
+      "permissionable": false,
+      "picklistValues": [],
+      "polymorphicForeignKey": false,
+      "precision": 0,
+      "queryByDistance": false,
+      "referenceTargetField": null,
+      "referenceTo": [
+        "Individual"
+      ],
+      "relationshipName": "Individual",
+      "relationshipOrder": null,
+      "restrictedDelete": false,
+      "restrictedPicklist": false,
+      "scale": 0,
+      "searchPrefilterable": true,
+      "soapType": "tns:ID",
+      "sortable": true,
+      "type": "reference",
+      "unique": false,
+      "updateable": true,
+      "writeRequiresMasterRead": false
+    },
     "d5__Level__c": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 765,
       "calculated": false,
@@ -3573,6 +3751,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -3630,6 +3809,7 @@
     },
     "d5__Languages__c": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 300,
       "calculated": false,
@@ -3652,6 +3832,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -3687,6 +3868,7 @@
     },
     "d5__Unique_Email__c": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 240,
       "calculated": false,
@@ -3709,6 +3891,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -3744,6 +3927,7 @@
     },
     "d5__Drupal_ID__c": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -3766,6 +3950,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": false,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -3801,6 +3986,7 @@
     },
     "d5__Organization_text__c": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 765,
       "calculated": false,
@@ -3823,6 +4009,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -3858,6 +4045,7 @@
     },
     "d5__Lead_Source_Other__c": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 765,
       "calculated": false,
@@ -3880,6 +4068,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -3915,6 +4104,7 @@
     },
     "d5__Do_Not_Mail__c": {
       "aggregatable": false,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -3937,6 +4127,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -3972,6 +4163,7 @@
     },
     "d5__Deceased__c": {
       "aggregatable": false,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -3994,6 +4186,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -4029,6 +4222,7 @@
     },
     "d5__Deceased_Date__c": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 0,
       "calculated": false,
@@ -4051,6 +4245,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
       "groupable": true,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -4086,10 +4281,11 @@
     },
     "d5__Drupal_URL__c": {
       "aggregatable": true,
+      "aiPredictionField": false,
       "autoNumber": false,
       "byteLength": 3900,
       "calculated": true,
-      "calculatedFormula": "$Setup.d5__Drupal_Settings__c.d5__Drupal_URL__c + Id",
+      "calculatedFormula": "$Setup.d5__Drupal_Settings__c.d5__Drupal_URL__c + '\/salesforce\/' + Id",
       "cascadeDelete": false,
       "caseSensitive": false,
       "compoundFieldName": null,
@@ -4108,6 +4304,7 @@
       "extraTypeInfo": null,
       "filterable": true,
       "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": true,
       "groupable": false,
       "highScaleNumber": false,
       "htmlFormatted": false,
@@ -4141,84 +4338,253 @@
       "updateable": false,
       "writeRequiresMasterRead": false
     },
-      "d5__Multipicklist_Test__c": {
-          "aggregatable": true,
-          "autoNumber": false,
-          "byteLength": 4099,
-          "calculated": true,
-          "calculatedFormula": "",
-          "cascadeDelete": false,
-          "caseSensitive": false,
-          "compoundFieldName": null,
-          "controllerName": null,
-          "createable": true,
-          "custom": true,
-          "defaultValue": null,
-          "defaultValueFormula": null,
-          "defaultedOnCreate": false,
-          "dependentPicklist": false,
-          "deprecatedAndHidden": false,
-          "digits": 0,
-          "displayLocationInDecimal": false,
-          "encrypted": false,
-          "externalId": false,
-          "extraTypeInfo": null,
-          "filterable": true,
-          "filteredLookupInfo": null,
-          "groupable": false,
-          "highScaleNumber": false,
-          "htmlFormatted": false,
-          "idLookup": false,
-          "inlineHelpText": null,
-          "label": "Multipicklist Test",
-          "length": 4099,
-          "mask": null,
-          "maskType": null,
-          "name": "d5__Multipicklist_Test__c",
-          "nameField": false,
-          "namePointing": false,
-          "nillable": true,
-          "permissionable": true,
-          "picklistValues": [
-              {
-                  "active": true,
-                  "defaultValue": false,
-                  "label": "Value 1",
-                  "validFor": null,
-                  "value": "Value 1"
-              },
-              {
-                  "active": true,
-                  "defaultValue": false,
-                  "label": "Value 2",
-                  "validFor": null,
-                  "value": "Value 2"
-              },
-              {
-                  "active": true,
-                  "defaultValue": false,
-                  "label": "Value 3",
-                  "validFor": null,
-                  "value": "Value 3"
-              }
-          ],
-          "polymorphicForeignKey": false,
-          "precision": 0,
-          "queryByDistance": false,
-          "referenceTargetField": null,
-          "referenceTo": [],
-          "relationshipName": null,
-          "relationshipOrder": null,
-          "restrictedDelete": false,
-          "restrictedPicklist": false,
-          "scale": 0,
-          "searchPrefilterable": false,
-          "soapType": "xsd:string",
-          "sortable": true,
-          "type": "multipicklist",
-          "unique": false,
-          "updateable": true,
-          "writeRequiresMasterRead": false
-      }
+    "d5__Multipicklist_Test__c": {
+      "aggregatable": true,
+      "autoNumber": false,
+      "byteLength": 4099,
+      "calculated": true,
+      "calculatedFormula": "",
+      "cascadeDelete": false,
+      "caseSensitive": false,
+      "compoundFieldName": null,
+      "controllerName": null,
+      "createable": true,
+      "custom": true,
+      "defaultValue": null,
+      "defaultValueFormula": null,
+      "defaultedOnCreate": false,
+      "dependentPicklist": false,
+      "deprecatedAndHidden": false,
+      "digits": 0,
+      "displayLocationInDecimal": false,
+      "encrypted": false,
+      "externalId": false,
+      "extraTypeInfo": null,
+      "filterable": true,
+      "filteredLookupInfo": null,
+      "groupable": false,
+      "highScaleNumber": false,
+      "htmlFormatted": false,
+      "idLookup": false,
+      "inlineHelpText": null,
+      "label": "Multipicklist Test",
+      "length": 4099,
+      "mask": null,
+      "maskType": null,
+      "name": "d5__Multipicklist_Test__c",
+      "nameField": false,
+      "namePointing": false,
+      "nillable": true,
+      "permissionable": true,
+      "picklistValues": [
+        {
+          "active": true,
+          "defaultValue": false,
+          "label": "Value 1",
+          "validFor": null,
+          "value": "Value 1"
+        },
+        {
+          "active": true,
+          "defaultValue": false,
+          "label": "Value 2",
+          "validFor": null,
+          "value": "Value 2"
+        },
+        {
+          "active": true,
+          "defaultValue": false,
+          "label": "Value 3",
+          "validFor": null,
+          "value": "Value 3"
+        }
+      ],
+      "polymorphicForeignKey": false,
+      "precision": 0,
+      "queryByDistance": false,
+      "referenceTargetField": null,
+      "referenceTo": [],
+      "relationshipName": null,
+      "relationshipOrder": null,
+      "restrictedDelete": false,
+      "restrictedPicklist": false,
+      "scale": 0,
+      "searchPrefilterable": false,
+      "soapType": "xsd:string",
+      "sortable": true,
+      "type": "multipicklist",
+      "unique": false,
+      "updateable": true,
+      "writeRequiresMasterRead": false
+    },
+    "d5__interests__c": {
+      "aggregatable": false,
+      "aiPredictionField": false,
+      "autoNumber": false,
+      "byteLength": 4099,
+      "calculated": false,
+      "calculatedFormula": null,
+      "cascadeDelete": false,
+      "caseSensitive": false,
+      "compoundFieldName": null,
+      "controllerName": null,
+      "createable": true,
+      "custom": true,
+      "defaultValue": null,
+      "defaultValueFormula": null,
+      "defaultedOnCreate": false,
+      "dependentPicklist": false,
+      "deprecatedAndHidden": false,
+      "digits": 0,
+      "displayLocationInDecimal": false,
+      "encrypted": false,
+      "externalId": false,
+      "extraTypeInfo": null,
+      "filterable": true,
+      "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
+      "groupable": false,
+      "highScaleNumber": false,
+      "htmlFormatted": false,
+      "idLookup": false,
+      "inlineHelpText": null,
+      "label": "interests",
+      "length": 4099,
+      "mask": null,
+      "maskType": null,
+      "name": "d5__interests__c",
+      "nameField": false,
+      "namePointing": false,
+      "nillable": true,
+      "permissionable": true,
+      "picklistValues": [
+        {
+          "active": true,
+          "defaultValue": false,
+          "label": "test1",
+          "validFor": null,
+          "value": "test1"
+        },
+        {
+          "active": true,
+          "defaultValue": false,
+          "label": "test2",
+          "validFor": null,
+          "value": "test2"
+        },
+        {
+          "active": true,
+          "defaultValue": false,
+          "label": "test3",
+          "validFor": null,
+          "value": "test3"
+        },
+        {
+          "active": true,
+          "defaultValue": false,
+          "label": "test4",
+          "validFor": null,
+          "value": "test4"
+        }
+      ],
+      "polymorphicForeignKey": false,
+      "precision": 4,
+      "queryByDistance": false,
+      "referenceTargetField": null,
+      "referenceTo": [],
+      "relationshipName": null,
+      "relationshipOrder": null,
+      "restrictedDelete": false,
+      "restrictedPicklist": false,
+      "scale": 0,
+      "searchPrefilterable": false,
+      "soapType": "xsd:string",
+      "sortable": false,
+      "type": "multipicklist",
+      "unique": false,
+      "updateable": true,
+      "writeRequiresMasterRead": false
+    },
+    "d5__Test_Multipicklist__c": {
+      "aggregatable": false,
+      "aiPredictionField": false,
+      "autoNumber": false,
+      "byteLength": 4099,
+      "calculated": false,
+      "calculatedFormula": null,
+      "cascadeDelete": false,
+      "caseSensitive": false,
+      "compoundFieldName": null,
+      "controllerName": null,
+      "createable": true,
+      "custom": true,
+      "defaultValue": null,
+      "defaultValueFormula": null,
+      "defaultedOnCreate": false,
+      "dependentPicklist": false,
+      "deprecatedAndHidden": false,
+      "digits": 0,
+      "displayLocationInDecimal": false,
+      "encrypted": false,
+      "externalId": false,
+      "extraTypeInfo": null,
+      "filterable": true,
+      "filteredLookupInfo": null,
+      "formulaTreatNullNumberAsZero": false,
+      "groupable": false,
+      "highScaleNumber": false,
+      "htmlFormatted": false,
+      "idLookup": false,
+      "inlineHelpText": null,
+      "label": "Test Multipicklist",
+      "length": 4099,
+      "mask": null,
+      "maskType": null,
+      "name": "d5__Test_Multipicklist__c",
+      "nameField": false,
+      "namePointing": false,
+      "nillable": true,
+      "permissionable": true,
+      "picklistValues": [
+        {
+          "active": true,
+          "defaultValue": false,
+          "label": "Value 1",
+          "validFor": null,
+          "value": "Value 1"
+        },
+        {
+          "active": true,
+          "defaultValue": false,
+          "label": "Value 2",
+          "validFor": null,
+          "value": "Value 2"
+        },
+        {
+          "active": true,
+          "defaultValue": false,
+          "label": "Value 3",
+          "validFor": null,
+          "value": "Value 3"
+        }
+      ],
+      "polymorphicForeignKey": false,
+      "precision": 4,
+      "queryByDistance": false,
+      "referenceTargetField": null,
+      "referenceTo": [],
+      "relationshipName": null,
+      "relationshipOrder": null,
+      "restrictedDelete": false,
+      "restrictedPicklist": false,
+      "scale": 0,
+      "searchPrefilterable": false,
+      "soapType": "xsd:string",
+      "sortable": false,
+      "type": "multipicklist",
+      "unique": false,
+      "updateable": true,
+      "writeRequiresMasterRead": false
+    }
   }
-}
\ No newline at end of file
+}
-- 
GitLab