...

удалить элемент орг стуктуры

Тема в разделе "Вопросы по платформе", создана пользователем Griffith88, 13 ноя 2023.

  1. Griffith88

    Griffith88 Участник

    фрагмент кода
    Код:
    
    async function removeItems(): Promise<void> {
        
    Context.data.logDeleted ''
        
    Context.data.logDeletedDep ''
        
    const org await System.organisationStructure.fetchTree()
        
    let root org.getRoot()
        
    let root_list = [root]
        
    let item_liststring[] = []
        while (
    root_list.length 0) {
            for (
    let item of root_list) {
                
    root_list root_list.filter(=> !== item)
                
    item_list.push(item.id)
                
    let childs item.getChildren()
                
    root_list = [...root_list, ...childs]
            }
        }   
        const 
    actual_liststring[] = Context.data.itemlist
        
    const items_to_delete_ids item_list.filter(=> !actual_list.find(=> === x))
        if (
    items_to_delete_ids) {
            for (
    let item_id of items_to_delete_ids) {
                
    let child root.find(=> f.id === item_id)
                if (
    child) {
                    
    let parent child.getParent()
                    if (
    parent) {
                        if (
    child.isDepartment()) {
                            
    Context.data.logDeletedDep += ` ${child.data.name} `
                        } else {
                            
    Context.data.logDeleted += ` ${child.data.name} `
                        }
                        
    parent.removeChild(child)
                    }
                }
            }
        }
        const 
    errors await org.validate()
        if (
    errors.length === 0) {
            
    Context.data.log4 =  `Успешно сохранено`
        } else {
            for (
    let err of errors) {
                
    Context.data.log4 += ` ,${err.desc}`
            }
            return
        }

        
    await System.organisationStructure.save(org)

    }
    Пытаюсь удалить элемент орг стуктуры, при сохранении нарываюсь на ошибку invalid sort.
    Есть еще какие то методы удалить элемент орг структуры?
  2. Griffith88

    Griffith88 Участник

    Нашел решение, с помощью moveAfter я сначала сдвигаю индекс сортировки до максимума, потом уже произвошу удаление
    Код:
    
    async function removeItems(): Promise<void> {
        
    Context.data.logDeleted ''
        
    Context.data.logDeletedDep ''
        
    let org await System.organisationStructure.fetchTree()
        
    let root org.getRoot()
        
    let root_list = [root]
        
    let item_liststring[] = []
        while (
    root_list.length 0) {
            for (
    let item of root_list) {
                
    root_list root_list.filter(=> !== item// удаляем из списка корневых элементов уже обработанный элемент
                
    item_list.push(item.id)
                
    let childs item.getChildren()
                
    root_list = [...root_list, ...childs]
            }
        }   
        const 
    actual_liststring[] = Context.data.itemlist
        
    const items_to_delete_ids item_list.filter(=> !actual_list.find(=> === x))
        if (
    items_to_delete_ids) {
            for (
    let item_id of items_to_delete_ids) {
                
    org await System.organisationStructure.fetchTree()
                
    root org.getRoot()
                
    let child root.find(=> f.id === item_id)
                if (
    child) {
                    
    let parent child.getParent()
                    if (
    parent) {
                        const 
    children parent.getChildren()
                        const 
    children_sort_index_max Math.max(...children.map(=> f.data.sort!))
                        if (
    child.data.sort! !== children_sort_index_max) { // проверяем, что элемент находится не в конце
                            
    let shift children_sort_index_max child.data.sort// вычисляем на сколько позиций сдвинуть в конец

                            
    for (let i 1<= shifti++) {
                                
    child.moveAfter()  // двигаем                  
                            
    }
                            const 
    errors await org.validate()
                                if (
    errors.length === 0) {
                                    
    Context.data.log =  `Успешно сохранено`
                                } else {
                                    for (
    let err of errors) {
                                        
    Context.data.log += ` ,${err.desc}`
                                    }
                                    return
                                }
                            
    await System.organisationStructure.save(org)                   
                        }
                        
    org await System.organisationStructure.fetchTree() // Заново фетчим орг структуру с уже сдвинутыми элементами
                        
    root org.getRoot()
                        
    child root.find(=> f.id === item_id)!
                        
    parent child.getParent()!
                        
    parent.removeChild(child// Спокойно удаляем
                        
    if (child.isDepartment()) {
                            
    Context.data.logDeletedDep += ` ${child.data.name} `
                        } else {
                            
    Context.data.logDeleted += ` ${child.data.name} `
                        }
                        const 
    errors await org.validate()
                                if (
    errors.length === 0) {
                                    
    Context.data.log =  `Успешно сохранено`
                                } else {
                                    for (
    let err of errors) {
                                        
    Context.data.log += ` ,${err.desc}`
                                    }
                                    return
                                }
                        
    await System.organisationStructure.save(org)
                    }
                }
            }
        }   
    }
    Итоговое решение.