Альтернативный вариант (работает в 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