PHP код

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

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

  Описание

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

Внимание! Задавать PHP-код может только пользователь с правами администратора.

Для написания кода и работы с сущностями сайта используйте API:

  Рекомендации


  • Использование переменных

    Не рекомендуется использовать стандартную подстановку значений бизнес-процессов в фигурных скобках {=...}. Вместо этого используйте метод GetVariable('VARIABLE_NAME').

    $companyName = $this->GetVariable('COMPANY_NAME');
  • Работа с полями документа

    Для чтения поля документа в переменную используйте следующий код:

    $documentService = $this->workflow->GetService("DocumentService");
    $document = $documentService->getDocument($this->getDocumentId());
    $fieldValue = $document['NAME']; // NAME — название поля документа
  • Глобальные переменные и константы

    Для работы с глобальными переменными используйте API \Bitrix\Bizproc\Workflow\Type\GlobalVar.

    Пример получения значения глобальной переменной:

    $globalVar = \Bitrix\Bizproc\Workflow\Type\GlobalVar::getById('orderVacancy');
    if ($globalVar) {
        $value = $globalVar['Default']; // Получаем значение глобальной переменной
        $this->SetVariable('GlobalVarValue', $value); // Сохраняем значение в переменную бизнес-процесса
    }

    Пример изменения значения глобальной переменной:

    $globalVar = \Bitrix\Bizproc\Workflow\Type\GlobalVar::getById('orderVacancy');
    if ($globalVar) {
        $globalVar['Default'] = 'Y'; // Изменяем значение
        \Bitrix\Bizproc\Workflow\Type\GlobalVar::upsert('orderVacancy', $globalVar); // Сохраняем изменения
    }

    Пример получения значения глобальной константы:

    Bitrix\Main\Loader::includeModule('bizproc');
    use Bitrix\Bizproc\Workflow\Type\GlobalConst;
    
    $constId = 'Const123456789';
    $result = GlobalConst::getById($varId);

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

  Примеры кода

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С-Битрикс»