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

30/05/2014

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

FindFilesByDatesPathsAndChecksums

ByFoldersDates
NamesAndChecksums

FindFilesByFoldersDatesNamesAndChecksums

ByFoldersNames
AndChecksums

FindFilesByFoldersNamesAndChecksums

ByPathsAndChecksums

FindFilesByPathsAndChecksums

BySearchConditions

FindFilesBySearchConditions

FileFolders

BySearchConditions

FindFileFoldersBySearchConditions

FilePaths

ByDateAndChecksum

FindFilePathsByDateAndChecksum

ByDateNameAndChecksum

FindFilePathsByDateNameAndChecksum

ByNameAndChecksum

FindFilePathsByNameAndChecksum

InFileSet

BySearchConditions

FindInFileSetBySearchConditions

LatestFiles

ByMasterIds

FindLatestFilesByMasterIds

ByPaths

FindLatestFilesByPaths

DocumentService
Extensions

Find

FileElements

BySearchClause

FindFileElementsBySearchClause



Основное различие между методами Get* и Find* заключается в том, что метод Get подразумевает, что вы знаете, с каким именно файлом хотите работать, а именно: его Id, MasterId, родительскую папку, либо имя файла. Между тем методы Find* подразумевают, что вы знаете условия, по которому будете осуществлять отбор из массива файлов в указанном месте хранилища.

Логика работы с файлами зачастую похожа на распутывание клубка: вы имеете какую-то минимальную исходную информацию, после этого передаете её на вход другим методам, которые позволят получить более подробные сведения.

Рассмотрим пример. Пусть необходимо получить имена файлов в папке "$/Проекты".

  1. При помощи метода GetFolderByPath на основании пути к папке получаем ID папки.
  2. Методом GetLatestFilesByFoldersId на основании ID полученной ранее папки, получаем массив объектов File.
  3. Из объектов File в массиве, получаем их имена из свойства Name.

Схематически алгоритм изображен на графике:

Код - PowerShell: [Выделить]
  1. Add-Type -Path "c:\Program Files (x86)\Autodesk\Autodesk Vault 2014 SDK\bin\Autodesk.DataManagement.Client.Framework.Vault.Forms.dll"
  2. $global:g_login=[Autodesk.DataManagement.Client.Framework.Vault.Forms.Library]::Login($null)
  3. # Назначим DocumentService переменной для быстрого доступа
  4. $docSvc = $g_login.WebServiceManager.DocumentService
  5. # Получим папку на основании пути к ней
  6. $folder=$docSvc.GetFolderByPath('$/Проекты')
  7. # Получим последние версии файлов в папке
  8. $latest = $docSvc.GetLatestFilesByFolderId($folder.Id,$false)
  9. # Выведем имена файлов
  10. $latest.Name | Out-GridView

Для описанного выше случая можно добавить пользовательский интерфейс выбора папки.

Код - PowerShell: [Выделить]
  1. Add-Type -Path "c:\Program Files (x86)\Autodesk\Autodesk Vault 2014 SDK\bin\Autodesk.DataManagement.Client.Framework.Vault.Forms.dll"
  2. $global:g_login=[Autodesk.DataManagement.Client.Framework.Vault.Forms.Library]::Login($null)
  3. # Создадим объект свойств диалога выбора файла
  4. $ses = New-Object Autodesk.DataManagement.Client.Framework.Vault.Forms.Settings.SelectEntitySettings
  5. # Зададим свойства диалога выбора объекта хранилища
  6. $ses.ActionableEntityClassID = 'FLDR'
  7. $ses.MultipleSelect = $false
  8. # Вы зовем диалог выбора объекта
  9. $dialogResult = [Autodesk.DataManagement.Client.Framework.Vault.Forms.Library]::SelectEntity($g_login,$ses)
  10. # Предоставим пользователю возможность выбрать папку при помощи диалога
  11. $fldr = $dialogResult.SelectedEntities.Item(0)
  12. # Получим последние версии файлов в папке
  13. $latest = $docSvc.GetLatestFilesByFolderId($fldr.Id,$false)
  14. # Выведем имена файлов
  15. $latest.Name | Out-GridView

В том случае, если в хранилище созданы метки, вы можете получить перечень файлов, связанных с требуемой меткой, используя метод GetFileFoldersByLabelId.

Код - PowerShell: [Выделить]
  1. Add-Type -Path "c:\Program Files (x86)\Autodesk\Autodesk Vault 2014 SDK\bin\Autodesk.DataManagement.Client.Framework.Vault.Forms.dll"
  2. $global:g_login=[Autodesk.DataManagement.Client.Framework.Vault.Forms.Library]::Login($null)
  3. # Назначим DocumentService переменной для быстрого доступа
  4. $docSvc = $g_login.WebServiceManager.DocumentService
  5. # Предоставляем пользователю выбрать метку из списка всех меток
  6. $label=$docSvc.GetAllLabels() | Out-GridView -OutputMode Single
  7. # Получаем все объекты, связанные с меткой
  8. $ff = $docSvc.GetFileFoldersByLabelId($label.Id)
  9. # Выводим все файлы
  10. $ff.File | Out-GridView


Продемострируем работу последнего скрипта:

 

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

Опубликовано 30.05.2014
Отредактировано 30.05.2014 в 18:49:37