...Человеческий поиск в разработке...
- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_document_lead.php
- Класс: \CCrmDocumentLead
- Вызов: CCrmDocumentLead::UpdateDocument
static function UpdateDocument($documentId, $arFields, $modifiedById = null) { global $DB; if(empty($arFields)) { return; } $arDocumentID = self::GetDocumentInfo($documentId); if (empty($arDocumentID)) throw new CBPArgumentNullException('documentId'); if(!CCrmLead::Exists($arDocumentID['ID'])) { throw new Exception(GetMessage('CRM_DOCUMENT_ELEMENT_IS_NOT_FOUND')); } $complexDocumentId = [$arDocumentID['DOCUMENT_TYPE'][0], $arDocumentID['DOCUMENT_TYPE'][1], $documentId]; $arDocumentFields = self::GetDocumentFields($arDocumentID['TYPE']); $arKeys = array_keys($arFields); foreach ($arKeys as $key) { if (!array_key_exists($key, $arDocumentFields)) { //Fix for issue #40374 unset($arFields[$key]); continue; } $fieldType = $arDocumentFields[$key]["Type"]; if (in_array($fieldType, array("phone", "email", "im", "web"), true)) { CCrmDocument::PrepareEntityMultiFields($arFields, mb_strtoupper($fieldType)); continue; } $arFields[$key] = (is_array($arFields[$key]) && !CBPHelper::IsAssociativeArray($arFields[$key])) ? $arFields[$key] : array($arFields[$key]); if ($fieldType == "user") { $arFields[$key] = \CBPHelper::extractUsers($arFields[$key], $complexDocumentId); } elseif ($fieldType == "select" && mb_substr($key, 0, 3) == "UF_") { self::InternalizeEnumerationField('CRM_LEAD', $arFields, $key); } elseif ($fieldType == "file") { $arFileOptions = array('ENABLE_ID' => true); foreach ($arFields[$key] as &$value) { //Issue #40380. Secure URLs and file IDs are allowed. $file = false; if (\CCrmFileProxy::TryResolveFile($value, $file, $arFileOptions)) { global $USER_FIELD_MANAGER; if ($USER_FIELD_MANAGER instanceof \CUserTypeManager) { $prevValue = $USER_FIELD_MANAGER->GetUserFieldValue( \CCrmOwnerType::ResolveUserFieldEntityID(\CCrmOwnerType::Lead), $key, $arDocumentID['ID'] ); if ($prevValue) { $file['old_id'] = $prevValue; } } } $value = $file; } unset($value, $prevValue); } elseif ($fieldType == "S:HTML") { foreach ($arFields[$key] as &$value) { $value = array("VALUE" => $value); } unset($value); } if (!$arDocumentFields[$key]["Multiple"] && is_array($arFields[$key])) { if (count($arFields[$key]) > 0) { $a = array_values($arFields[$key]); $arFields[$key] = $a[0]; } else { $arFields[$key] = null; } } } if(isset($arFields['COMMENTS']) && $arFields['COMMENTS'] !== '') { $arFields['COMMENTS'] = static::sanitizeCommentsValue($arFields['COMMENTS']); } //check STATUS_ID changes for automation $arPresentFields = []; if (isset($arFields['STATUS_ID'])) { $dbDocumentList = CCrmLead::GetListEx( array(), array('ID' => $arDocumentID['ID'], 'CHECK_PERMISSIONS' => 'N'), false, false, array('ID', 'STATUS_ID') ); $arPresentFields = $dbDocumentList->Fetch(); } $useTransaction = static::shouldUseTransaction(); if ($useTransaction) { $DB->StartTransaction(); } if ($modifiedById > 0) { $arFields['MODIFY_BY_ID'] = $modifiedById; } $updatedFields = $arFields; $CCrmEntity = new CCrmLead(false); $res = $CCrmEntity->Update( $arDocumentID['ID'], $arFields, true, true, [ 'DISABLE_USER_FIELD_CHECK' => true, 'REGISTER_SONET_EVENT' => true, 'CURRENT_USER' => $modifiedById ?? static::getSystemUserId() ] ); if (!$res) { if ($useTransaction) { $DB->Rollback(); } throw new Exception($CCrmEntity->LAST_ERROR); } if (COption::GetOptionString("crm", "start_bp_within_bp", "N") == "Y") { $CCrmBizProc = new CCrmBizProc('LEAD'); if (false === $CCrmBizProc->CheckFields($arDocumentID['ID'], true)) { if ($useTransaction) { $DB->Rollback(); } throw new Exception($CCrmBizProc->LAST_ERROR); } if ($res && !$CCrmBizProc->StartWorkflow($arDocumentID['ID'])) { if ($useTransaction) { $DB->Rollback(); } throw new Exception($CCrmBizProc->LAST_ERROR); } } if (isset($arFields['TRACKING_SOURCE_ID'])) { Crm\Tracking\UI\Details::saveEntityData( \CCrmOwnerType::Lead, $arDocumentID['ID'], $arFields ); } //region automation $starter = new Crm\Automation\Starter(\CCrmOwnerType::Lead, $arDocumentID['ID']); $starter->setContextToBizproc()->runOnUpdate($updatedFields, $arPresentFields); //endregion if ($res && $useTransaction) { $DB->Commit(); } }