Битрикс. Бизнес-процессы. PHP-код.
13.01.2014
Недавно ко мне обратился насяльника с просьбой помочь в написании бизнес-процесса (далее в статье БП) для автоматической отсылки писем клиентам, у которых подходит срок оплаты хостинга.
Для полноценной работы с дизайнером шаблонов БП потребуется администраторский доступ к корп-порталу.
У нас на корп-портале есть список (Сервисы -- Списки) "Клиенты хостинга". У каждого элемента есть свойство PAYED, содержащее датавремя, до которого оплачен хостинг. Задача: когда текущее время больше времени PAYED, надо отсылать клиенту письмо с предупреждением, что через три дня его хостинг сдуется =)
Находим шаблоны, прикреплённые к списку клиентов хостинга.

Создаём новый Последовательный БП. Битрикс предлагает нам вполне наглядный дизайнер шаблонов БП, к особенностям которого всё-таки придётся привыкнуть (впрочем, как и ко всему, что обладает объёмным синтаксическим и семантическим функционалом).
В диалоге Параметры шаблона находим третью вкладку Переменные и создаём строковую переменную с идентификатором payed_to и с таким же именем. Чуть позже увидим зачем нам эта переменная.
Заодно отключим автоматический запуск при создании и изменении. Эти галочки можно потом проставить, а для дебага они будут мешаться.
1. Общая логика
Для начала составим у себя в голове логику действий.
1. БП в цикле раз в сутки проверяет разницу между PAYED и текущим датавременем.
2. Если время кончилось, заканчиваем выполнение БП, если нет - ждём следующего витка цикла.
2. Используемые блоки
Опишем используемые блоки и их функциональность, которую далее используем в решении задачи.
2.1 Изменение переменных
Блок позволяет присваивать переменным шаблона БП какие-то значения. Например, взятые из текущего элемента, к которому прикреплён БП.
2.2 PHP-код
Блок позволяет выполнять PHP-код (всегда ваш, капитан очевидность).
Здесь можно общаться с переменными шаблона и свойствами элемента списка с помощью двух способов.
1. Непосредственное обращение к переменной. Синтаксис обращения можете получить с помощью кнопочки с тремя точечками. Например, получим значение свойства элемента PAYED.

2. Спросить значение в ооп стиле. Замечу, что #ID_VARIABLE - это идентификатор переменной шаблона, а не её имя

Задание значения переменной осуществляется при помощи функции SetVariable.
Логгирование (например, в целях дебага) можно осуществлять с помощью обращения к методу WriteToTrackingService. Вообще тут доступны два способа (документация
2.3 Цикл
Нам нужно условие типа PHP-код. Однако, следует понимать, что здесь существуют некоторые особенности.
1. Отсутствует доступ к текущему активити через $this, хотя есть доступ к некоторым методам через $ownerActivity.
2. PHP-код, добавленный в условие цикла, выполняется битриксом через eval.
3. PHP-код должен возвращать логическое значение true или false
Если код возвращает true, то цикл продолжается. При false, соответственно, прерывается.
2.4 Пауза в выполнении
Как следует из названия, блок заставляет БП приостановиться на указанное время, либо выполниться в указанное время.
Возможно задать промежуток в секундах, минутах, часах и в днях.
3. Составляем демо-шаблон
На основе того, что я знаю, составляю шаблон. Не очень понятно как получить свойство элемента внутри условия Цикла, поэтому я сначала присваиваю значение переменной payed_to, а потом получаю его в условии Цикла. Собственно говоря, для этого я и заводила эту переменную. Ну и для сопутствующего дебага, конечно.
Как перетаскивать блоки в дизайнере, я надеюсь, вы и сами разберётесь =)

3.1 Изменение переменных

3.2 PHP-код

3.3 Цикл

3.4 PHP-код. Вывод в лог.

А дальше и так понятно =)
4. Тестирование и лог
Создаём тестового клиента в списке. Запускаем для него из диалога действий требуемый БП ручками.

Если появилась надпись Бизнес-процесс по шаблону 'Уведомление об отключении' успешно запущен, значит мы уже на пути к цели =)
Возвращаемся в список наших клиентов. Смотрим в последний столбец таблицы - там список всех БП, привязанных к данному элементу.
Под именем БП есть статус, нажав на который можно попасть в лог действий для данного БП текущего элемента.
В моих изысканиях мне помогли следующие источники.
Просмотров:
19122