Вопрос
Выгрузка файлов из детали файлов с сохранением вложенности
24 августа 2010 10:12
Друзья, кто-нибудь делал выгрузку файлов из карточки с сохранением вложенности файлов в группы?
т.е. Файлы на детали "Файлы" распределяются по группам и их можно выгружать массово прописав в скрипт 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();
}
}
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 комментария
25 августа 2010 12:09
Можно написать функцию получения полного пути группы в дереве. Например, такую:
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; }
Дальше можно изменить Ваше условие:
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); }
Должно работать.
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать