Руководство по Design Automation для Revit: 6. Запуск workitem
Содержание
1. Преобразуем код десктопного Revit addin в код для сервиса Design Automation
2. Создание приложения Forge и авторизация
3. Создание nickname приложения Forge
4. Публикация Design Automation appbundle
6. Запуск workitem
7. Обработка ошибок и предупреждений
Шаг 1. Workitem
Когда Вы создаете workitem в Design Automation, Вы запрашиваете запуск задачи сервисом Design Automation.
Workitem используется для запуска activity. Отношение между activity и workitem может быть описано как “определение функции” и “вызов функции” соответственно. Именованные параметры activity соответствуют именованным параметрам workitem. Так же как при вызове функций, необязательные параметры activity могут быть пропущены при создании workitem.
API workitem-ов доступны здесь.
Шаг 2. Создание Workitem
Пример создания workitem-а для запуска DeleteWallsActivity:
- curl -X POST https://developer.api.autodesk.com/da/us-east/v3/workitems -H 'Content-Type: application/json' -H 'Authorization: Bearer LongStringAccessTokenObtainedDuringAuthenthication' -d '{
- "activityId": "YourNickname.DeleteWallsActivity+test",
- "arguments": {
- "rvtFile": {
- "url": "https://s3-us-west-2.amazonaws.com/revitio-dev/test-data/DeleteWalls.rvt"
- },
- "result": {
- "verb": "put",
- "url": "https://myWebsite/signed/url/to/result"
- }
- }
- }'
LongStringAccessTokenObtainedDuringAuthenthication нужно заменить токеном, полученным при авторизации.
Ответ сервиса будет включать id созданной workitem:
- {
- "status": "pending",
- "stats": {
- "timeQueued": "2018-04-16T21:45:08.1357163Z"
- },
- "id": "e8a3ee53770a4eaeb86f267aab76af47"
- }
Статус Workitem:
Workitem-ы в Design Automation ставятся в очередь перед тем, как они будут переданы в обработку. При обработке workitem-ы могут быть выполнены успешно, либо с ошибкой выполнения.
Проверить статус workitem-а можно с помощью GET-запроса /workitems/{id}:
- curl -X GET https://developer.api.autodesk.com/da/us-east/v3/workitems/e8a3ee53770a4eaeb86f267aab76af47 -H 'Content-Type: application/json' -H 'Authorization: Bearer LongStringAccessTokenObtainedDuringAuthenthication'
LongStringAccessTokenObtainedDuringAuthenthication нужно заменить токеном, полученным при авторизации.
Пример ответа сервиса:
- {
- "status": "success",
- "reportUrl": "https://dasprod-store.s3.amazonaws.com/workItem/Revit/e8a3ee53770a4eaeb86f267aab76af47/report.txt?XXXXXXXXX",
- "stats": {
- "timeQueued": "2018-04-13T03:15:15.9772282Z",
- "timeDownloadStarted": "2018-04-13T03:15:17.2960823Z",
- "timeInstructionsStarted": "2018-04-13T03:15:20.2803318Z",
- "timeInstructionsEnded": "2018-04-13T03:15:41.6075799Z",
- "timeUploadEnded": "2018-04-13T03:15:42.0450494Z"
- },
- "id": "e8a3ee53770a4eaeb86f267aab76af47"
- }
status в ответе сервиса показывает возможные варианты: ожидается выполнение, успешно, произошла ошибка или было отменено. reportUrl содержит url с логами выполнения workitem, по этой ссылке можно скачать файл с логом.
Шаг 3. Аргументы WorkItem
Входные параметры: JSON.
Входные параметры activity требуют JSON-значений, но значения JSON могут использоваться в самой workitem.
Например, activity CountItActivity требует параметр с именем countItParams. Activity ожидает значение параметра файлом JSON. Workitem может внедрить значение JSON в workitem как показано ниже с помощью префикса data:application/json. Фреймворк Design Automation framework обработает его как JSON и сохранит в JSON-файл:
- curl -X POST https://developer.api.autodesk.com/da/us-east/v3/workitems -H 'Content-Type: application/json' -H 'Authorization: Bearer LongStringAccessTokenObtainedDuringAuthenthication' -d '{
- "activityId": "YourNickname.CountItActivity+test",
- "arguments": {
- "rvtFile": {
- "url": "https://s3-us-west-2.amazonaws.com/revitio-dev/test-data/CountIt.rvt"
- },
- "countItParams": {
- "url": "data:application/json,{'walls': false, 'floors': true, 'doors': true, 'windows': true}"
- },
- "result": {
- "verb": "put",
- "url": "https://myWebsite/signed/url/to/result"
- }
- }
- }'
Входные параметры: eTransmit
Design Automation может обработать файлы Revit, обработанные с помощью eTransmit, необходимо только создать zip-архив с этими файлами:
- curl POST https://developer.api.autodesk.com/da/us-east/v3/workitems -H 'Content-Type: application/json' -H 'Authorization: Bearer LongStringAccessTokenObtainedDuringAuthenthication' -d '{
- "activityId" : "YourNickname.CountItActivity+test",
- "arguments": {
- "rvtFile": {
- "url": "https://s3-us-west-2.amazonaws.com/revitio-dev/test-data/TopHost.zip"
- },
- "countItParams": {
- "url": "data:application/json,{'walls': true, 'floors': true, 'doors': true, 'windows': true}"
- },
- "result": {
- "verb": "put",
- "url": "https://myWebsite/signed/url/to/result"
- }
- }
- }'
Пример такого файла TopHost.zip доступен здесь: TopHost.zip.
Имя “главной модели” считывается из файлам манифеста и считывается из zip-архива.
Входные параметры: RVT со связанными файлами
- curl POST https://developer.api.autodesk.com/da/us-east/v3/workitems -H 'Content-Type: application/json' -H 'Authorization: Bearer LongStringAccessTokenObtainedDuringAuthenthication' -d '{
- "activityId": "YourNickname.CountItActivity+test",
- "arguments": {
- "rvtFile": {
- "url": "https://s3-us-west-2.amazonaws.com/revitio-dev/test-data/TopHost.rvt",
- "references": [
- {
- "url": "https://s3-us-west-2.amazonaws.com/revitio-dev/test-data/LinkA.rvt",
- "references": [
- {
- "url": "https://s3-us-west-2.amazonaws.com/revitio-dev/test-data/LinkA1.rvt"
- },
- {
- "url": "https://s3-us-west-2.amazonaws.com/revitio-dev/test-data/LinkA2.rvt"
- }
- ]
- },
- {
- "url": "https://s3-us-west-2.amazonaws.com/revitio-dev/test-data/LinkB.rvt"
- }
- ]
- },
- "countItParams": {
- "url": "data:application/json,{'walls': true, 'floors': true, 'doors': true, 'windows': true}"
- },
- "result": {
- "verb": "put",
- "url": "https://myWebsite/signed/url/to/result"
- }
- }
- }'
Главная модель в этом примере TopHost.rvt и она содержит LinkA.rvt и LinkB.rvt. В свою очередь, файл LinkA.rvt содержит LinkA1.rvt and LinkA2.rvt. Каждый файл загружается в облако по-отдельности и для каждого из них указывается отдельный путь:
- TopHost.rvt
- |-- LinkA.rvt
- | |-- LinkA1.rvt
- | |-- LinkA2.rvt
- |
- |-- LinkB.rvt
Входные параметры: связанные файлы в подпапках
Переменная localName workitem-а может использоваться для создания структуры папок в рабочем каталоге (working directory). Например, файл Revit Host.rvt содержит связанный файл в папке SubFolder/Link.rvt, тогда workitem должен быть определн следующим образом:
- {
- "url": "https://s3-us-west-2.amazonaws.com/revitio-dev/test-data/TestForSubFolders/Host.rvt",
- "references": [
- {
- "url": "https://s3-us-west-2.amazonaws.com/revitio-dev/test-data/TestForSubFolders/Link.rvt",
- "localName": "SubFolder/Link.rvt"
- }
- ]
- }
Тогда в рабочем каталоге будут созданы папки/файлы:
- {CWD}/Host.rvt
- {CWD}/SubFolder/Link.rvt
Поскольку доступ к папкам и файлам вне рабочей папки запрещён, в случае, если главный файл имеет ссылки с относительным путём вида ../ParallelFolder/Link.rvt, Вы можете переместить всю структуру на один уровень вниз. Переменная localName может быть использована также для размещения главного файла:
- {
- "url": "https://path/to/Host.rvt",
- "localName": "TopFolder/Host.rvt",
- "references": [
- {
- "url": "https://path/to/Link.rvt",
- "localName": "ParallelFolder/Link.rvt"
- }
- ]
- }
Тогда в рабочем каталоге будут созданы папки/файлы:
- {CWD}/TopFolder/Host.rvt
- {CWD}/ParallelFolder/Link.rvt
Входные параметры: загрузка ZIP-файла
Для ускорения загрузки, Design Automation предлагает возможность загрузки zip-файлов. При указании пути к главному Revit-файлу используйте параметр "pathInZip":
- "arguments": {
- "rvtFile": {
- "url": "https://path/to/zip/file.zip",
- "pathInZip": "RevitFile.rvt"
- },
- }
Выходные параметры: onComplete callback
В workitem-е можно указать специальный выходной параметр onComplete. В случае его наличия, URL будет вызван при завершении выполнения workitem-а.
Пример:
- curl -X POST https://developer.api.autodesk.com/da/us-east/v3/workitems -H 'Content-Type: application/json' -H 'Authorization: Bearer LongStringAccessTokenObtainedDuringAuthenthication' -d '{
- "activityId": "YourNickname.DeleteWallsActivity+test",
- "arguments": {
- "rvtFile": {
- "url": "https://s3-us-west-2.amazonaws.com/revitio-dev/test-data/DeleteWalls.rvt"
- },
- "result": {
- "verb": "put",
- "url": "https://myWebsite/signed/url/to/result"
- },
- "onComplete": {
- "verb": "post",
- "url": "https://myWebsite/callback"
- }
- }
- }'
Назад к публикации activity
Читать дальше об обработке ошибок и предупреждений
Источник: https://forge.autodesk.com/en/docs/design-automation/v3/tutorials/revit/step6-post-workitem/
Обсуждение: http://adn-cis.org/forum/index.php?topic=
Опубликовано 30.01.2019