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

Установите галочку Активировать Бизнес-процессы и нажмите Сохранить.

Теперь можно приступить к созданию бизнес-процесса. Нажмите шестеренку и выберите Бизнес-процессы.

Далее Создать –> Создать последовательный бизнес-процесс.

Введите название процесса, уберите автоматический запуск и скройте из меню ручного запуска, нажмите Сохранить.

Перед вами появится пустой бизнес-процесс. Приступим к созданию.

Параметры
Нажмите Параметры шаблона и перейдите во вкладку Параметры. Создайте два параметра:
- Новое название (new_name) – обязательный, тип строка;
- ID папки (IDpapki) – обязательный, тип строка.

Переменные
Далее перейдите во вкладку Переменные. Создайте переменные:
- Название файла (File_name) – множественная, тип строка;
- Новое название файла (File_new_name) – тип строка;
- Значение итератора (Iterator_value) – тип строка;
- Существует ли файл с таким именем (File_exists) – тип строка;
- Счетчик (Num) – тип число;
- Новая версия (New_ver) – тип строка;
- ID файла (IDfile) – тип строка;
- Проверка имени (Check_name) – тип строка;

Нажимаем Сохранить и приступаем непосредственно к процессу.
Действия бизнес-процесса Переименование файла
Сначала выведем в лог переданные параметры.

Параметры: ID папки и название
Действие Запись в отчет
- Заголовок — Параметры: ID папки и название;
- Текст — {=Template:IDpapki > printable}, {=Template:new_name > printable}
- Загрузить отчет для доступа из бизнес-процесса — устанавливаем галочку.
Изменение переменных
С помощью действия Изменение переменных обнулим переменные:
- Счетчик
- Существует ли файл с таким именем
- Новая версия
- ID файла
- Проверка имени
- Значение итератора
А также в переменную Название файла запишем значения из параметра Новое название, разбитого на части точками (для этого мы используем функцию explode). Это нужно для дальнейшего получения расширения файла.
Название файла = {{=explode(‘.’,{{Название файла}})}}

Итератор
Далее добавим Итератор по переменной Название файла.


Внутри присвоим переменной Значение итератора значение итератора с помощью вставки значения.
- Значение итератора = {=A4459_94292_15870_27250:Value}



Новое название файла
Действие Изменение переменных.
- Новое название файла = {=Template:new_name}.{=Variable:Iterator_value}
Т.е. Новое название файла равно параметр Новое название точка переменная Значение итератора.
Новое название файла
- Заголовок — Новое название файла;
- Текст — {=Variable:File_new_name > printable};
- Загрузить отчет для доступа из бизнес-процесса — устанавливаем галочку;


Проверка файла с таким именем
Действие PHP код.
- PHP код – код ниже.
Это действие есть только в коробке. В маркете есть приложения для облака с REST API, но в данном случае мы используем обращение непосредственно к базе данных.
global $DB;
$folderID = {=Template:IDpapki};
$fileNAME = {=Template:new_name > printable};
$sql = "select ID from b_disk_object where PARENT_ID=$folderID AND NAME like '$fileNAME%'";
$arFile = $DB->Query($sql)->Fetch();
if ($arFile['ID'] > 0)
{ // файл есть
$this->SetVariable('Check_name', $fileNAME);
$this->SetVariable('IDfile', $arFile['ID']);
$this->SetVariable('File_exists', 'Да');
}
else
{ // файла нет
$this->SetVariable('Check_name', $fileNAME);
$this->SetVariable('File_exists', 'Нет');
}
- $folderID – ID папки, в которой лежит файл;
- $fileNAME – название файла без расширения, вставляем параметр Новое название;
- ‘Check_name’ – переменная Проверка имени;
- ‘IDfile’ – переменная ID файла;
- ‘File_exists’ – переменная Существует ли файл с таким именем;
Проверка имени, есть ли файл, ID файла
- Заголовок — Проверка имени, есть ли файл, ID файла;
- Текст — {=Variable:Check_name > printable}, {=Variable:File_exists > printable}, {=Variable:IDfile > printable};
- Загрузить отчет для доступа из бизнес-процесса — устанавливаем галочку;

Файл с таким именем уже есть?
Добавим конструкцию Условие.

Ветка Да

Да
- Тип условия — значение переменной;
- Свойство или переменная — Существует ли файл с таким;
- Условие — равно;
- Значение — Да.
Разветвление
- Заголовок — Разветвление;
- Текст — Файл с таким именем уже есть;
- Загрузить отчет для доступа из бизнес-процесса — устанавливаем галочку;

Цикл


