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

30/01/2019

Руководство по Design Automation для Revit: 5. Публикация activity

Содержание

1. Преобразуем код десктопного Revit addin в код для сервиса Design Automation

2. Создание приложения Forge и авторизация

3. Создание nickname приложения Forge

4. Публикация Design Automation appbundle

5. Публикация activity

6. Запуск workitem

7. Обработка ошибок и предупреждений

Activity - это действие, которое может быть выполнено сервисами Design Automation (прим. переводчика: что-то вроде описания функции с входными и выходными параметрами, а сами действия - это workitem). Вы можете создать собственные activity в appbundle-ах.

API для работы с Activity

- /v3/activities (POST) - создает Activity

- /v3/activities/{id}/aliases (POST) - создает псевдоним (alias) Activity

- /v3/activities/{id}/versions (POST) - создает новую версию Activity

- /v3/activities/{id}/aliases/{aliasId} (PATCH) - изменяет Activity

Базовый URL: https://developer.api.autodesk.com/da/us-east

Об остальных API можно прочитать здесь.

Шаг 1. Создание новой Activity

Для создания новой activity с id DeleteWallsActivity используйте следующий запрос:

Код - HTML: [Выделить]
  1. curl -X POST  https://developer.api.autodesk.com/da/us-east/v3/activities  -H 'Content-Type: application/json'  -H 'Authorization: Bearer LongStringAccessTokenObtainedDuringAuthenthication'  -d '{
  2.             "id": "DeleteWallsActivity",
  3.             "commandLine": [ "$(engine.path)\\\\revitcoreconsole.exe /i $(args[rvtFile].path) /al $(appbundles[DeleteWallsApp].path)" ],
  4.             "parameters": {
  5.               "rvtFile": {
  6.                 "zip": false,
  7.                 "ondemand": false,
  8.                 "verb": "get",
  9.                 "description": "Input Revit model",
  10.                 "required": true,
  11.                 "localName": "$(rvtFile)"
  12.               },
  13.               "result": {
  14.                 "zip": false,
  15.                 "ondemand": false,
  16.                 "verb": "put",
  17.                 "description": "Results",
  18.                 "required": true,
  19.                 "localName": "result.rvt"
  20.               }
  21.             },
  22.             "engine": "Autodesk.Revit+2018",
  23.             "appbundles": [ "YourNickname.DeleteWallsApp+test" ],
  24.             "description": "Deletes walls from Revit file."
  25.     }'

Ответ сервера:

Код - JavaScript: [Выделить]
  1. {
  2.     "commandLine": [
  3.         "$(engine.path)\\\\revitcoreconsole.exe /i $(args[rvtFile].path) /al $(appbundles[DeleteWallsApp].path)"
  4.     ],
  5.     "parameters": {
  6.         "rvtFile": {
  7.             "verb": "get",
  8.             "description": "Input Revit model",
  9.             "required": true,
  10.             "localName": "$(rvtFile)"
  11.         },
  12.         "result": {
  13.             "verb": "put",
  14.             "description": "Results",
  15.             "required": true,
  16.             "localName": "result.rvt"
  17.         }
  18.     },
  19.     "engine": "Autodesk.Revit+2018",
  20.     "appbundles": [
  21.         "YourNickname.DeleteWallsApp+test"
  22.     ],
  23.     "description": "Delete walls from Revit file.",
  24.     "version": 1,
  25.     "id": "YourNickname.DeleteWallsActivity"
  26. }

Ответ сервера включает в себя параметр номера версии version созданной activity. Для новой - это всегда 1.

Шаг 2. Создание псевдонима (alias) новой версии activity

Для использования activity нужно использовать её псевдоним (alias). Вы не сможете обратиться к activity по её id. Alias относится к конкретной версии activity.

Создание alias-а с именем test для первой версииDeleteWallsActivity:

Код - HTML: [Выделить]
  1. curl -X POST  https://developer.api.autodesk.com/da/us-east/v3/activities/DeleteWallsActivity/aliases  -H 'Content-Type: application/json'  -H 'Authorization: Bearer LongStringAccessTokenObtainedDuringAuthenthication'  -d '{
  2.       "version": 1,
  3.       "id": "test"
  4.     }'

Ответ сервера:

Код - JavaScript: [Выделить]
  1. {
  2.     "version": 1,
  3.     "id": "test"
  4. }

Шаг 3. Обновление activity

