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

10/12/2013

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

НазадСодержаниеДалее
Мало кто поспорит с тем, что для любого администрирования весьма необходимым является умение написания сценариев.

Vault SDK поддерживает работу со всеми .NET языками. Среди них есть PowerShell – невероятно мощный объектно-ориентированный шелл. Для начала будет достаточно почитать книгу о нем для людей, не имеющих опыта работы с ним.

Какая нам от него польза?

Во-первых, благодаря простоте начал работы с ним и минимальному количеству кода, можно без избыточной «шелухи» кода – которая образуется, например, при работе в Visual Studio – понять логику SDK и методику работу с сервером Vault. Фактически, идем от простого - к сложному.

Во-вторых, PowerShell является встраиваемым языком, что позволяет уже написанный код использовать в приложениях на других языках.

В третьих, язык позволяет строить конвейеры объектов, что является невероятно полезным ввиду специфики Vault.

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

Приступим.

Если у Вас Windows 7 и выше, язык уже является встроенным в систему, разве что рекомендовал бы его обновить до версии 3.0 так, либо так (требуется проверка подлинности Windows). Если у Вас Windows более ранней версии, можно установить PowerShell 2.0. Ярлыки для вызова расположены в Пуск->Все программы->Стандартные->Windows PowerShell. В зависимости от разрядности сервера выбираете: x86 – для 32-битной версии, либо без дополнительных отметок – для x64. Для удобства можно использовать графическую оболочку PowerShell ISE, однако настоятельно рекомендовал бы использовать PowerGUI – бесплатный редактор с подсветкой синтаксиса, отладкой, сниппетами, и пр.

Считаем, что Vault SDK уже установлен в расположение по умолчанию.

Создадим приложение, экспортирующее информацию о пользователях в CSV.

Алгоритм работы с сервером следующий:
Блок-схема алгоритма получения списка пользователей от сервера Vault

Стоит отметить, что он в зависимости от языка реализации он не меняется.

Теперь, собственно, код.

Код - PowerShell: [Выделить]
  1. #Подключение динамической библиотеки для обращения к серверу
  2. #Реализация, актуальная для 2012 версии
  3. #Add-Type -Path "C:\Program Files (x86)\Autodesk\Autodesk Vault 2012 SDK\bin\Autodesk.Connectivity.WebServicesTools.dll"
  4. #Реализация, актуальная для 2014 версии: WebServicesTools.dll влили в WebServices.dll, однако пространство имен осталось прежним.
  5. Add-Type -Path "C:\Program Files (x86)\Autodesk\Autodesk Vault 2014 SDK\bin\Autodesk.Connectivity.WebServices.dll"
  6. #Получение полномочий в режиме «только чтение».
  7. $cred = New-Object Autodesk.Connectivity.WebServicesTools.UserPasswordCredentials ("localhost", "Vault", "Administrator", "", $true)
  8. #Создание менеджера
  9. $webSvc = New-Object Autodesk.Connectivity.WebServicesTools.WebServiceManager ($cred)
  10. #Получение списка всех пользователей через AdminService
  11. $users = $webSvc.AdminService.GetAllUsers()
  12. #Экспорт списка в CSV: строим конвейер при помощи символа «|»
  13. #Для корректной работы с символами кириллицы, включаем поддержку юникода: «-Encoding Unicode»
  14. $users | Export-Csv c:/AllUsers.csv -Delimiter ";" -Encoding Unicode
  15. # Для вывода только активных пользователей используем фильтрацию по свойству IsActive, посредством команды Where-Object.
  16. #К свойствам объектов $users в пределах { …} обращаемся посредством конструкции «$_.»
  17. #Выводим в отдельный файл командой Export-Csv
  18. $users | Where-Object { $_.IsActive -eq "True" } | Export-Csv c:/ActiveUsers.csv -Delimiter ";" -Encoding unicode

Как было замечено выше, PowerShell позволяет строить конвейеры объектов. Благодаря этому нет необходимости для вывода в файл строить циклы с перебором объектов по одному.

И теперь код без комментариев:

Код - PowerShell: [Выделить]
  1. Add-Type -Path "C:\Program Files (x86)\Autodesk\Autodesk Vault 2014 SDK\bin\Autodesk.Connectivity.WebServices.dll"
  2. $cred = New-Object Autodesk.Connectivity.WebServicesTools.UserPasswordCredentials ("localhost","Vault","Administrator","",$true)
  3. $webSvc = New-Object Autodesk.Connectivity.WebServicesTools.WebServiceManager ($cred)
  4. $users = $webSvc.AdminService.GetAllUsers()
  5. $users | Where-Object { $_.IsActive -eq "True" } | Export-Csv c:/ActiveUsers.csv -Delimiter ";" -Encoding unicode

Не правда ли, кратко и изящно?

Вставьте и выполните код в PowerShell, либо в PowerGUI - и при успехе получите в корне диска C:/ требуемый файл.
P.S. Вдохновение частично черпалось в блоге CoolOrange.

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

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

Опубликовано 10.12.2013
Отредактировано 06.08.2014 в 15:08:28