Design Automation: Inventor Run() и RunWithArguments()
Design Automation API для Inventor вызывает либо Run(), либо RunWithArguments() плагина в AppBundle, в зависимости от указанной командной строки (параметра commandLine в Activity, использующей AppBundle)
- Run(Document doc) вызывается только, если параметр commandLine содержит только аргументы, обрабатываемые InventorCoreConsole. На текущий момент это:
/al: путь к загружаемой AppBundle
/i: путь к загружаемому документу
/s: путь к файлу запускаемого скрипта (см Run command from an AutoCAD AppBundle и Run iLogic Rule without AppBundle)
т. е. что-то вроде:
- $(engine.path)\\InventorCoreConsole.exe /i $(args[inputFile].path) /s $(settings[script].path)
- RunWithArguments(Document doc, NameValueMap map) вызывается в случае наличия дополнительных аргументов, обрабатываемых InventorCoreConsole, например:
- $(engine.path)\\InventorCoreConsole.exe /i $(args[inputFile].path) /s $(settings[script].path) params.json
- $(engine.path)\\InventorCoreConsole.exe /i $(args[inputFile].path) /s $(settings[script].path) /j $(args[inputParams].path)
Дополнительные аргументы командной строки будут доступны в параметре map. Ключами NameValueMap будут "_1", "_2" … Например, для следующей commandLine:
- "$(engine.path)\\InventorCoreConsole.exe /al $(appbundles[{Constants.Activity.Id}].path) /j $(args[{Constants.Parameters.InputJson}].path) /k \"justatest\""
следующие значения NameValueMapбудут перечислены в логах Workitem-а:
- [03/21/2020 13:18:39] InventorCoreConsole.exe Information: 0 : RunWithArguments called
- [03/21/2020 13:18:39] InventorCoreConsole.exe Information: 0 : List of values in 'map':
- [03/21/2020 13:18:39] InventorCoreConsole.exe Information: 0 : _1 = /j
- [03/21/2020 13:18:39] InventorCoreConsole.exe Information: 0 : _2 = T:\Aces\Jobs\9fbed84f067b4181b6f3d38cc447ab48\input.json
- [03/21/2020 13:18:39] InventorCoreConsole.exe Information: 0 : _3 = /k
- [03/21/2020 13:18:39] InventorCoreConsole.exe Information: 0 : _4 = just a test
Для вывода этой информации в логи был использован следующий код:
- public void RunWithArguments(Document doc, NameValueMap map)
- {
- LogTrace("RunWithArguments called");
- Trace.TraceInformation("List of values in 'map':");
- for (int i = 1; i <= map.Count; i++)
- {
- Trace.TraceInformation($"{map.Name[i]} = {map.Item[i]}");
- }
- }
Другой способ считывания аргументов командной строки показан в статье Handle command line arguments
Источник: https://forge.autodesk.com/blog/run-vs-runwitharguments
Опубликовано 31.05.2020