Страница 1 из 2
Тип поля Утвердить в Автоматизации
Добавлено: 18 фев 2020, 12:59
sanys
Доброго времени суток.
Столкнулся со следующей проблемой:
Использую поле "Согласование" типа Утвердить для формирования документа. Там указываются сотрудники, которые должны согласовать документ перед его утвержденим.
Отдельной кнопкой автоматизации назначаются согласующие сотрудники.
После согласования срабатывает атоматическое действие, изменяющее статус документа и позволяюещее утверждающему его Утвердить.
Но в случае, если по какой-то причине, документ надо доработать, то отметки о согласовании (поле "Согласование") должны сброситься. Для решения этой задачи есть кнопка Автоматизации, действие которой делает поле "Согласование" пустым.
Теперь кнопка, отправляющая документ на согласование снова доступна и после внесения измений, документ снова отправляется на согласование.
Вот здесь внимание: если на этом этапе выбрать сотрудников, которые были в прошлый раз и уже нажимали кнопка "Согласовано" (от поля типа Утвердить), то отметка об согласовании возвращается.
Думаю, что такое поведение не логично.
В то же время, если пересохранить запись с пустым полем и заного отправить документ на согласование, то пользователи должны поставить отмеку заново. А вот так более логично и понятно.
Возможно я не прав и такое поведение в автоматизации более корректно? Почему тогда через простое редактирование работает по-другому?
Re: Тип поля Утвердить в Автоматизации
Добавлено: 18 фев 2020, 15:15
support
Согласен с вами, подумаю над решением.
Re: Тип поля Утвердить в Автоматизации
Добавлено: 18 фев 2020, 17:54
support
Доработал код. Теперь если мы в автоматизации изменяем значения поля Утвердить, история очищается.
Что бы применить изменения, откройте файл plugins\ext\classes\processes\processes.php
Найдите строчку:
После нее добавьте:
Код: Выделить всё
case 'fieldtype_users_approve':
db_query("delete from app_approved_items where entities_id='" . $action_entity_id . "' and items_id in (" . implode(',',$selected_items) . ") and fields_id='" . $actions_fields['fields_id'] . "'");
break;
В результате должно получится:
Код: Выделить всё
switch($actions_fields['type'])
{
case 'fieldtype_users_approve':
db_query("delete from app_approved_items where entities_id='" . $action_entity_id . "' and items_id in (" . implode(',',$selected_items) . ") and fields_id='" . $actions_fields['fields_id'] . "'");
break;
case 'fieldtype_created_by':
$sql_data['created_by'] = $actions_fields['value'];
break;
default:
$sql_data['field_' . $actions_fields['fields_id']] = $actions_fields['value'];
break;
}
Проверяйте и сообщите результат.
Re: Тип поля Утвердить в Автоматизации
Добавлено: 19 фев 2020, 08:47
sanys
support писал(а): 18 фев 2020, 17:54
Доработал код. Теперь если мы в автоматизации изменяем значения поля Утвердить, история очищается.
Спасибо! Теперь работает предсказуемо!
Re: Тип поля Утвердить в Автоматизации
Добавлено: 19 фев 2020, 09:18
sanys
Хотя нет, я поторопился.
Теперь через автоматизацию поле можно только очистить (в действиях оставляем поле без пользоватлей).
Если же в дейстиви автоматизации для поля типа Утвердить сделать выбор пользователей в ручную
sanys писал(а): 18 фев 2020, 12:59
Отдельной кнопкой автоматизации назначаются согласующие сотрудники.
То изменение списка пользователей не происходит, а только сбрасываются отметки.
Re: Тип поля Утвердить в Автоматизации
Добавлено: 19 фев 2020, 09:59
support
Нашел причину.
Найдите строчку, которую вы добавили:
Код: Выделить всё
db_query("delete from app_approved_items where entities_id='" . $action_entity_id . "' and items_id in (" . implode(',',$selected_items) . ") and fields_id='" . $actions_fields['fields_id'] . "'");
И после нее добавьте:
Код: Выделить всё
$sql_data['field_' . $actions_fields['fields_id']] = $actions_fields['value'];
В результате должно получится так:
Код: Выделить всё
case 'fieldtype_users_approve':
db_query("delete from app_approved_items where entities_id='" . $action_entity_id . "' and items_id in (" . implode(',',$selected_items) . ") and fields_id='" . $actions_fields['fields_id'] . "'");
$sql_data['field_' . $actions_fields['fields_id']] = $actions_fields['value'];
break;
Проверяйте и сообщите результат.
Re: Тип поля Утвердить в Автоматизации
Добавлено: 19 фев 2020, 10:40
sanys
support писал(а): 19 фев 2020, 09:59
Нашел причину.
Все, теперь почти все верно.
Работает так:
В действии автоматизации
Без ручного ввода - поле пустое - Очищает списко пользователей и сбрасывает отметку.
Без ручного ввода - предустановленные значения - сбрасывает отметки.
Ручной ввод - Обновляет список пользователей и сбрасывает отметки.
Требуется ручной ввод - Оставляем пустое поле - очищает список и сбрасывает отметки (проверил на всякий случай, но ситуация странная

)
Ручной ввод и использовать значения - обновляет список пользователей и сбрасывает отметки (именно обновляет,
без сохранения уже установленных).
На счет последнего - не знаю кому может пригодится исользовать данный тип поля в таком ключе, но для меня сейчас не критично.
Re: Тип поля Утвердить в Автоматизации
Добавлено: 19 фев 2020, 11:20
support
Да, надо бы сохранять установленные отметки.
Изменил код
Код: Выделить всё
case 'fieldtype_users_approve':
if(strlen($actions_fields['value']))
{
db_query("delete from app_approved_items where entities_id='" . $action_entity_id . "' and items_id in (" . implode(',',$selected_items) . ") and fields_id='" . $actions_fields['fields_id'] . "' and users_id not in (" . $actions_fields['value'] . ")");
}
else
{
db_query("delete from app_approved_items where entities_id='" . $action_entity_id . "' and items_id in (" . implode(',',$selected_items) . ") and fields_id='" . $actions_fields['fields_id'] . "'");
}
$sql_data['field_' . $actions_fields['fields_id']] = $actions_fields['value'];
break;
Re: Тип поля Утвердить в Автоматизации
Добавлено: 19 фев 2020, 12:52
sanys
sanys писал(а): 19 фев 2020, 10:40
Ручной ввод и использовать значения - обновляет
список пользователей и сбрасывает отметки (именно обновляет,
без сохранения уже установленных).
support писал(а): 19 фев 2020, 11:20
Да, надо бы сохранять установленные отметки.
Здесь чуть-чуть не так поняли т.к. теперь не работает
sanys писал(а): 19 фев 2020, 10:40
Без ручного ввода - предустановленные значения - сбрасывает отметки.
Вместо этого отметки сохраняются.
Запутал я Вас совсем. Откачусь на предыдущий вариант, т.к. он для меня более подходящий.
А вообще вижу следующие юзеркейсы:
1. Отправить на согласование.
- Список пользователей заранее предустановлен или требуется ручной ввод.
2.Отменить согласование.
- Заранее предустановленный пустой список пользователей.
3.Добавить к согласованию.
- Сохраняем предыдующий список пользователей и добавляем новых пользователей.
- По хорошему просится сохранение отметок у тех, кто уже был в списке и сбрасывание отметок у тех, кого добавили.
Но это конкретно в этом случае. Кому-то может пригодится сбрасывание отметок и в этом случае (правда не могу придумать пример).
Мне кажется, надо делать проверку значения поля "Ввести вручную" ("Да", "Нет", "Да, и использовать значение") при настройке действия.
Для "Да" и "Нет" - сбрасывать отметки.
Для "Да, и использовать значние" - сохранять отметки, но только для ранее добавленных пользователей.
Re: Тип поля Утвердить в Автоматизации
Добавлено: 19 фев 2020, 13:49
support
Отметки не всегда нужно сбрасывать. Для того чтобы сбросить отметки, первым действием нужно установит пустое значение, а вторым действием уже назначать пользователей.