- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/internals/entity.php
- Класс: BitrixSaleInternalsEntity
- Вызов: Entity::setField
public function setField($name, $value)
{
$result = new Result();
$value = $this->normalizeValue($name, $value);
if ($this->eventName === null)
{
$this->eventName = static::getEntityEventName();
}
if ($this->eventName)
{
$eventManager = MainEventManager::getInstance();
if ($eventsList = $eventManager->findEventHandlers('sale', 'OnBefore'.$this->eventName.'SetField'))
{
/** @var MainEntityEvent $event */
$event = new MainEvent('sale', 'OnBefore'.$this->eventName.'SetField', array(
'ENTITY' => $this,
'NAME' => $name,
'VALUE' => $value,
));
$event->send();
if ($event->getResults())
{
/** @var MainEventResult $eventResult */
foreach($event->getResults() as $eventResult)
{
if($eventResult->getType() == MainEventResult::SUCCESS)
{
if ($eventResultData = $eventResult->getParameters())
{
if (isset($eventResultData['VALUE']) && $eventResultData['VALUE'] != $value)
{
$value = $eventResultData['VALUE'];
}
}
}
elseif($eventResult->getType() == MainEventResult::ERROR)
{
$errorMsg = new ResultError(MainLocalizationLoc::getMessage('SALE_EVENT_ON_BEFORE_'.mb_strtoupper($this->eventName).'_SET_FIELD_ERROR'), 'SALE_EVENT_ON_BEFORE_'.mb_strtoupper($this->eventName).'_SET_FIELD_ERROR');
if ($eventResultData = $eventResult->getParameters())
{
if (isset($eventResultData) && $eventResultData instanceof ResultError)
{
/** @var ResultError $errorMsg */
$errorMsg = $eventResultData;
}
}
$result->addError($errorMsg);
}
}
if (!$result->isSuccess())
{
return $result;
}
}
}
}
$availableFields = static::getAvailableFieldsMap();
if (!isset($availableFields[$name]))
{
throw new MainArgumentOutOfRangeException("name=$name");
}
$oldValue = $this->fields->get($name);
if ($oldValue != $value || ($oldValue === null && $value !== null))
{
$r = $this->checkValueBeforeSet($name, $value);
if (!$r->isSuccess())
{
$result->addErrors($r->getErrors());
return $result;
}
if ($this->eventName)
{
if ($eventsList = $eventManager->findEventHandlers('sale', 'On'.$this->eventName.'SetField'))
{
$event = new MainEvent('sale', 'On'.$this->eventName.'SetField', array(
'ENTITY' => $this,
'NAME' => $name,
'VALUE' => $value,
'OLD_VALUE' => $oldValue,
));
$event->send();
if ($event->getResults())
{
/** @var MainEventResult $evenResult */
foreach($event->getResults() as $eventResult)
{
if($eventResult->getType() == MainEventResult::SUCCESS)
{
if ($eventResultData = $eventResult->getParameters())
{
if (isset($eventResultData['VALUE']) && $eventResultData['VALUE'] != $value)
{
$value = $eventResultData['VALUE'];
}
}
}
}
}
}
}
$isStartField = $this->isStartField(in_array($name, static::getMeaningfulFields()));
$this->fields->set($name, $value);
try
{
$result = $this->onFieldModify($name, $oldValue, $value);
if ($result->isSuccess() && $this->eventName)
{
$event = new MainEvent('sale', 'OnAfter'.$this->eventName.'SetField', array(
'ENTITY' => $this,
'NAME' => $name,
'VALUE' => $value,
'OLD_VALUE' => $oldValue,
));
$event->send();
}
if ($result->isSuccess())
{
static::addChangesToHistory($name, $oldValue, $value);
}
}
catch (Exception $e)
{
$this->fields->set($name, $oldValue);
throw $e;
}
if (!$result->isSuccess())
{
$this->fields->set($name, $oldValue);
}
else
{
if ($isStartField)
{
$hasMeaningfulFields = $this->hasMeaningfulField();
/** @var Result $r */
$r = $this->doFinalAction($hasMeaningfulFields);
if (!$r->isSuccess())
{
$result->addErrors($r->getErrors());
}
else
{
if (($data = $r->getData())
&& !empty($data) && is_array($data))
{
$result->setData($result->getData() + $data);
}
}
}
}
}
return $result;
}