Как запустить правило iLogic через API?

Автор Тема: Как запустить правило iLogic через API?  (Прочитано 7590 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Добрый день. Собственно весь вопрос в названии темы. Пытаюсь запустить через VBA, но в справке по API нету объектов iLogic. Может кто уже сталкивался?
« Последнее редактирование: 09-09-2014, 19:41:55 от Pabloa »

Оффлайн Владимир Ананьев

  • ADN DevHelp
  • *
  • Сообщений: 148
  • Карма: 8
Re: Как запустить правило iLogic через API?
« Ответ #1 : 09-09-2014, 19:59:43 »
Вот код для запуска внешнего правила (External Rule):

Код - Visual Basic [Выбрать]
  1. Public Sub RuniLogic(ByVal RuleName As String)
  2.   Dim iLogicAuto As Object
  3.   Dim oDoc As Document
  4.   Set oDoc = ThisApplication.ActiveDocument
  5.   If oDoc Is Nothing Then
  6.     MsgBox "Missing Inventor Document"
  7.     Exit Sub
  8.   End If
  9.   Set iLogicAuto = GetiLogicAddin(ThisApplication)
  10.   If (iLogicAuto Is Nothing) Then Exit Sub
  11.   iLogicAuto.RunExternalRule oDoc, RuleName
  12. End Sub
  13.  
  14. Function GetiLogicAddin(oApplication As Inventor.Application) As Object
  15.   Set addIns = oApplication.ApplicationAddIns
  16.   'Find the add-in you are looking for
  17.  Dim addIn As ApplicationAddIn
  18.   On Error GoTo NotFound
  19.   Set addIn = oApplication.ApplicationAddIns.ItemById("{3bdd8d79-2179-4b11-8a5a-257b1c0263ac}")
  20.   If (addIn Is Nothing) Then Exit Function
  21.   addIn.Activate
  22.   Set GetiLogicAddin = addIn.Automation
  23.   Exit Function
  24.   NotFound:
  25. End Function

Для запуска обычного локального правила вместо LogicAuto.RunExternalRule используйте iLogicAuto.RunRule.

Взял здесь: http://forums.autodesk.com/t5/inventor-customization/launch-external-ilogic-rule-with-vba/m-p/3170614/highlight/true#M36266
« Последнее редактирование: 10-09-2014, 13:31:26 от Александр Ривилис »

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Re: Как запустить правило iLogic через API?
« Ответ #2 : 10-09-2014, 11:20:03 »
Спасибо. Я пытаюсь запустить RuniLogic, но VBA выдает "Argument not optional". А если удаляю "(ByVal RuleName As String)", то подчеркивает GetiLogicAddin  и выдает "Sub or Function not defined".

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Re: Как запустить правило iLogic через API?
« Ответ #3 : 10-09-2014, 11:42:22 »
На другом форуме ответили) Оказалось не так сложно)) Спасибо)

Код - Visual Basic [Выбрать]
  1. Sub Test_iLogic()
  2.  
  3. Dim addIn As Object
  4. Set addIn = ThisApplication.ApplicationAddIns.ItemById("{3bdd8d79-2179-4b11-8a5a-257b1c0263ac}")
  5.  
  6. If addIn Is Nothing Then Exit Sub
  7.  
  8. addIn.Activate
  9.  
  10. Dim iLogicAuto As Object
  11. Set iLogicAuto = addIn.Automation
  12.  
  13. If (iLogicAuto Is Nothing) Then Exit Sub
  14.  
  15. Dim curDoc As Document
  16. Set curDoc = ThisApplication.ActiveDocument
  17.  
  18. Call iLogicAuto.RunRule(curDoc, "Правило0")
  19.  
  20. 'iLogicAuto.paramValue(curDoc, "text0") = "From Automation"
  21. 'Dim curVal As String
  22. 'curVal = iLogicAuto.paramValue(curDoc, "text0")
  23. 'iLogicAuto.iProperties.Value(curDoc, "Custom", "PropertyName") = "444444444444"
  24.  
  25. 'Dim rule As Object
  26. 'Debug.Print (" ------- Rules: ----------")
  27. 'Dim rules As Object
  28. 'Set rules = iLogicAuto.rules(curDoc)
  29. 'If (Not rules Is Nothing) Then
  30. '  For Each rule In rules
  31. '
  32. '    Debug.Print (" --- " & rule.Name & " ---")
  33. '    Debug.Print (rule.Text)
  34. '    Call rule.Execute
  35. '  Next
  36. 'End If
  37.  
  38. End Sub
« Последнее редактирование: 10-09-2014, 13:30:33 от Александр Ривилис »

Оффлайн Алексей Романов

  • ADN Club
  • **
  • Сообщений: 87
  • Карма: 20
Re: Как запустить правило iLogic через API?
« Ответ #4 : 14-09-2014, 05:27:56 »
Спасибо. Я пытаюсь запустить RuniLogic, но VBA выдает "Argument not optional". А если удаляю "(ByVal RuleName As String)", то подчеркивает GetiLogicAddin  и выдает "Sub or Function not defined".
Все правильно, средствами АИ процедуру с аргументами не запустишь. Владимир не полностью привел код примера, а Вы не посмотрели ссылку. Здесь должна быть еще одна (запускаемая) процедура:
Код - Visual Basic [Выбрать]
  1. Public Sub LaunchMyRule1   '<--- This is what you would tie to a button in a toolbar.
  2.  RuniLogic "Правило0"
  3. End sub
« Последнее редактирование: 14-09-2014, 17:34:12 от Александр Ривилис »

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Re: Как запустить правило iLogic через API?
« Ответ #5 : 15-09-2014, 09:55:44 »
Я понял) спасибо большое!))