Руководство по Design Automation для Revit: 4. Публикация Design Automation appbundle
Содержание
1. Преобразуем код десктопного Revit addin в код для сервиса Design Automation
2. Создание приложения Forge и авторизация
3. Создание nickname приложения Forge
4. Публикация Design Automation appbundle
7. Обработка ошибок и предупреждений
Appbundle - это пакет dll и дополнительных файлов Вашего приложения Revit Addin.
Шаг 1. Структура AppBundle
Appbundle Design Automation для Revit представляет собой zip-архив определенной структуры. Пример такого appbundle: DeleteWallsApp.zip.
Его структура
- DeleteWallsApp.zip
- |-- DeleteWalls.bundle
- | |-- PackageContents.xml
- | |-- Contents
- | | |-- DeleteWalls.dll
- | | |-- DeleteWalls.addin
Имя корневой папки обязательно должно быть вида *.bundle. В этой папке *.bundle должен быть файл PackageContents.xml, который содержит описание appbundle и относительный путь к файлу манифеста .addin.
- <?xml version="1.0" encoding="utf-8" ?>
- <ApplicationPackage>
- <Components Description="Delete Walls">
- <RuntimeRequirements OS="Win64"
- Platform="Revit"
- SeriesMin="R2018"
- SeriesMax="R2018" />
- <ComponentEntry AppName="DeleteWalls"
- Version="1.0.0"
- ModuleName="./Contents/DeleteWalls.addin"
- AppDescription="Deletes walls"
- LoadOnCommandInvocation="False"
- LoadOnRevitStartup="True" />
- </Components>
- </ApplicationPackage>
SeriesMin и SeriesMax относятся к Revit 2018 (R2018). Текущая версия сервиса Design Automation для Revit поддерживает только appbundle-ы, которые могут быть запущены в версиях Revit R2018 и R2019.
В папку *.bundle\Contents положит файл addin, DLL приложения и его зависимостей.
- <?xml version="1.0" encoding="utf-8"?>
- <RevitAddIns>
- <AddIn Type="DBApplication">
- <Name>DeleteWalls</Name>
- <Assembly>.\DeleteWalls.dll</Assembly>
- <AddInId>d7fe1983-8f10-4983-98e2-c3cc332fc978</AddInId>
- <FullClassName>DeleteWalls.DeleteWallsApp</FullClassName>
- <Description>"Walls Deleter"</Description>
- <VendorId>Autodesk</VendorId>
- <VendorDescription>
- </VendorDescription>
- </AddIn>
- </RevitAddIns>
Примечание: Type должен быть DBApplication. Design Automation для Revit не поддерживает приложений, которым нужен пользовательский интерфейс. В Assembly укажите относительный путь к DLL.
Примеры структуры и содержания папки *.bundle и файла PackageContent.xml показаны в презентации об Autodesk Exchange Revit Apps здесь.
Файл PackageContents.xml существующего приложения из Autodesk Exchange Revit apps может быть использован как есть, но Design Automation для Revit считывает толькоблокиRuntimeRequirements и ComponentEntry, отмеченные ниже:
Шаг 2. API для appbundles
- /v3/appbundles (POST) - создает новый appbundle
- /v3/appbundles/{id}/aliases (POST) - задает alias appbundle-а
- /v3/appbundles/{id}/versions (POST) - создает новую версию appbundle-а
- /v3/appbundles/{id}/aliases/{aliasId} (PATCH) - предназначен для изменения appbundle-а
Базовый URL: https://developer.api.autodesk.com/da/us-east
Перечень API для appbundle-ов доступен здесь.
Создание нового Appbundle
Для публикации appbundle в сервисе Design Automation, Вам необходимо его создать и загрузить в него zip-файл, созданный на предыдущем этапе.
В этом примере создается appbundle DeleteWallsApp. Целевая машина сервиса Design Automation для этого примера - Revit 2018:
- curl -X POST https://developer.api.autodesk.com/da/us-east/v3/appbundles -H 'Authorization: Bearer LongStringAccessTokenObtainedDuringAuthenthication' -H 'Content-Type: application/json' -d '{
- "id": "DeleteWallsApp",
- "engine": "Autodesk.Revit+2018",
- "description": "Delete Walls appbundle based on Revit 2018"
- }'
Здесь:
- id - имя appbundle
- engine - Autodesk.Revit+2018 - для Revit 2018
Пример ответа сервиса:
- {
- "uploadParameters": {
- "endpointURL": "https://dasprod-store.s3.amazonaws.com",
- "formData": {
- "key": "apps/Revit/DeleteWallsApp/1",
- "content-type": "application/octet-stream",
- "policy": "eyJleHBpcmF0aW9uIjoiMjAxOC... (truncated)",
- "success_action_status": "200",
- "success_action_redirect": "",
- "x-amz-signature": "6c68268e23ecb8452... (truncated)",
- "x-amz-credential": "ASIAQ2W... (truncated)",
- "x-amz-algorithm": "AWS4-HMAC-SHA256",
- "x-amz-date": "20180810... (truncated)",
- "x-amz-server-side-encryption": "AES256",
- "x-amz-security-token": "FQoGZXIvYXdzEPj//////////wEaDHavu... (truncated)"
- }
- },
- "engine": "Autodesk.Revit+2018",
- "description": "Delete Walls appbundle based on Revit 2018",
- "version": 1,
- "id": "YourNickname.DeleteWallsApp"
- }
Здесь:
- endpointURL - url, по которому должен быть загружен zip-файл, созданный на 1 шаге
- version - номер версии appbundle-а. Для новых appbundle-ов это всегда 1.
- formData - данные, которые должны быть использованы при загрузке appbundle-а. Они имеют время жизни - 1 час, по истечении которого становятся недействительными
Шаг 3. Загрузка zip-файла appbundle-а
Теперь Вы можете загрузить zip-файл по URL, который пришёл в ответе сервиса на предыдущий запрос endpointURL:
- curl -X POST https://dasprod-store.s3.amazonaws.com -H 'Cache-Control: no-cache' -F key=apps/Revit/DeleteWallsApp/1 -F content-type=application/octet-stream -F policy=eyJleHBpcmF0aW9uIjoiMjAxOC... (truncated) -F success_action_status=200 -F success_action_redirect= -F x-amz-signature=6c68268e23ecb8452... (truncated) -F x-amz-credential=ASIAQ2W... (truncated) -F x-amz-algorithm=AWS4-HMAC-SHA256 -F x-amz-date=20180810... (truncated) -F x-amz-server-side-encryption=AES256 -F 'x-amz-security-token=FQoGZXIvYXdzEPj//////////wEaDHavu... (truncated)' -F 'file=@path/to/your/app/zip'
Это пример для утилиты curl. Вы можете использовать другие инструменты, например Postman, чтобы загрузить файл appbundel-а. Не забудьте указать все данные form-data из ответа сервиса, полученного на предыдущем шаге.
Шаг 4. Создание Alias-а Appbundle-а
Новая версия Вашего appbundle будет доступна по псевдониму (alias).
В этом примере создается alias с id test для версии 1 appbundle-а DeleteWallsApp:
- curl -X POST https://developer.api.autodesk.com/da/us-east/v3/appbundles/DeleteWallsApp/aliases -H 'Content-Type: application/json' -H 'Authorization: Bearer LongStringAccessTokenObtainedDuringAuthenthication' -d '{
- "version": 1,
- "id": "test"
- }'
https://developer.api.autodesk.com/da/us-east/v3/appbundles/{appId}/aliases - {appId}(DeleteWallsApp) можно заменить для того, чтобы использовать этот пример с другими appbundle-ами.
Шаг 5. Обновление существующего Appbundle-а
Чтобы обновить существующий appbundle, необходимо создать новую версию appbundle-а и загрузить обновленный zip-архив приложения.
Создание новой версии
При попытке создать appbundle, как указано выше в шаге 2, Вы получите ошибку 409 Conflict.
Этот POST-запрос создает новую версию appbundle-а DeleteWallsApp:
- curl -X POST https://developer.api.autodesk.com/da/us-east/v3/appbundles/DeleteWallsApp/versions -H 'Content-Type: application/json' -H 'Authorization: Bearer LongStringAccessTokenObtainedDuringAuthenthication' -d '{
- "id": null,
- "engine": "Autodesk.Revit+2018",
- "description": "Delete Walls appbundle based on Revit 2018 Update"
- }'
Примечания:
- Вы можете опустить id в теле запроса. Если id указан в теле запроса, его значение должно быть null, иначе сервис выдаст ошибку.
- https://developer.api.autodesk.com/da/us-east/v3/appbundles/{appId}/versions - Замените {appId}(DeleteWallsApp) чтобы использовать этот пример с другими appbundle-ами.
Ответ сервиса:
- {
- "uploadParameters": {
- "endpointURL": "https://dasprod-store.s3.amazonaws.com",
- "formData": {
- "key": "apps/Revit/DeleteWallsApp/2",
- "content-type": "application/octet-stream",
- "policy": "eyJleHBpcmF0aW9uIjoiMjAxOC... (truncated)",
- "success_action_status": "200",
- "success_action_redirect": "",
- "x-amz-signature": "6c68268e23ecb8452... (truncated)",
- "x-amz-credential": "ASIAQ2W... (truncated)",
- "x-amz-algorithm": "AWS4-HMAC-SHA256",
- "x-amz-date": "20180810... (truncated)",
- "x-amz-server-side-encryption": "AES256",
- "x-amz-security-token": "FQoGZXIvYXdzEPj//////////wEaDHavu... (truncated)"
- }
- },
- "engine": "Autodesk.Revit+2018",
- "description": "Delete Walls appbundle based on Revit 2018",
- "version": 2,
- "id": "YourNickname.DeleteWallsApp"
- }
Здесь:
- package - url, по которому должен быть загружен zip-файл
- version - номер новой версии
Теперь Вы можете загрузить обновлённую версию zip-файла appbundle-f приложения по URL, который вернул сервис в ответе выше. Это делается так же, как на 3-ем шаге, см. выше.
Шаг 6. Присвоение существующего alias-а новой версии appbundle-а
Вы можете присвоить существующий alias новой версии appbundle-а, например после создания новой версии.
Для этого Вы можете либо удалить alias и пересоздать его заново с указанием новой версии appbundle-а, либо выполнить PATCH-запрос:
- curl -X PATCH https://developer.api.autodesk.com/da/us-east/v3/appbundles/DeleteWallsApp/aliases/test -H 'Content-Type: application/json' -H 'Authorization: Bearer LongStringAccessTokenObtainedDuringAuthenthication' -d '{
- "version": 2
- }'`
Псевдонимы (alias) версий доступных engine:
- Каждый appbundle POST-запрос требует указания engine, который определяет приложение, которое будет выполнять код. Alias-ы версий Design Automation engine соответствуют разным версиям Revit. Указанный engineдолжен быть совместим с указанными в PackageContent.xml SeriesMin и SeriesMax appbundle-а.
- Текущие alias-ы версий engine:
- Autodesk.Revit+2018 - Revit 2018.3.2
- Autodesk.Revit+2019 - Revit 2019.1
Примечания:
- API для получения информации о доступных engine доступно здесь.
- Общее описание возможных ошибок доступно здесь.
Назад к созданию nickname приложения Forge
Читать далее о публикации activity
Источник: https://forge.autodesk.com/en/docs/design-automation/v3/tutorials/revit/step4-publish-appbundle/
Обсуждение: http://adn-cis.org/forum/index.php?topic=
Опубликовано 30.01.2019Отредактировано 30.01.2019 в 19:03:26