Часть 3. Шаблон проекта Visual Studio Design Automation для Inventor. Запуск WorkItem-а
Я ранее рассказал Вам о шаблоне проекта Visual Studio для использования в сервисе Design Automation для Inventor-а (см. также перевод[TODO] на нашем сайте), и о том, как он может помочь Вам при отладке Вашего кода (см. также перевод[TODO] на нашем сайте).
В этой статья я расскажу о том, как использовать проект "Interaction" для создания и обновления AppBundle-а, Activity и запуска WorkItem-ов.
В первую очередь, Вам необходимо прописать clientid, clientsecret Вашего приложения Forge в файле "appsettings.json":
Поскольку в событии Post-Build проекта AppBundle (в нашем случае "TestPlugin") уже описан механизм создания zip-файла AppBundle-а, который может быть загружен в сервис Design Automation, Вы уже можете запустить задачу "Post app bundle" в приложении "Interaction" для загрузки AppBundle-а в облако.
Примечание: лучше всё-таки запустить сначала "Rebuild Solution", чтобы быть полностью уверенным, что Вы загружаете в сервис последнюю версию Вашего кода.
В файле"Publisher.Custom.cs" Вы можете задать те параметры AppBundle, Activity и WorkItem-а, которые нужны Вам. В данном случае я добавил свойство "InputJson", в котором будет передаваться путь к json-файлу с параметрами, используемыми в конкретномWorkItem.
Я могу использовать это свойство в Activity, в WorkItem и в командной строке Activity. Вот как можно указать путь в командной строке Activity:
- private static List<string> GetActivityCommandLine()
- {
- return new List<string> {
- $"$(engine.path)\\InventorCoreConsole.exe /al $(appbundles[{Constants.Activity.Id}].path)" +
- $"/i $(args[{Constants.Parameters.InventorDoc}].path) $(args[{Constants.Parameters.InputJson}].path)"
- };
- }
Поскольку мы не передаем путь к нашему json-файлу в качестве известной сервису командной строки (например такой как "/i", определяющей, какой документ необходимо открыть), то в методе RunWithArguments() из AppBundle-а он будет доступен через объект "map". В нашем случае, по ключу "_1", см. статью Run() vs RunWithArguments() (перевод на нашем сайте).
Теперь добавим параметр самойActivity:
- private static Dictionary<string, Parameter> GetActivityParams()
- {
- return new Dictionary<string, Parameter>
- {
- {
- Constants.Parameters.InventorDoc,
- new Parameter
- {
- Verb = Verb.Get,
- Description = "IPT file to process"
- }
- },
- {
- Constants.Parameters.InputJson,
- new Parameter
- {
- Verb = Verb.Get,
- LocalName = "params.json",
- Description = "Input parameters"
- }
- },
- {
- Constants.Parameters.OutputIpt,
- new Parameter
- {
- Verb = Verb.Put,
- LocalName = "result.ipt",
- Description = "Resulting IPT",
- Ondemand = false,
- Required = false
- }
- }
- };
- }
Примечание: убедитесь, что Вы указали свойство localName в свойстве параметраActivity (как показано выше) или в свойстве WorkItem-а, в противном случае, Design Automation будет пытаться скачать данные по переданному значению URL, что в нашем случае будет "data:application/json,{\"length\":\"10 in\"}", см. ниже.
Теперь можно запустить задачу "Post activity" приложения "Interaction". Осталось добавить параметр WorkItem-а:
- private static Dictionary<string, IArgument> GetWorkItemArgs()
- {
- // TODO: укажите реальные URL
- return new Dictionary<string, IArgument>
- {
- {
- Constants.Parameters.InventorDoc,
- new XrefTreeArgument
- {
- Url = "!!! CHANGE ME !!!"
- }
- },
- {
- Constants.Parameters.InputJson,
- new XrefTreeArgument
- {
- Url = "data:application/json,{\"length\":\"10 in\"}"
- }
- },
- {
- Constants.Parameters.OutputIpt,
- new XrefTreeArgument
- {
- Verb = Verb.Put,
- Url = "!!! CHANGE ME !!!"
- }
- }
- };
- }
Как Вы можете видеть в коде выше, вполне возможно передать содержимое json-файла напрямую в URL, вместо необходимости создания его где-либо, создания pre-signed url для него и передачи в WorkItem.
Самым простым способом создания URL-ов для параметровInventorDoc и OutputIpt является их загрузка в bucket ObjectStore Service-а и генерация pre-signed URL для них:
Для этого вы можете использовать такие инструменты как https://oss-manager.autodesk.io/ или Autodesk Forge Tools расширение для VS Code (перевод статьи на нашем сайте)
После заполнения значений URL-ов в свойствах WorkItem-а, Выможетезапустить задачу "Run work item" приложения "Interaction". После завершения выполнения WorkItem-а, созданный сервисом отчет будет выведен в консоли:
Помимо общей информации, такой какой именно движок сервисаDesign Automation был использован, успешно ли была выполнена задача и т.д., отчет будет содержать Trace сообщения, из кода AppBundle или правил iLogic:
Вы также можете использовать https://da-manager.autodesk.io/ или выше указанное расширение для VSCode, чтобы проверить Ваши AppBundles, Activities и WorkItems:
Источник: https://forge.autodesk.com/blog/design-automation-inventor-vs-template-run-workitem
Опубликовано 31.08.2020