Лёгкое программирование под Autodesk Vault Часть 30
Получение информации о папках возможно при помощи методов Get*Folder* службы DocumentService.
| Get | Folder | ById | GetFolderById | Получение объекта типа Folder на основании его ID. | 
| ByPath | GetFolderByPath | Получение объекта Folder на основании пути. | ||
| Folders | ByFileMasterId | GetFolders | Получение всех папок, в которых содержится файл. | |
| ByFileMasterIds | GetFolders | Получение всех папок, в которых содержится набор файлов. | ||
| ByIds | GetFolders | Получение объектов Folder на основании их ID. | ||
| ByParentId | GetFolders | Получение подпапок папки хранилища. | ||
| ByParentIds | GetFolders | Получение подпапок набора папок хранилища. | ||
| ByPaths | GetFolders | Получение списка объектов Folder на основании путей к ним. | ||
| FileFolders | ByLabelId | GetFile | Получение списка объектов FileFolder на основании ID метки. | |
| LatestFiles | ByFolderId | GetLatestFiles | Получение последних версий всех файлов в папке. | |
| ByFolderIds | GetLatestFiles | Получение последних версий всех файлов в наборе папок. | ||
| FolderDelete | ById | GetFolder | Получение всех ограничений на удаление для папки. | |
| ByIds | GetFolder | Получение всех ограничений на удаление для набора папок. | ||
| FolderIds | ByParentIds | GetFolderIds | Получение ID подпапок набора папок. | |
| FolderMove | 
 | GetFolder | Получение всех ограничений на перемещение для папки. | |
| FolderRename | 
 | GetFolder | Получение всех ограничений на переименование папки. | |
| FolderRoot | 
 | GetFolderRoot | Получение корневой папки хранилища. | 
Давайте посмотрим, как это можно реализовать на практике.
Для удобства будем пользоваться Vault2014PowerPack.
Корневая папка хранилища
Самый простой метод – это GetFolderRoot(), которому даже не требуется параметров. Пример:
- $vltDocumentSvc.GetFolderRoot()
Здесь $vltDocumentSvc – объект DocumentService.
Папка на основании пути
Метод public Folder GetFolderByPath(System.string Путь) возвращает объект Folder.Пример:
- # Зададим путь к папке
- $path1 = "$/Design/ Проект 1"
- # Получим папку
- $folder1 = $vltDocumentSvc .GetFolderByPath($path1)
- # Выведем информацию по папке в таблицу
- $folder1 | Format-Table -Property Name,CreateDate,ID
Дочерние файлы и папки
При помощи метода public System.long[] GetFolderIdsByParentIds(System.long[] ИдРодителя, System.bool Рекурсивно) можно получить дочерние папки для папки.
- # Получим Id корневой папки
- $FolderId = $vltDocumentSvc.GetFolderRoot().Id
- # Получим Id прямых детей
- $ChildrenIds = $vltDocumentSvc .GetFolderIdsByParentIds($FolderId, $false)
- # Получим объекты по их Id
- $Children = $vltDocumentSvc .GetFoldersByIds($ChildrenIds, $false)
- $Children | Format-Table -Property Name,CreateDate,ID
- # Произведём то же самое, с небольшой оптимизацией
- $Children = $vltDocumentSvc.GetFoldersByParentId($FolderId, $false)
- # Получим дочерние папки полученных детей. Фактически, папки хранилища второго уровня
- $Children1 = $null;
- $Children1 | Format-Table -Property FullName
Примеры использования
Предлагаю для ознакомления части модуля Vault2014PowerPack
Set-VaultLocation
Аналог команды cd для файловых систем – изменяет текущий каталог.
- function Set-VaultLocation
- {
- {
- 0 { $fldr = $vltFolderCurrent }
- 1 {
- if($folderName -like "$*") { $fldr = $vltDocumentSvc.GetFolderByPath($folderName) }
- elseif($folderName -eq "..") { if ($vltFolderCurrent.ParId -eq -1) {$fldr = $vltDocumentSvc.GetFolderRoot()} else {$fldr = $vltDocumentSvc.GetFolderById($vltFolderCurrent.ParId)} }
- elseif($folderName -eq "/") { $fldr = $vltDocumentSvc.GetFolderRoot() }
- else { $fldr = $vltDocumentSvc.GetFoldersByParentId($vltFolderCurrent.ID, $false) | Where-Object {$_.Name -eq $folderName} }
- }
- Default {}
- }
- }
Get-VaultChildItem
Аналог команды dir для файловых систем – возвращает список дочерних объектов.
- function Get-VaultChildItem
- {
- [OutputType([Autodesk.Connectivity.WebServices.FileFolder])]
- $vltObjects = $null
- $total = 0
- $global:vltFolders = $vltDocumentSvc.GetFoldersByParentId($vltFolderCurrent.ID, $false)
- $vltObjects += $vltFolders #| Format-Table -Property Name, CreateDate
- $total += $vltFolders.Count
- $global:vltFiles = $vltDocumentSvc.GetLatestFilesByFolderId($vltFolderCurrent.ID, $false)
- $vltObjects += $vltFiles #| Format-Table -Property Name, CkInDate -HideTableHeaders
- $vltObjects
- #$total += $vltFiles.Count
- if($total -eq 0){"Folder is empty"}
- }
Автор перевода: Дмитрий Емельянов
Обсуждение: http://adn-cis.org/forum/index.php?topic=911
Опубликовано 14.08.2014Отредактировано 14.08.2014 в 12:48:23
 
			 
