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

31/10/2020

Design Automation: Подготовка кода правил iLogic для запуска в сервисе Design Automation для Inventor

При использовании сервиса Design Automation для Inventor Вам, вероятно, потребуется слегка поправить код правил iLogic Ваших моделей.

1) ThisApplication.ActiveDocument

В десктопной версии приложения Inventor, пользователь может открывать документы без разрешения Вашего add-in-а, поэтому когда выполняется код Вашей команды, ему может быть необходимо знать, какой документ Inventor-а активен в данный момент. Свойство ActiveDocument предоставляет вызывающему коду эту информацию.

В облаке же, Ваше приложение (т.е. код в AppBundle) имеет полный контроль над Inventor Server, поэтому Inventor Server-у нет большого смысла отслеживать, какой документ активен в данный момент - Ваше приложение должно знать, с какими документами оно работает, какие открывает и т.д., поэтому и нет свойства InventorServer.ActiveDocument.

В большинстве случаев, Вы можете просто заменить ThisApplication.ActiveDocument в Ваших правилах iLogic на ThisDoc.Document (документ, в котором запускается правило iLogic), хотя это, конечно, зависит от задач, выполняемых правилом iLogic.

Однако, в некоторых случаях, ThisApplication.ActiveDocument может указывать на сборку верхнего уровня, содержащую деталь, в которой уже запускается само правило iLogic (правило "UpdatePart" на картинке ниже):

В этом случае Вы можете воспользоваться, например, следующей функцией для получения сборки верхнего уровня:

Код - VBA: [Выделить]
  1. Function GetTopAssembly(doc As Document) As Document
  2.   If doc.ReferencingDocuments.Count = 0 Then
  3.     Set GetTopAssembly = doc
  4.   Else
  5.     Set GetTopAssembly = GetTopAssembly(doc.ReferencingDocuments(1))
  6.   End If
  7. End Function

Код выше - это VBA. В случае, если Вам нужен код iLogic, просто удалить ключевые слова "Set".

ThisApplication так же не поддерживается. Его можно заменить на ThisServer (поддерживается как в десктопной, так и в облаке), который будет содержать только свойства и методы, доступные Inventor Server-у, т.е. у него не будет, например, свойства ActiveDocument.

2) iLogic Forms

Я уже писал о том, как Вы можете пересоздать те же самые формы, которые есть в iLogic Forms на веб-странице.

3) Другие компоненты пользовательского интерфейса

Поскольку код, выполняемый на сервере, не может взаимодействовать с пользователем, Вам нужно будет удалить все сообщения и другие компоненты пользовательского интерфейса - т.е. вызовы MessageBox.Show(), MsgBox(), iLogicForm.Show(), InputBox(), и т.д.

Есть очень полезный инструмент "iLogic Rule Exporter", который может помочь с поиском кода правил iLogic, который нужно удалить или заменить. Он позволяет извлечь все правила из документа Inventor-а и его связанных документов и сохранить их как файлы iLogicVb:

https://github.com/ADN-DevTech/iLogicRuleExporter

Он также полезен тем, что позволяет быстро найти что-либо в коде, например, где изменяется определенный параметр или используется то или иное API.

4) Логи

Логгирование особенно становится полезно на сервере, где пользователь не может оценить, что происходит с приложением.

Я писал об использовании Trace в правилах iLogic: Отладка кода правила iLogic

С тех давних времен в ilogic появился объект Logger, который позволяет отображать сообщения во вкладке "iLogic Log" в пользовательском интерфейсе Inventor-а:

Однако, в настоящий момент эти логи не отображаются в отчете о выполнении WorkItem-а. Но там пишутся все Trace.WriteLine(), поэтому используйте их вместо API Logger-а.

 

Источник: https://forge.autodesk.com/blog/prepare-ilogic-rules-design-automation

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