Лёгкое программирование под Autodesk Vault. Часть 23
Vault API предоставляет множество методов для получения информации о файлах.
Для этого используются функции Get* и Find*, которые расположены в службах DocumentService и DocumentServiceExtensions.
Служба |
Операция |
Объект |
Опция |
Имя метода |
DocumentService |
Get |
File |
ById |
GetFileById |
ByVersion |
GetFileByVersion |
|||
Files |
ByHistoryType |
GetFilesByHistoryType |
||
ByIds |
GetFilesByIds |
|||
ByMasterId |
GetFilesByMasterId |
|||
ByMasterIds |
GetFilesByMasterIds |
|||
ByVersions |
GetFilesByVersions |
|||
FileFolders |
ByLabelId |
GetFileFoldersByLabelId |
||
LatestFiles |
ByIds |
GetLatestFilesByIds |
||
ByMasterIds |
GetLatestFilesByMasterIds |
|||
ByFolderId |
GetLatestFilesByFolderId |
|||
ByFolderIds |
GetLatestFilesByFolderIds |
|||
LatestFile |
ByMasterId |
GetLatestFileByMasterId |
||
LatestFileIds |
ByIds |
GetLatestFileIdsByIds |
||
ByFoldersIds |
GetLatestFileIdsByFoldersIds |
|||
LatestFilePaths |
ByNames |
GetLatestFilePathsByNames |
||
Find |
Files |
ByDatesAndChecksums |
FindFilesByDatesAndChecksums |
|
ByDatesPaths |
FindFilesByDatesPathsAndChecksums |
|||
ByFoldersDates |
FindFilesByFoldersDatesNamesAndChecksums |
|||
ByFoldersNames |
FindFilesByFoldersNamesAndChecksums |
|||
ByPathsAndChecksums |
FindFilesByPathsAndChecksums |
|||
BySearchConditions |
FindFilesBySearchConditions |
|||
FileFolders |
BySearchConditions |
FindFileFoldersBySearchConditions |
||
FilePaths |
ByDateAndChecksum |
FindFilePathsByDateAndChecksum |
||
ByDateNameAndChecksum |
FindFilePathsByDateNameAndChecksum |
|||
ByNameAndChecksum |
FindFilePathsByNameAndChecksum |
|||
InFileSet |
BySearchConditions |
FindInFileSetBySearchConditions |
||
LatestFiles |
ByMasterIds |
FindLatestFilesByMasterIds |
||
ByPaths |
FindLatestFilesByPaths |
|||
DocumentService |
Find |
FileElements |
BySearchClause |
FindFileElementsBySearchClause |
Основное различие между методами Get* и Find* заключается в том, что метод Get подразумевает, что вы знаете, с каким именно файлом хотите работать, а именно: его Id, MasterId, родительскую папку, либо имя файла. Между тем методы Find* подразумевают, что вы знаете условия, по которому будете осуществлять отбор из массива файлов в указанном месте хранилища.
Логика работы с файлами зачастую похожа на распутывание клубка: вы имеете какую-то минимальную исходную информацию, после этого передаете её на вход другим методам, которые позволят получить более подробные сведения.
Рассмотрим пример. Пусть необходимо получить имена файлов в папке "$/Проекты".
- При помощи метода GetFolderByPath на основании пути к папке получаем ID папки.
- Методом GetLatestFilesByFoldersId на основании ID полученной ранее папки, получаем массив объектов File.
- Из объектов File в массиве, получаем их имена из свойства Name.
Схематически алгоритм изображен на графике:
- Add-Type -Path "c:\Program Files (x86)\Autodesk\Autodesk Vault 2014 SDK\bin\Autodesk.DataManagement.Client.Framework.Vault.Forms.dll"
- $global:g_login=[Autodesk.DataManagement.Client.Framework.Vault.Forms.Library]::Login($null)
- # Назначим DocumentService переменной для быстрого доступа
- $docSvc = $g_login.WebServiceManager.DocumentService
- # Получим папку на основании пути к ней
- $folder=$docSvc.GetFolderByPath('$/Проекты')
- # Получим последние версии файлов в папке
- $latest = $docSvc.GetLatestFilesByFolderId($folder.Id,$false)
- # Выведем имена файлов
- $latest.Name | Out-GridView
Для описанного выше случая можно добавить пользовательский интерфейс выбора папки.
- Add-Type -Path "c:\Program Files (x86)\Autodesk\Autodesk Vault 2014 SDK\bin\Autodesk.DataManagement.Client.Framework.Vault.Forms.dll"
- $global:g_login=[Autodesk.DataManagement.Client.Framework.Vault.Forms.Library]::Login($null)
- # Создадим объект свойств диалога выбора файла
- $ses = New-Object Autodesk.DataManagement.Client.Framework.Vault.Forms.Settings.SelectEntitySettings
- # Зададим свойства диалога выбора объекта хранилища
- $ses.ActionableEntityClassID = 'FLDR'
- $ses.MultipleSelect = $false
- # Вы зовем диалог выбора объекта
- $dialogResult = [Autodesk.DataManagement.Client.Framework.Vault.Forms.Library]::SelectEntity($g_login,$ses)
- # Предоставим пользователю возможность выбрать папку при помощи диалога
- $fldr = $dialogResult.SelectedEntities.Item(0)
- # Получим последние версии файлов в папке
- $latest = $docSvc.GetLatestFilesByFolderId($fldr.Id,$false)
- # Выведем имена файлов
- $latest.Name | Out-GridView
В том случае, если в хранилище созданы метки, вы можете получить перечень файлов, связанных с требуемой меткой, используя метод GetFileFoldersByLabelId.
- Add-Type -Path "c:\Program Files (x86)\Autodesk\Autodesk Vault 2014 SDK\bin\Autodesk.DataManagement.Client.Framework.Vault.Forms.dll"
- $global:g_login=[Autodesk.DataManagement.Client.Framework.Vault.Forms.Library]::Login($null)
- # Назначим DocumentService переменной для быстрого доступа
- $docSvc = $g_login.WebServiceManager.DocumentService
- # Предоставляем пользователю выбрать метку из списка всех меток
- $label=$docSvc.GetAllLabels() | Out-GridView -OutputMode Single
- # Получаем все объекты, связанные с меткой
- $ff = $docSvc.GetFileFoldersByLabelId($label.Id)
- # Выводим все файлы
- $ff.File | Out-GridView
Продемострируем работу последнего скрипта:
Обсуждение: http://adn-cis.org/forum/index.php?topic=782
Опубликовано 30.05.2014Отредактировано 30.05.2014 в 18:49:37