Добавление информации в инфоблок из бизнес-процесса

Урок 158 из 365
Автор: Роберт Басыров
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
3 из 5
Просмотров: 11255
Ограничения по редакциям: Старт, Стандарт, Малый бизнес

Как добавить информацию из Бизнес-процесса

Рассмотрим пример, в котором значения из пользовательских полей списка с помощью бизнес-процесса будут записываться в пользовательские свойства инфоблока.

После заполнения полей списка Название, Строка и Файл (несколько файлов) и последующего сохранения, необходимо создать новый элемент в нужном инфоблоке. В пользовательские свойства этого элемента вносятся значения, указанных выше, полей списка. Название этого элемента будет соответствовать названию создаваемого элемента списка.


  • Для начала создадим в списке дополнительные поля:

    Значения из этих полей с помощью бизнес-процесса будут записываться в пользовательские свойства инфоблока.

    Для поля Идентификатор инфоблока зададим значение по умолчанию , чтоб каждый раз не заполнять его при создании нового элемента списка. В примере это будет инфоблок с идентификатором =1. Это поле создано лишь для наглядности Идентификатор инфоблока можно также прописать прямо в коде (см. ниже) или переменной бизнес-процесса. .

  • Перейдем к инфоблоку. На странице настроек инфоблока, закладка Свойства (Контент > Инфоблоки > Типы инфоблоков > требуемый_инфоблок), создадим новые пользовательские свойства, в которые у нас и будут записываться значения из полей списка.

Перейдем к самому бизнес-процессу. Создадим шаблон последовательного бизнес-процесса.

  • Создадим 2 переменные , которые будут использоваться в отладочных целях:

    • ELEMENT_ID - переменная бизнес процесса, в которую будет записан ИД созданного элемента инфоблока в случае удачи,
    • ERROR - переменная бизнес процесса, в которую будет записан текст ошибки в случае неудачи создания элемента инфоблока.
  • Возьмем код из примера АПИ-вызова CIBlockElement::Add

    Исходный код

    и модифицируем его:

    <?
    CModule::IncludeModule("iblock"); //подключаем модуль инфоблоков
    
    $el = new CIBlockElement;
    
    $PROP = array();
    $PROP[IB_CUSTOM_PROPERTY] = {=Document:PROPERTY_117};
    // задаем для свойства инфоблока "IB_CUSTOM_PROPERTY" типа "строка" значение из поля документа "PROPERTY_117"  
    
    $files = explode(', ',"{=Document:PROPERTY_118}");
    foreach($files as $key=>$value)
     {
      $PROP[IB_FILE_PROPERTY]['n'.$key]=array('VALUE'=> CFile::MakeFileArray($value), 'DESCRIPTION' => '');
     }  
    // задаем для свойства инфоблока "IB_FILE_PROPERTY" типа "файл" (множественное) значение из поля документа "PROPERTY_118"	
    	
    $arLoadProductArray = Array(
      "IBLOCK_ID" = >{=Document:PROPERTY_119},	
    // задаем  Идентификатор инфоблока, в котором будет создан элемент, из поля документа "PROPERTY_119" типа "строка" 	
      "NAME" => {=Document:NAME},
    // задаем Название создаваемого элемента инфоблока из поля документа "Название"	
     "PROPERTY_VALUES"	=> $PROP,
    );
    
    $ELEMENT_ID = $el->Add($arLoadProductArray);
    
    if($ELEMENT_ID > 0)
     $this->SetVariable('ELEMENT_ID', $ELEMENT_ID);
    // задаем для переменной бизнес-процесса "ELEMENT_ID" значение, содержащее номер созданного элемента инфоблока, в случае, если он будет создан	
    else
     $this->SetVariable('ERROR', $el->LAST_ERROR);
    // задаем для переменной бизнес-процесса "ERROR" значение, содержащее текст ошибки, в случае, если  элемент инфоблока не будет создан	
    ?>
    

    Этот код будет, с помощью АПИ-методов, создавать новый элемент инфоблока, в котором пользовательские свойства IB_CUSTOM_PROPERTY, IB_FILE_PROPERTY, а также название элемента инфоблока будут содержать значения пользовательских полей PROPERTY_117, PROPERTY_118, PROPERTY_119 и значение поля название элемента списка.

    После чего добавим в шаблон действие PHP-код, в котором укажем наш измененный код.

  • Добавим в шаблон действие Запись в отчет, в котором укажем следующий текст:
    {=Variable:ELEMENT_ID_printable}, {=Variable:ERROR_printable}

    Этим самым мы запишем в отчет по выполнению бизнес-процесса значение отладочных переменных для анализа в случае ошибок.

Документация по теме:


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

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

Мы стараемся сделать документацию понятнее и доступнее,
и Ваше мнение важно для нас