...

Удаление связей при удалении элемента приложений

Тема в разделе "Вопросы по платформе", создана пользователем d.nikonorov, 12 дек 2023.

  1. d.nikonorov

    d.nikonorov Участник

    Версия сервера: 2023.10.12
    После обновления такой баг, что при удалении элемента приложения не удаляются его связи с другими элементами приложений, как было ранее (так по всей системе). Пример
    upload_2023-12-12_17-23-44.png
    upload_2023-12-12_17-24-37.png
  2. d.nikonorov

    d.nikonorov Участник

    Примечание. В примере контакт - связанное приложение
  3. lagutkina

    lagutkina Техническая поддержка

    Это нормальное поведение системы и не является багом, сделано специально, чтобы при восстановлении удаленного элемента связи не терялись.
  4. d.nikonorov

    d.nikonorov Участник

    Получается нужно сначала удалить связи, а потом удалить элемент приложения. Иначе при создании нового элемента приложения эта связь в удаленных элементах может помещать созданию новых.
    [​IMG]
    Прошу рассмотреть вариант добавления выбора опции типа удаления в приложении: без удаления связей (по умолчанию) и с удалением всех связей
  5. lagutkina

    lagutkina Техническая поддержка

    Подскажите, пожалуйста, у вас поставка Saas или On-Premises?
  6. d.nikonorov

    d.nikonorov Участник

    On-Premises
  7. lagutkina

    lagutkina Техническая поддержка

    Подскажите еще версию системы?
  8. d.nikonorov

    d.nikonorov Участник

    Версия сервера: 2023.10.12
  9. lagutkina

    lagutkina Техническая поддержка

    Данная ошибка уже известна, исправление включено в версию - 2023.11. В качестве временного решения для исправления ошибки можно на сервере добавить переменную окружения ELMA365_COLLECTOR_ITEM_SAVER_V2_ALLOWED = false После обновления на версию 2023.11 нужно будет изменить значение на ELMA365_COLLECTOR_ITEM_SAVER_V2_ALLOWED = true
  10. d.nikonorov

    d.nikonorov Участник

    Спасибо
  11. Tamara

    Tamara Новичок

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

    d.nikonorov Участник

    Еще не тестил вариант от тех поддержки, описанный выше "В качестве временного решения для исправления ошибки можно на сервере добавить переменную окружения ELMA365_COLLECTOR_ITEM_SAVER_V2_ALLOWED = false После обновления на версию 2023.11 нужно будет изменить значение на ELMA365_COLLECTOR_ITEM_SAVER_V2_ALLOWED = true". Можете попробовать его пока
    Последнее редактирование: 22 дек 2023
  13. d.nikonorov

    d.nikonorov Участник

    Альтернативный вариант (работает в 2023.11.4):
    1. Создать модуль для удаления (лучше отдельно, чтобы его удобно вкл/выкл)
    2. Создать модуль обработки событий удаления элементов приложения
    3. Добавить действие для очистки переменных:

    Код:
    
    // Удаление всех объектов в элементе приложения

    async function action(): Promise<void> {

        
    let appCard await Context.data.__item!.fetch();

        if (
    appCard!.data.__name.includes("_deleted")==false){

            
    await appCard!.restore();

            
    let appCard2 await Context.data.__item!.fetch();

            
    appCard2!.data.__name += "_deleted"// Надо обязательно изменить название при удалении, иначе удаление уйдет в бесконечный цикл
         
            
    for (const key in appCard2!.fields) {
                if (!
    key.startsWith("__")) { // Игнорировать системные переменные, например __name
                    
    if (appCard2!.data[key] != undefined) { // Игнорировать пустые переменные
                        
    appCard2!.data[key] = undefined// Очистить связи
                    
    }
                }
            }


            
    await appCard2!.save();

            
    await appCard2!.delete();

        }

    }
    Примечания:
    1. Как я понял, удаленные элементы теперь нельзя редактировать, поэтому нужно их сначала восстановить, очистить и потом снова удалить
    2. Так как удаление в таком случае происходит 2 раза, то нужно для исключения бесконечного цикла обработчика событий изменить название элемента и проверить при повторном вызове в обработчике событий. Я сделал это через добавление "_deleted" в названии карточки, и проверки, но может есть вариант проще
    3. Надо доработать код, чтобы он очищал только связи приложений (руки не дошли, так как обновление платформы откатили, чтобы лучше проверить все изменения). Сейчас очищает все пользовательские переменные. По хорошему нужно фильтровать, чтобы тексты, пользователей и прочее не удалял.
    Последнее редактирование: 22 дек 2023
  14. lagutkina

    lagutkina Техническая поддержка

    Для того, чтобы очистить связи приложений, измените условие следующим образом:
    Код:
    
     if ((appCard2!.data[key] != undefined) && (typeof appCard2!.data[key] == "object"))// Игнорировать пустые переменные, но брать объекты приложений
    {
                        
    appCard2!.data[key] = undefined// Очистить связи
    }