ADN Open CIS
Сообщество программистов Autodesk в СНГ

14/08/2014

Лёгкое программирование под Autodesk Vault Часть 30

Получение информации о папках возможно при помощи методов Get*Folder* службы DocumentService.

Get

Folder

ById

GetFolderById

Получение объекта типа Folder на основании его ID.

ByPath

GetFolderByPath

Получение объекта Folder на основании пути.

Folders

ByFileMasterId

GetFolders
ByFileMasterId

Получение всех папок, в которых содержится файл.

ByFileMasterIds

GetFolders
ByFileMasterIds

Получение всех папок, в которых содержится набор файлов.

ByIds

GetFolders
ByIds

Получение объектов Folder на основании их ID.

ByParentId

GetFolders
ByParentId

Получение подпапок папки хранилища.

ByParentIds

GetFolders
ByParentIds

Получение подпапок набора папок хранилища.

ByPaths

GetFolders
ByPaths

Получение списка объектов Folder на основании путей к ним.

FileFolders

ByLabelId

GetFile
FoldersBy
LabelId

Получение списка объектов FileFolder на основании ID метки.

LatestFiles

ByFolderId

GetLatestFiles
ByFolderId

Получение последних версий всех файлов в папке.

ByFolderIds

GetLatestFiles
ByFolderIds

Получение последних версий всех файлов в наборе папок.

FolderDelete
Restrictions

ById

GetFolder
Delete
Restrictions
ById

Получение всех ограничений на удаление для папки.

ByIds

GetFolder
Delete
Restrictions
ByIds

Получение всех ограничений на удаление для набора папок.

FolderIds

ByParentIds

GetFolderIds
ByParentIds

Получение ID подпапок набора папок.

FolderMove
Restrictions

 

GetFolder
Move
Restrictions

Получение всех ограничений на перемещение для папки.

FolderRename
Restrictions

 

GetFolder
Rename
Restrictions

Получение всех ограничений на переименование папки.

FolderRoot

 

GetFolderRoot

Получение корневой папки хранилища.

Давайте посмотрим, как это можно реализовать на практике.

Для удобства будем пользоваться Vault2014PowerPack.

Корневая папка хранилища

Самый простой метод – это GetFolderRoot(), которому даже не требуется параметров. Пример:

Код - PowerShell: [Выделить]
  1. $vltDocumentSvc.GetFolderRoot()

Здесь $vltDocumentSvc – объект DocumentService.

Папка на основании пути

Метод public Folder GetFolderByPath(System.string Путь) возвращает объект Folder.Пример:

Код - PowerShell: [Выделить]
  1. # Зададим путь к папке
  2. $path1 = "$/Design/ Проект 1"
  3. # Получим папку
  4. $folder1 = $vltDocumentSvc .GetFolderByPath($path1)
  5. # Выведем информацию по папке в таблицу
  6. $folder1 | Format-Table -Property Name,CreateDate,ID

Дочерние файлы и папки

При помощи метода public System.long[] GetFolderIdsByParentIds(System.long[] ИдРодителя, System.bool Рекурсивно) можно получить дочерние папки для папки.

Код - PowerShell: [Выделить]
  1. # Получим Id корневой папки
  2. $FolderId = $vltDocumentSvc.GetFolderRoot().Id
  3. # Получим Id прямых детей
  4. $ChildrenIds = $vltDocumentSvc .GetFolderIdsByParentIds($FolderId, $false)
  5. # Получим объекты по их Id
  6. $Children = $vltDocumentSvc .GetFoldersByIds($ChildrenIds, $false)
  7. $Children | Format-Table -Property Name,CreateDate,ID
  8. # Произведём то же самое, с небольшой оптимизацией
  9. $Children = $vltDocumentSvc.GetFoldersByParentId($FolderId, $false)
  10. # Получим дочерние папки полученных детей. Фактически, папки хранилища второго уровня
  11. $Children1 = $null;
  12. $Children | ForEach-Object {$Children1+=$vltDocumentSvc.GetFoldersByParentId($_.Id, $false)}
  13. $Children1 | Format-Table -Property FullName

Примеры использования

Предлагаю для ознакомления части модуля Vault2014PowerPack

Set-VaultLocation

Аналог команды cd для файловых систем – изменяет текущий каталог.

Код - PowerShell: [Выделить]
  1. function Set-VaultLocation
  2. {
  3. switch ($args.Count)
  4. {
  5.     0 { $fldr = $vltFolderCurrent }
  6.     1 {
  7.         $folderName = $args[0].ToString()
  8.         if($folderName -like "$*") { $fldr = $vltDocumentSvc.GetFolderByPath($folderName) }
  9.         elseif($folderName -eq "..") { if ($vltFolderCurrent.ParId -eq -1) {$fldr = $vltDocumentSvc.GetFolderRoot()} else {$fldr = $vltDocumentSvc.GetFolderById($vltFolderCurrent.ParId)} }
  10.         elseif($folderName -eq "/") { $fldr = $vltDocumentSvc.GetFolderRoot() }
  11.         else { $fldr = $vltDocumentSvc.GetFoldersByParentId($vltFolderCurrent.ID, $false) | Where-Object {$_.Name -eq $folderName} }
  12.       }
  13.     Default {}
  14. }
  15. }

Get-VaultChildItem

Аналог команды dir для файловых систем – возвращает список дочерних объектов.

Код - PowerShell: [Выделить]
  1. function Get-VaultChildItem
  2. {
  3. [OutputType([Autodesk.Connectivity.WebServices.FileFolder])]
  4. $vltObjects = $null
  5. $total = 0
  6. $global:vltFolders = $vltDocumentSvc.GetFoldersByParentId($vltFolderCurrent.ID, $false)
  7. $vltObjects += $vltFolders #| Format-Table -Property Name, CreateDate
  8. $total += $vltFolders.Count
  9. $global:vltFiles = $vltDocumentSvc.GetLatestFilesByFolderId($vltFolderCurrent.ID, $false)
  10. $vltObjects += $vltFiles #| Format-Table -Property Name, CkInDate -HideTableHeaders
  11. $vltObjects
  12. #$total += $vltFiles.Count
  13. if($total -eq 0){"Folder is empty"}
  14. }

Автор: Дмитрий Емельянов
Автор перевода: Дмитрий Емельянов

Обсуждение: http://adn-cis.org/forum/index.php?topic=911

Опубликовано 14.08.2014
Отредактировано 14.08.2014 в 12:48:23