PHP код

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

Действие позволяет выполнить произвольный PHP код. Доступно только для коробочной версии «Битрикс24».

  Описание

Действие имеет один единственный параметр PHP код с полем для внесения кода. Код указывается без открывающих и закрывающих тегов (<?, ?>).

Внимание! Задавать 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(). Это приведет к поломке текущего бизнес-процесса, а также затронет другие бизнес-процессы на этом же хите.

 Полезные уроки по теме:

  Примеры кода

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. Как преобразовать формат поля документа и использовать его в дальнейшем?

Рассмотрим пример преобразования поля документа Пользователь в понятную форму для того, чтобы использовать его при отправке сообщения:

  1. В шаблоне бизнес процесса следует создать переменную для хранения преобразованного значения поля документа;
  2. Укажем в действии PHP-код приблизительно следующее:
    $rsUser = CUser::GetByID({=Document:PROPERTY_USER});
    $arUser = $rsUser->Fetch();
    $this->SetVariable('#Имя_переменной#', $arUser[NAME].' '.$arUser[SECOND_NAME].' '.$arUser[LAST_NAME]);
    
  3. После чего в блоке, используемом для уведомления, необходимо уже использовать вывод данной переменной вместо поля документа.

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);


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

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

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