Выгрузка файлов
Скрипты
Разработка

Выгрузка файлов из детали файлов с сохранением вложенности

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

т.е. Файлы на детали "Файлы" распределяются по группам и их можно выгружать массово прописав в скрипт scr_FilesDetialGridArea:

function SaveFilesToDir(){
        var Dataset = FilesDetailGridArea.Dataset;     
        if (Dataset.IsEmptyPage) {
                return;
        }      
        var DirName = System.CreateObject('TSObjectLibrary.Value');    
        if (!System.SelectDirectory("Выберите папку", '', DirName)) {
                return;
        }      
        var FileName = '';
        Dataset.GotoFirst();
        while (!Dataset.IsEOF) {               
                if (Dataset.ValAsGUID('ItemTypeID') == ft_File) {
                        FileName =  DirName.Value + '\\' + GetDatasetFieldValue(Dataset, 'Link');
                        LoadFileFromDatabase(Dataset('ID'), FileName, false);      
                }
                Dataset.GotoNext();
        }
}

Но файлы выгружаются все в одну кучу. Может кто реализовывал функцию, чтобы файлы выгружались сохраняя их вложенность по группам? Поделитесь опытом :)

Нравится

2 комментария

Можно написать функцию получения полного пути группы в дереве. Например, такую:

[javascript]
function GetFullFileGroupPath(GroupID, FullPath) {
var GroupFileDataset = GetSingleItemByCode('ds_FileGroup',
'GetFullFileGroupPath');
ApplyDatasetIDFilter(GroupFileDataset, GroupID, true);
GroupFileDataset.Open();
if (!IsDatasetEmpty(GroupFileDataset)) {
var GroupName = GroupFileDataset.Values('Name');
var ParentGroupID = GroupFileDataset.Values('ParentID');
GroupFileDataset.Close();
if (IsEmptyValue(ParentGroupID)) {
FullPath = GroupName + '\\' + FullPath;
} else {
FullPath = GetFullFileGroupPath(ParentGroupID, GroupName + '\\'
+ FullPath);
}
} else {
GroupFileDataset.Close();
}
return FullPath;
}
[/javascript]

Дальше можно изменить Ваше условие:

[javascript]
if (Dataset.ValAsGUID('ItemTypeID') == ft_File) {
var GroupID = GetDatasetFieldValue(Dataset, 'FileGroupID');
var FullGroupPath = '';
if (IsEmptyValue(GroupID)) {
FullGroupPath = 'Все файлы\\'
} else {
FullGroupPath = GetFullFileGroupPath(GroupID, '');
}
FileName = DirName.Value + '\\' + FullGroupPath + GetDatasetFieldValue(Dataset, 'Link');
LoadFileFromDatabase(Dataset('ID'), FileName, false);
}
[/javascript]

Должно работать.

Спасибо!

Показать все комментарии