Цикл
Выполняет свои поддействия до тех пор, пока выполняется заданное условие:
- Заголовок – Цикл;
- Тип условия – значение переменной;
- Свойство или переменная – Существует ли файл с таким именем;
- Условие – равно;
- Значение – Да.
Счетчик
Действие Изменение переменных:
- Заголовок – Счетчик;
- Переменная – Счетчик;
- Значение – ={=Variable:Num}+1


Счетчик
Действие Запись в отчет
- Заголовок — Счетчик;
- Текст — {=Variable:Num > printable}
- Загрузить отчет для доступа из бизнес-процесса — устанавливаем галочку.
Новая версия
Действие Изменение переменных:
- Заголовок – Новая версия;
- Переменная – Новая версия;
- Значение – {=Template:new_name}_v{=Variable:Num}


Новая версия
Действие Запись в отчет
- Заголовок — Новая версия;
- Текст — {=Variable:New_ver > printable}
- Загрузить отчет для доступа из бизнес-процесса — устанавливаем галочку.
Проверка файла с таким именем
Действие PHP код.
- PHP код – код ниже.
Это действие есть только в коробке. В маркете есть приложения для облака с REST API, но в данном случае мы используем обращение непосредственно к базе данных.

global $DB;
$folderID = {=Template:IDpapki};
$fileNAME = {=Variable:New_ver};
$sql = "select ID from b_disk_object where PARENT_ID=$folderID AND NAME like '$fileNAME%'";
$arFile = $DB->Query($sql)->Fetch();
if ($arFile['ID'] > 0)
{ // файл есть
$this->SetVariable('Check_name', $fileNAME);
$this->SetVariable('IDfile', $arFile['ID']);
$this->SetVariable('File_exists', 'Да');
}
else
{ // файла нет
$this->SetVariable('Check_name', $fileNAME);
$this->SetVariable('File_exists', 'Нет');
}
- $folderID – ID папки, в которой лежит файл;
- $fileNAME – название файла без расширения, в этот раз вставляем переменную Новая версия;
- ‘Check_name’ – переменная Проверка имени;
- ‘IDfile’ – переменная ID файла;
- ‘File_exists’ – переменная Существует ли файл с таким именем;

Проверка имени, есть ли файл, ID файла
- Заголовок — Проверка имени, есть ли файл, ID файла;
- Текст — {=Variable:Check_name > printable}, {=Variable:File_exists > printable}, {=Variable:IDfile > printable};
- Загрузить отчет для доступа из бизнес-процесса — устанавливаем галочку;
Файл с таким именем уже есть?
Да:
- Тип условия – значение переменной;
- Свойство или переменная – Существует ли файл с таким именем;
- Условие – равно;
- Значение – Да.
Нет:
- Тип условия – Истина.


Разветвление
Под условием Да
- Заголовок — Разветвление;
- Текст — Файл с таким именем уже есть;
- Загрузить отчет для доступа из бизнес-процесса — устанавливаем галочку;
Под условием Нет
- Заголовок — Разветвление;
- Текст — Файла с таким именем нет;
- Загрузить отчет для доступа из бизнес-процесса — устанавливаем галочку.
Название файла
Действие Изменение полей документа.
- Заголовок – Название файла;
- Поле – Название файла;
- Значение – {=Variable:New_ver}.{=Variable:Iterator_value}

Ветка Нет

Нет
- Тип условия — Истина.
Разветвление
- Заголовок — Разветвление;
- Текст — Файла с таким именем нет;
- Загрузить отчет для доступа из бизнес-процесса — устанавливаем галочку;


Название файла
Действие Изменение полей документа.
- Заголовок – Название файла;
- Поле – Название файла;
- Значение – {=Variable:File_new_name}
Процесс переименования и версионирования файла на Диске готов. Теперь рассмотрим как его запускать и пользоваться.
Создадим простенький процесс в статусе смарт-процесса по запросу файла у пользователя.
Создание процесса в Смарт-процессе
В смарт-процессе, помимо стандартных, создано поле Папка с файлами типа Ссылка. Заходим в Роботы, в нужном статусе создаем процесс.


Создать папку в Диске
- Заголовок — Создать папку в Диске;
- Где создать — Папка Диска;
- Папка — выбираем папку на общем Диске;
- Название папки – {{Название}} (т.е. папка будет называться так же как и элемент смарт-процесса);
- Создатель папки – можно указать при желании, а можно оставить пустым.


