Лёгкое программирование под 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