Руководство по Design Automation для Revit: 5. Публикация activity
Содержание
1. Преобразуем код десктопного Revit addin в код для сервиса Design Automation
2. Создание приложения Forge и авторизация
3. Создание nickname приложения Forge
4. Публикация Design Automation appbundle
5. Публикация activity
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 используйте следующий запрос:
- curl -X POST https://developer.api.autodesk.com/da/us-east/v3/activities -H 'Content-Type: application/json' -H 'Authorization: Bearer LongStringAccessTokenObtainedDuringAuthenthication' -d '{
- "id": "DeleteWallsActivity",
- "commandLine": [ "$(engine.path)\\\\revitcoreconsole.exe /i $(args[rvtFile].path) /al $(appbundles[DeleteWallsApp].path)" ],
- "parameters": {
- "rvtFile": {
- "zip": false,
- "ondemand": false,
- "verb": "get",
- "description": "Input Revit model",
- "required": true,
- "localName": "$(rvtFile)"
- },
- "result": {
- "zip": false,
- "ondemand": false,
- "verb": "put",
- "description": "Results",
- "required": true,
- "localName": "result.rvt"
- }
- },
- "engine": "Autodesk.Revit+2018",
- "appbundles": [ "YourNickname.DeleteWallsApp+test" ],
- "description": "Deletes walls from Revit file."
- }'
Ответ сервера:
- {
- "commandLine": [
- "$(engine.path)\\\\revitcoreconsole.exe /i $(args[rvtFile].path) /al $(appbundles[DeleteWallsApp].path)"
- ],
- "parameters": {
- "rvtFile": {
- "verb": "get",
- "description": "Input Revit model",
- "required": true,
- "localName": "$(rvtFile)"
- },
- "result": {
- "verb": "put",
- "description": "Results",
- "required": true,
- "localName": "result.rvt"
- }
- },
- "engine": "Autodesk.Revit+2018",
- "appbundles": [
- "YourNickname.DeleteWallsApp+test"
- ],
- "description": "Delete walls from Revit file.",
- "version": 1,
- "id": "YourNickname.DeleteWallsActivity"
- }
Ответ сервера включает в себя параметр номера версии version созданной activity. Для новой - это всегда 1.
Шаг 2. Создание псевдонима (alias) новой версии activity
Для использования activity нужно использовать её псевдоним (alias). Вы не сможете обратиться к activity по её id. Alias относится к конкретной версии activity.
Создание alias-а с именем test для первой версииDeleteWallsActivity:
- 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 '{
- "version": 1,
- "id": "test"
- }'
Ответ сервера:
- {
- "version": 1,
- "id": "test"
- }
Шаг 3. Обновление activity
Создание новой версии. Для обновления определения существующей activity, необходимо создать новую версию activity. Если попытаться создать activity как указано в шаге 2, то сервер вернёт ошибку с кодом 409 Conflict.
Следующий запрос создаст новую версию activity DeleteWallsActivity:
- 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 '{
- "id": null,
- "commandLine": [ "$(engine.path)\\\\revitcoreconsole.exe /i $(args[rvtFile].path) /al $(appbundles[DeleteWallsApp].path)" ],
- "parameters": {
- "rvtFile": {
- "zip": false,
- "ondemand": false,
- "verb": "get",
- "description": "Input Revit model",
- "required": true,
- "localName": "$(rvtFile)"
- },
- "result": {
- "zip": false,
- "ondemand": false,
- "verb": "put",
- "description": "Results",
- "required": true,
- "localName": "result.rvt"
- }
- },
- "engine": "Autodesk.Revit+2018",
- "appbundles": [ "YourNickname.DeleteWallsApp+test" ],
- "description": "Delete walls from Revit file Updated."
- }'
Вы можете не указывать параметр id в тексте запроса, в противном случае, он должен быть равен null, иначе будет возвращена ошибка.
Ответ сервиса:
- {
- "commandLine": [
- "$(engine.path)\\\\revitcoreconsole.exe /i $(args[rvtFile].path) /al $(appbundles[DeleteWallsApp].path)"
- ],
- "parameters": {
- "rvtFile": {
- "verb": "get",
- "description": "Input Revit model",
- "required": true,
- "localName": "$(rvtFile)"
- },
- "result": {
- "verb": "put",
- "description": "Results",
- "required": true,
- "localName": "result.rvt"
- }
- },
- "engine": "Autodesk.Revit+2018",
- "appbundles": [
- "YourNickname.DeleteWallsApp+test"
- ],
- "description": "Delete walls from Revit file Updated.",
- "version": 2,
- "id": "YourNickname.DeleteWallsActivity"
- }
Шаг 4. Присваиваем alias новой версии activity.
Вы можете обновить существующий alias так, чтобы он указывал на новую версию activity. Для этого Вы можете удалить и пересоздать alias, либо выполнить следующий PATCH-запрос:
- 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 '{
- "version": 2
- }'`
Использование другого языка для запуска Revit в сервисе Design Automation
Вы можете запустить локализованную версию Design Automation для Revit, используя аргумент /l в строке команды при создании activity. Например:
- {
- "commandLine": [
- "$(engine.path)\\\\revitcoreconsole.exe /i $(args[rvtFile].path) /al $(apps[DeleteWallsApp].path) /l RUS"
- ],
- ...
- }
В этом случае 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