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