• Модуль: bizproc
  • Путь к файлу: ~/bitrix/modules/bizproc/lib/automation/engine/conditiongroup.php
  • Класс: BitrixBizprocAutomationEngineConditionGroup
  • Вызов: ConditionGroup::evaluateByDocument
public function evaluateByDocument(array $documentType, array $documentId, array $document = null): bool
{
	if (empty($this->items))
	{
		return true;
	}

	if ($this->getType() === static::TYPE_MIXED)
	{
		throw new NotSupportedException('Mixed conditions can`t be evaluated by document only');
	}

	$documentService = CBPRuntime::getRuntime(true)->getDocumentService();

	if ($document === null)
	{
		$document = $documentService->getDocument($documentId, $documentType);
	}

	$result = [0 => true];
	$i = 0;
	$joiner = static::JOINER_AND;

	$this->evaluateResults = [];

	foreach ($this->items as $item)
	{
		/** @var Condition $condition */
		$condition = $item[0];
		$conditionField = $condition->getField();

		$conditionResult = true;

		$fld = $document[$conditionField] ?? null;
		$fieldType = $this->getFieldTypeObject($documentService, $documentType, $conditionField);

		if (!$condition->checkValue($fld, $fieldType, $documentId))
		{
			$conditionResult = false;
		}

		if ($joiner == static::JOINER_OR)
		{
			++$i;
			$result[$i] = $conditionResult;
		}
		elseif (!$conditionResult)
		{
			$result[$i] = false;
		}

		$this->evaluateResults[] = [
			'condition' => $condition->toArray(),
			'joiner' => $joiner,
			'fieldValue' => $fld ? $fieldType->formatValue($fld) : null,
			'result' => $conditionResult ? 'Y' : 'N',
		];

		$joiner = ($item[1] === static::JOINER_OR) ? static::JOINER_OR : static::JOINER_AND;
	}

	return (count(array_filter($result)) > 0);
}