Составные действия

Урок 229 из 248
Автор: Марина Павлова
Сложность урока:
2 уровень - несложные понятия и действия, но не расслабляйтесь.
2 из 5
Просмотров: 10015
Дата изменения: 11.01.2024
Недоступно в лицензиях:
Текущую редакцию Вашего 1С-Битрикс можно просмотреть на странице Обновление платформы (Marketplace > Обновление платформы).
Старт, Стандарт, Малый бизнес

Объединение действий в одно

Составные действия наследуются от абстрактного класса CBPCompositeActivity, который, в свою очередь, наследуется от класса CBPActivity. Класс CBPCompositeActivity обеспечивает поддержку возможности включать внутрь действия дочерние действия. Например, составным является стандартное действие CBPParallelActivity (параллельное выполнение), которое содержит в себе дочерние действия, соответствующие веткам параллельного выполнения.

Класс CBPCompositeActivity содержит член arActivities, с помощью которого можно обращаться к дочерним действиям.

Например, при запуске действия необходимо запустить первое дочернее действие и дождаться его завершения. Для этого можно использовать следующий код:

class CBPMyActivity
	extends CBPCompositeActivity    // наследуем, так как составное действие
	implements IBPEventActivity	// обработка события завершения дочернего //действия
{
	// Исполняемый метод действия
	public function Execute()
	{
		// Возьмем первое дочернее действие
		$activity = $this->arActivities[0];
		// Подпишемся на событие изменения статуса дочернего действия
		//  (завершение)
		$activity->AddStatusChangeHandler(self::ClosedEvent, $this);
		// Отправим дочернее действие исполняющей среде на выполнение
		$this->workflow->ExecuteActivity($activity);
		// Вернем указание исполняющей среде, что действие еще выполняется
		return CBPActivityExecutionStatus::Executing;
	}

	// Обработчик события изменения статуса интерфейса IBPEventActivity
	// Параметром передается действие, изменившее статус
	protected function OnEvent(CBPActivity $sender)
	{
		// Отпишемся от события изменения статуса дочернего действия
		// (завершения)
		$sender->RemoveStatusChangeHandler(self::ClosedEvent, $this);
		// Дочернее действие завершено, выполняем другой необходимый нам код
		// Например завершаем действие
		$this->workflow->CloseActivity($this);
	}
}

Нам жаль это слышать… Но мы постараемся быть лучше!

Мы благодарны Вам за помощь в улучшении документации.

Спасибо, мы рады что смогли помочь Вам. Ниже Вы можете оставить свой отзыв или пожелание :)
Мы стараемся сделать документацию понятнее и доступнее,
и Ваше мнение важно для нас
Курсы разработаны в компании «1С-Битрикс»