• Модуль: bizproc
  • Путь к файлу: ~/bitrix/modules/bizproc/lib/automation/engine/conditiongroup.php
  • Класс: BitrixBizprocAutomationEngineConditionGroup
  • Вызов: ConditionGroup::createBizprocActivity
public function createBizprocActivity(array $childActivity, array $documentType, Template $template)
{
	$mixedCondition = [];
	$bizprocJoiner = 0;

	$documentService = CBPRuntime::GetRuntime()->getDocumentService();

	/** @var Condition $condition */
	foreach ($this->getItems() as [$condition, $joiner])
	{
		$object = $condition->getObject();
		$field = $condition->getField();
		$value = $condition->getValue();
		$property = $template->getProperty($object, $field);

		$operator = $condition->getOperator();
		$isOperatorWithValue = !in_array(
			$operator,
			[BizprocActivityOperatorEmptyOperator::getCode(), BizprocActivityOperatorNotEmptyOperator::getCode()],
			true
		);
		if ($property && $isOperatorWithValue)
		{
			$currentValues = ['field' => $value];
			$errors = [];

			$isBetweenOperator = $operator === BitrixBizprocActivityOperatorBetweenOperator::getCode();
			$valueInternal =
				$isBetweenOperator
					? []
					: $documentService->getFieldInputValue(
						$documentType,
						$property,
						'field',
						$currentValues,
						$errors
				)
			;
			if ($isBetweenOperator)
			{
				$currentValues['field_greater_then'] = is_array($value) && isset($value[0]) ? $value[0] : $value;
				$currentValues['field_less_then'] = is_array($value) && isset($value[1]) ? $value[1] : '';

				$property['Multiple'] = false;
				$valueInternal1 = $documentService->getFieldInputValue(
					$documentType,
					$property,
					'field_greater_then',
					$currentValues,
					$errors
				);
				$valueInternal2 = $documentService->getFieldInputValue(
					$documentType,
					$property,
					'field_less_then',
					$currentValues,
					$errors
				);

				$valueInternal = [$valueInternal1 ?? '', $valueInternal2 ?? ''];
			}

			if (!$errors)
			{
				$value = $valueInternal;
			}
		}

		$mixedCondition[] = [
			'object' => $object,
			'field' => $field,
			'operator' => $condition->getOperator(),
			'value' => self::unConvertExpressions($value, $documentType),
			'joiner' => $bizprocJoiner,
		];
		$bizprocJoiner = ($joiner === static::JOINER_OR) ? 1 : 0;
	}

	$title = Loc::getMessage('BIZPROC_AUTOMATION_CONDITION_TITLE');
	$activated = $childActivity['Activated'] === 'N' ? 'N' : 'Y';
	$activity = [
		'Type' => 'IfElseActivity',
		'Name' => Robot::generateName(),
		'Activated' => $activated,
		'Properties' => ['Title' => $title],
		'Children' => [
			[
				'Type' => 'IfElseBranchActivity',
				'Name' => Robot::generateName(),
				'Properties' => [
					'Title' => $title,
					'mixedcondition' => $mixedCondition
				],
				'Children' => [$childActivity],
				'Activated' => $activated,
			],
			[
				'Type' => 'IfElseBranchActivity',
				'Name' => Robot::generateName(),
				'Properties' => [
					'Title' => $title,
					'truecondition' => '1',
				],
				'Children' => [],
				'Activated' => $activated,
			]
		]
	];

	return $activity;
}