Папка с файлами
С помощью действия Изменение полей документа записываем в поле элемента смарт-процесса Папка с файлами ссылку на созданную папку.
- Заголовок – Папка с файлами;
- Поле – Папка с файлами (автоматически);
- Значение – https://адрес сайта/bitrix/tools/disk/focus.php?folderId={=A52638_95563_64025_51594:ObjectId}&action=openFolderList&ncc=1
{=A52638_95563_64025_51594:ObjectId} – ID созданной папки из вставки значения. Также обратите внимание, что ссылка вставляется в верхнее поле.
Уведомление Ответственного
- Заголовок — Уведомление Ответственного;
- Отправитель уведомления — {{Ответственный}};
- Получатель уведомления — {{Ответственный}};
- Текст уведомления для сайта –
Необходимо разработать РКД по ТКП.
Перейдите в [url=/company/personal/bizproc/{=Workflow:ID}/]задание[/url].
- Тип уведомления – Персонализированное уведомление (с аватаром).


Разработка РКД
Действия Запрос дополнительной информации.
- Заголовок – Разработка РКД;
- Заполняют сотрудники – {{Ответственный}};
- Название задания – Разработка РКД;
- Описание задания – Разработайте РКД по ТКП.
- Текст кнопки в задании – Отправить;
- Показывать поле ввода комментария – Да;
- Обязательность комментария – Нет;
- Метка для поля комментария — Комментарий;
- Устанавливать текст статуса — Да;
- Текст статуса — Ожидание разработки РКД;
- Период ожидания информации – если оставить пустым, то задание будет висеть до выполнения, если же задать период, то по его истечению процесс пойдет дальше, не дожидаясь ответа пользователя.
- Ограничить доступ – Нет;
- Тип делегирования – Никому;


Внизу действия нажмите Добавить поле и введите параметры переменной:
- Название – РКД;
- Код – RKD;
- Описание – по желанию;
- Тип – Файл;
Обязательное и множественное.
Нажмите Сохранить дважды.
Загрузить в Диск
- Заголовок — Загрузить в Диск;
- Куда загрузить — Папка Диска;
- Папка — {=A52638_95563_64025_51594:ObjectId};
- Файл для загрузки – {=Variable:RKD};
- Загружать от имени – можно указать при желании, а можно оставить пустым.

{=A52638_95563_64025_51594:ObjectId} – ID созданной папки из вставки значения.
{=Variable:RKD} – Переменная РКД, созданная в предыдущим действии.

Запуск бизнес-процесса Переименование файла
Действие Запуск бизнес-процесса.
- Заголовок – Запуск бизнес-процесса Переименование файла;
- ID документа – {=A19763_57724_76073_27442:ObjectId};
- Сущность – Диск;
- Тип документа – Общий диск;
- Шаблон – Переименование файла;
- Ожидать завершения бизнес-процесса — устанавливаем галочку;
Параметры бизнес-процесса:
- Новое название – РКД;
- ID папки – {=A52638_95563_64025_51594:ObjectId}.
{=A19763_57724_76073_27442:ObjectId} – ID файла, который должен приложить пользователь;
{=A52638_95563_64025_51594:ObjectId} – ID созданной папки из вставки значения.


Детально об объекте Диска
- Заголовок — Детально об объекте Диска;
- Исходный объект — {=A19763_57724_76073_27442:ObjectId};


Добавить комментарий
Действие Добавить комментарий.
- Заголовок – Добавить комментарий;
- Комментарий – [COLOR=red]Процесс:[/COLOR] {=A35752_72707_47372_481:InfoUser > friendly} [COLOR=green]разработал(а)[/COLOR] [url=/bitrix/tools/disk/focus.php?objectId={=A49921_69085_9283_48931:ObjectId}&cmd=show&action=showObjectInGrid&ncc=1]{=A49921_69085_9283_48931:Name}[/url]. {=A35752_72707_47372_481:Comments};
- Автор – {=A35752_72707_47372_481:InfoUser};
- [COLOR=red]текст[/COLOR]– красный цвет;
- {=A35752_72707_47372_481:InfoUser > friendly} – пользователь, выполнивший задание, берется из вставки значения – дополнительные результаты (> friendly – модификатор для нормального отображения имени);
- [COLOR=green]текст[/COLOR] – зеленый цвет;
- {=A49921_69085_9283_48931:ObjectId} – ID файла из вставки значения – дополнительные результаты – детально об объекте диска;
- {=A49921_69085_9283_48931:Name} – название файла из вставки значения – дополнительные результаты – детально об объекте диска;
- {=A35752_72707_47372_481:Comments} – комментарии пользователя;
В этом процессе какой бы файл ни приложил пользователь, он всегда будет называться РКД. Версионирование здесь не пригодится. Если добавить согласование и при отклонении отправлять на доработку, то тогда уже файлы будут называться РКД, РКД_v2, РКД_v3 и т.д.