Битрикс. Бизнес-процессы. PHP-код.


Недавно ко мне обратился насяльника с просьбой помочь в написании бизнес-процесса (далее в статье БП) для автоматической отсылки писем клиентам, у которых подходит срок оплаты хостинга.
Для полноценной работы с дизайнером шаблонов БП потребуется администраторский доступ к корп-порталу.

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

Находим шаблоны, прикреплённые к списку клиентов хостинга.
3f23e76aa27dfb213f2f35fafbd69e5a.png


Создаём новый Последовательный БП. Битрикс предлагает нам вполне наглядный дизайнер шаблонов БП, к особенностям которого всё-таки придётся привыкнуть (впрочем, как и ко всему, что обладает объёмным синтаксическим и семантическим функционалом).
В диалоге Параметры шаблона находим третью вкладку Переменные и создаём строковую переменную с идентификатором payed_to и с таким же именем. Чуть позже увидим зачем нам эта переменная.
Заодно отключим автоматический запуск при создании и изменении. Эти галочки можно потом проставить, а для дебага они будут мешаться.

1. Общая логика
Для начала составим у себя в голове логику действий.

1. БП в цикле раз в сутки проверяет разницу между PAYED и текущим датавременем.
2. Если время кончилось, заканчиваем выполнение БП, если нет - ждём следующего витка цикла.

2. Используемые блоки
Опишем используемые блоки и их функциональность, которую далее используем в решении задачи.
2.1 Изменение переменных
Блок позволяет присваивать переменным шаблона БП какие-то значения. Например, взятые из текущего элемента, к которому прикреплён БП.
2.2 PHP-код
Блок позволяет выполнять PHP-код (всегда ваш, капитан очевидность).

Здесь можно общаться с переменными шаблона и свойствами элемента списка с помощью двух способов.
1. Непосредственное обращение к переменной. Синтаксис обращения можете получить с помощью кнопочки с тремя точечками. Например, получим значение свойства элемента PAYED.

ae862dc1777c8585794e24675f56fe8e.png 

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

80f6709934de8bb482793ce10e22cb89.png

Задание значения переменной осуществляется при помощи функции SetVariable.

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

3. Составляем демо-шаблон
На основе того, что я знаю, составляю шаблон. Не очень понятно как получить свойство элемента внутри условия Цикла, поэтому я сначала присваиваю значение переменной payed_to, а потом получаю его в условии Цикла. Собственно говоря, для этого я и заводила эту переменную. Ну и для сопутствующего дебага, конечно.
Как перетаскивать блоки в дизайнере, я надеюсь, вы и сами разберётесь =)
6a57019639c33e80d94e8eba7507f1bc.png

3.1 Изменение переменных
1861da6ee0d85eb2e631e560b37a90f0.png

3.2 PHP-код
3f25705e47715f84e8505a3a4accdd0f.png

3.3 Цикл
391744fea67e0fcac1bf95e933702eb5.png

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

А дальше и так понятно =)

4. Тестирование и лог
Создаём тестового клиента в списке. Запускаем для него из диалога действий требуемый БП ручками.
93b7fb2acffcc747f9e09b96d3d3bffa.png

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

В моих изысканиях мне помогли следующие источники.



Просмотров: 12038