Создание новой версии. Для обновления определения существующей activity, необходимо создать новую версию activity. Если попытаться создать activity как указано в шаге 2, то сервер вернёт ошибку с кодом 409 Conflict.

Следующий запрос создаст новую версию activity DeleteWallsActivity:

Код - HTML: [Выделить]
  1. curl -X POST  https://developer.api.autodesk.com/da/us-east/v3/activities/DeleteWallsActivity/versions  -H 'Content-Type: application/json'  -H 'Authorization: Bearer LongStringAccessTokenObtainedDuringAuthenthication'  -d '{
  2.         "id": null,
  3.         "commandLine": [ "$(engine.path)\\\\revitcoreconsole.exe /i $(args[rvtFile].path) /al $(appbundles[DeleteWallsApp].path)" ],
  4.         "parameters": {
  5.           "rvtFile": {
  6.             "zip": false,
  7.             "ondemand": false,
  8.             "verb": "get",
  9.             "description": "Input Revit model",
  10.             "required": true,
  11.             "localName": "$(rvtFile)"
  12.           },
  13.           "result": {
  14.             "zip": false,
  15.             "ondemand": false,
  16.             "verb": "put",
  17.             "description": "Results",
  18.             "required": true,
  19.             "localName": "result.rvt"
  20.           }
  21.         },
  22.         "engine": "Autodesk.Revit+2018",
  23.         "appbundles": [ "YourNickname.DeleteWallsApp+test" ],
  24.         "description": "Delete walls from Revit file Updated."
  25. }'

Вы можете не указывать параметр id в тексте запроса, в противном случае, он должен быть равен null, иначе будет возвращена ошибка.

Ответ сервиса:

Код - JavaScript: [Выделить]
  1. {
  2.     "commandLine": [
  3.         "$(engine.path)\\\\revitcoreconsole.exe /i $(args[rvtFile].path) /al $(appbundles[DeleteWallsApp].path)"
  4.     ],
  5.     "parameters": {
  6.         "rvtFile": {
  7.             "verb": "get",
  8.             "description": "Input Revit model",
  9.             "required": true,
  10.             "localName": "$(rvtFile)"
  11.         },
  12.         "result": {
  13.             "verb": "put",
  14.             "description": "Results",
  15.             "required": true,
  16.             "localName": "result.rvt"
  17.         }
  18.     },
  19.     "engine": "Autodesk.Revit+2018",
  20.     "appbundles": [
  21.         "YourNickname.DeleteWallsApp+test"
  22.     ],
  23.     "description": "Delete walls from Revit file Updated.",
  24.     "version": 2,
  25.     "id": "YourNickname.DeleteWallsActivity"
  26. }

Шаг 4. Присваиваем alias новой версии activity.

Вы можете обновить существующий alias так, чтобы он указывал на новую версию activity. Для этого Вы можете удалить и пересоздать alias, либо выполнить следующий PATCH-запрос:

Код - HTML: [Выделить]
  1. curl -X PATCH  https://developer.api.autodesk.com/da/us-east/v3/activities/DeleteWallsActivity/aliases/test  -H 'Content-Type: application/json'  -H 'Authorization: Bearer LongStringAccessTokenObtainedDuringAuthenthication'  -d '{
  2.         "version": 2
  3.         }'`

Использование другого языка для запуска Revit в сервисе Design Automation

Вы можете запустить локализованную версию Design Automation для Revit, используя аргумент /l в строке команды при создании activity. Например:

Код - HTML: [Выделить]
  1. {
  2.     "commandLine": [
  3.         "$(engine.path)\\\\revitcoreconsole.exe /i $(args[rvtFile].path) /al $(apps[DeleteWallsApp].path) /l RUS"
  4.     ],
  5. ...
  6. }

В этом случае Revit будет запущен на русском. Этом может быть полезно, если Вы хотите, чтобы встроенные элементы и типы имели русские имена.

Выходные параметры Design Automation для Revit только на английском; тем не менее результаты Revit API локализованы и могут быть на разных языках.

Смотрите эту статью, в которой указаны все доступные коды для разных языков.

Назад к публикация Design Automation appbundle

Читать далее о запуске workitem

Источник: https://forge.autodesk.com/en/docs/design-automation/v3/tutorials/revit/step5-publish-activity/

Автор перевода: Александр Игнатович

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

Опубликовано 30.01.2019