public function SalesforceMappingFieldPluginBase::pushValue in Salesforce Suite 8.4
Same name and namespace in other branches
- 8.3 modules/salesforce_mapping/src/SalesforceMappingFieldPluginBase.php \Drupal\salesforce_mapping\SalesforceMappingFieldPluginBase::pushValue()
- 5.0.x modules/salesforce_mapping/src/SalesforceMappingFieldPluginBase.php \Drupal\salesforce_mapping\SalesforceMappingFieldPluginBase::pushValue()
Munge the value that's being prepared to push to Salesforce.
An extension of ::value, ::pushValue does some basic type-checking and validation against Salesforce field types to protect against basic data errors.
Parameters
\Drupal\Core\Entity\EntityInterface $entity: The entity being pushed.
\Drupal\salesforce_mapping\Entity\SalesforceMappingInterface $mapping: The mapping.
Return value
mixed The value to be pushed to Salesforce.
Overrides SalesforceMappingFieldPluginInterface::pushValue
File
- modules/
salesforce_mapping/ src/ SalesforceMappingFieldPluginBase.php, line 172
Class
- SalesforceMappingFieldPluginBase
- Defines a base Salesforce Mapping Field Plugin implementation.
Namespace
Drupal\salesforce_mappingCode
public function pushValue(EntityInterface $entity, SalesforceMappingInterface $mapping) {
// @TODO to provide for better extensibility, this would be better implemented as some kind of constraint or plugin system. That would also open new possibilities for injecting business logic into the mapping layer.
// If this field plugin doesn't support salesforce_field config type, or
// doesn't do push, then return the raw value from the mapped entity.
$value = $this
->value($entity, $mapping);
if (!$this
->push() || empty($this
->config('salesforce_field'))) {
return $value;
}
// objectDescribe can throw an exception, but that's outside the scope of
// being handled here. Allow it to percolate.
$describe = $this->salesforceClient
->objectDescribe($mapping
->getSalesforceObjectType());
try {
$field_definition = $describe
->getField($this
->config('salesforce_field'));
} catch (\Exception $e) {
$this->eventDispatcher
->dispatch(SalesforceEvents::WARNING, new SalesforceWarningEvent($e, 'Field definition not found for %describe.%field', [
'%describe' => $describe
->getName(),
'%field' => $this
->config('salesforce_field'),
]));
// If getField throws, however, just return the raw value.
return $value;
}
switch (strtolower($field_definition['type'])) {
case 'boolean':
if ($value == 'false') {
$value = FALSE;
}
$value = (bool) $value;
break;
case 'date':
case 'datetime':
if (!empty($value)) {
$date = new DrupalDateTime($value, 'UTC');
$value = $date
->format(DateTime::ISO8601);
}
break;
case 'double':
$value = (double) $value;
break;
case 'integer':
$value = (int) $value;
break;
case 'multipicklist':
if (is_array($value)) {
$value = implode(';', $value);
}
break;
case 'id':
case 'reference':
if (empty($value)) {
break;
}
// If value is an SFID, cast to string.
if ($value instanceof SFID) {
$value = (string) $value;
}
else {
$value = (string) new SFID($value);
}
break;
}
if ($field_definition['length'] > 0 && strlen($value) > $field_definition['length']) {
$value = substr($value, 0, $field_definition['length']);
}
return $value;
}