PHP код
Действие позволяет выполнить произвольный PHP код. Доступно только для коробочной версии «Битрикс24».
Описание
Действие имеет один единственный параметр PHP код с полем для внесения кода. Код указывается без открывающих и закрывающих тегов (<?
, ?>
).
Для написания кода и работы с сущностями сайта используйте API:
Рекомендации
Не рекомендуется использовать в теле кода стандартную подстановку значений бизнес-процессов в фигурных скобках {=...}
. Такие выражения нередко содержат параметры, которые может изменить любой пользователь портала, даже не имеющий необходимых прав.
Например, вместо конструкции {=Variable:COMPANY_NAME}
лучше использовать $root->GetVariable('COMPANY_NAME')
.
Cчитать поле документа в переменную можно таким образом:
// Считываем поле документа NAME в переменную $documentService = $this->workflow->GetService("DocumentService"); $document = $documentService->getDocument($this->getDocumentId()); $fieldValue = $document['NAME'];
, где NAME – это поле документа (его название), а $fieldValue – произвольная переменная, в которую мы сохраняем значение поля документа для использования в коде.
Не рекомендуется использовать функцию exit()
. Это приведет к поломке текущего бизнес-процесса, а также затронет другие бизнес-процессы на этом же хите.
Полезные уроки по теме:
- Произвольный PHP код в бизнес-процессе – глава об использовании действия PHP код для разработчиков;
- Добавление информации в инфоблок из бизнес-процесса – пример, в котором значения из пользовательских полей списка с помощью бизнес-процесса и действия PHP код записываются в пользовательские свойства инфоблока.
Примеры кода
1. Как установить значение переменной?
$this->SetVariable('Variable1', 12345);
где:
Variable1
– идентификатор переменной, которой будет присвоено значение (число 12345).
2. Как записать нескольких пользователей в переменную типа "Пользователь"?
$this->SetVariable("user", array("user_1", "user_2"));
где:
array("user_1", "user_2")
– массив пользователей в формате user_[идентификатор_пользователя_в_системе]
.
3. Как при помощи PHP кода и существующих значений полей/переменных получить название элемента инфоблока?
$arFilter = Array("IBLOCK_ID" => {=Variable:Variable1_printable}, "ID" => {=Document:PROPERTY_1}); $dc = CIBlockElement::GetList(array(), $arFilter, array("NAME")); $br = $dc->Fetch(); $Pbrr = $br["NAME"]; $this -> SetVariable('Variable2', $Pbrr);
где:
{=Variable:Variable1_printable}
– значение переменной, в которой содержится идентификатор инфоблока;
{=Document:PROPERTY_1}
– поле документа, содержащее идентификатор элемента инфоблока;
Variable2
– идентификатор переменной, которой будет присвоено вычисленное название элемента инфоблока.
4. Как преобразовать формат поля документа и использовать его в дальнейшем?
Рассмотрим пример преобразования поля документа Пользователь в понятную форму для того, чтобы использовать его при отправке сообщения:
- В шаблоне бизнес процесса следует создать переменную для хранения преобразованного значения поля документа;
- Укажем в действии PHP-код приблизительно следующее:
$rsUser = CUser::GetByID({=Document:PROPERTY_USER}); $arUser = $rsUser->Fetch(); $this->SetVariable('#Имя_переменной#', $arUser[NAME].' '.$arUser[SECOND_NAME].' '.$arUser[LAST_NAME]);
- После чего в блоке, используемом для уведомления, необходимо уже использовать вывод данной переменной вместо поля документа.
5. Как считать поле документа в переменную, произвести с ней какие-либо действия и передать результат в переменную шаблона бизнес-процесса?
// Считываем поле документа PROPERTY_175 в переменную $documentService = $this->workflow->GetService("DocumentService"); $document = $documentService->getDocument($this->getDocumentId()); $fieldValue = $document['PROPERTY_175']; // Производим действия с переменной. Например обрабатываем функцией myFunc. $myVar = myFunc($fieldValue); // Пишем значение из переменной $myVar в переменную шаблона бизнес-процесса Variable1 $this->SetVariable('Variable1', $myVar);
и Ваше мнение важно для нас