- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/conversion/entity/entityconversionmaptable.php
- Класс: Bitrix\Crm\Conversion\Entity\EntityConversionMapTable
- Вызов: EntityConversionMapTable::upsert
static function upsert(array $data)
{
$connection = Main\Application::getConnection();
$sqlHelper = $connection->getSqlHelper();
$srcTypeID = isset($data['SRC_TYPE_ID']) ? (int)$data['SRC_TYPE_ID'] : 0;
$dstTypeID = isset($data['DST_TYPE_ID']) ? (int)$data['DST_TYPE_ID'] : 0;
$relationType = $data['RELATION_TYPE'] ?? RelationType::CONVERSION;
$relationType = $sqlHelper->convertToDbString($relationType);
$isChildrenListEnabled = $data['IS_CHILDREN_LIST_ENABLED'] ?? 'Y';
if (!is_string($isChildrenListEnabled))
{
$isChildrenListEnabled = $isChildrenListEnabled ? 'Y' : 'N';
}
$isChildrenListEnabled = $sqlHelper->convertToDbString($isChildrenListEnabled);
$dateField = new DatetimeField('D');
$lastUpdated = $sqlHelper->convertToDb(new DateTime(), $dateField);
$data = isset($data['DATA']) ? $sqlHelper->forSql($data['DATA']) : '';
self::cleanCache();
if($connection instanceof Main\DB\MysqlCommonConnection)
{
$connection->queryExecute(
"INSERT INTO b_crm_conv_map(SRC_TYPE_ID, DST_TYPE_ID, RELATION_TYPE, IS_CHILDREN_LIST_ENABLED, LAST_UPDATED, DATA)
VALUES({$srcTypeID}, {$dstTypeID}, {$relationType}, {$isChildrenListEnabled}, {$lastUpdated}, '{$data}')
ON DUPLICATE KEY UPDATE RELATION_TYPE = {$relationType}, IS_CHILDREN_LIST_ENABLED = {$isChildrenListEnabled}, LAST_UPDATED = {$lastUpdated}, DATA = '{$data}'"
);
}
elseif($connection instanceof Main\DB\MssqlConnection)
{
$dbResult = $connection->query(
"SELECT 'X' FROM b_crm_conv_map WHERE SRC_TYPE_ID = {$srcTypeID} AND DST_TYPE_ID = {$dstTypeID}"
);
if(is_array($dbResult->fetch()))
{
$connection->queryExecute(
"UPDATE b_crm_conv_map SET LAST_UPDATED = {$lastUpdated}, DATA = '{$data}'
WHERE SRC_TYPE_ID = {$srcTypeID} AND DST_TYPE_ID = {$dstTypeID}"
);
}
else
{
$connection->queryExecute(
"INSERT INTO b_crm_conv_map(SRC_TYPE_ID, DST_TYPE_ID, LAST_UPDATED, DATA)
VALUES({$srcTypeID}, {$dstTypeID}, {$lastUpdated}, '{$data}')"
);
}
}
elseif($connection instanceof Main\DB\OracleConnection)
{
$connection->queryExecute("MERGE INTO b_crm_conv_map USING (SELECT {$srcTypeID} SRC_TYPE_ID, {$dstTypeID} DST_TYPE_ID FROM dual)
source ON
(
source.SRC_TYPE_ID = b_crm_conv_map.SRC_TYPE_ID
AND source.DST_TYPE_ID = b_crm_conv_map.DST_TYPE_ID
)
WHEN MATCHED THEN
UPDATE SET b_crm_conv_map.LAST_UPDATED = {$lastUpdated},
b_crm_conv_map.DATA = '{$data}'
WHEN NOT MATCHED THEN
INSERT (SRC_TYPE_ID, DST_TYPE_ID, LAST_UPDATED, DATA)
VALUES({$srcTypeID}, {$dstTypeID}, {$lastUpdated}, '{$data}')"
);
}
else
{
$dbType = $connection->getType();
throw new Main\NotSupportedException("The '{$dbType}' is not supported in current context");
}
}