Hi Tigerpirro,
You can copy the event triggers that are set in another file (a template for instance).
http://adndevblog.typepad.com/manufacturing/2015/01/add-external-ilogic-rule-to-event-trigger.html
my modified version of the example at that link is below. I set up external rules with event triggers in the templates, and then I have this "Copy Event Triggers rule" called from various other external rules as needed. Keep in mind, I repurposed the rule I found at the adndevblog, so there is likely some extra stuff in there that is not needed, etc. I never did go back through it and clean it up.
I hope this helps.
Best of luck to you in all of your Inventor pursuits,
Curtis
http://inventortrenches.blogspot.com
Imports System.Collections.Generic
'code taken and modified from:
'http://adndevblog.typepad.com/manufacturing/2015/01/add-external-ilogic-rule-to-event-trigger.html
Sub Main
Trace.WriteLine("Event Driven Rules Copy", "iLogic") 'debug
Dim oTemplateDoc As Document
Dim oTemplate As String
'check file type
If ThisApplication.ActiveEditDocument.DocumentType = kDrawingDocumentObject Then
'If ThisDoc.Document.DocumentType = kDrawingDocumentObject Then
oTemplate = "\\server\departments\CAD\Inventor\Templates\Standard.idw" 'file to copy events from
ElseIf ThisApplication.ActiveEditDocument.DocumentType = kPartDocumentObject Then
'ElseIf ThisDoc.Document.DocumentType = kPartDocumentObject Then
oTemplate = "\\server\departments\CAD\Inventor\Templates\Standard.ipt" 'file to copy events from
Else
oTemplate = "\\server\departments\CAD\Inventor\Templates\Standard.iam" 'file to copy events from
End If
'file to copy events to
oInput = ThisApplication.ActiveEditDocument.FullFileName
If oInput = "" Then 'catch a new file with no path
Return
End If
'open the template
oTemplateDoc = ThisApplication.Documents.Open(oTemplate, False)
CopyEventsToDocuments(oTemplateDoc)
oTemplateDoc.Close
End Sub
Private Const m_ourGuid As String = "{2C540830-0723-455E-A8E2-891722EB4C3E}"
Private savedEnabled As Boolean
Dim oInput As String
Public Sub CopyEventsToDocuments(ByVal sourceDoc As Document)
Dim sourcePropSet As PropertySet = GetEventRulesPropertySet(sourceDoc)
Dim inputs() As String = { oInput}
Dim destinationFileNames As List(Of String) = New List(Of String)(inputs)
If (destinationFileNames Is Nothing) Then Return
savedEnabled = iLogicVb.Automation.RulesOnEventsEnabled
iLogicVb.Automation.RulesOnEventsEnabled = False
Try
CopyEventsToAllDocuments(sourcePropSet, sourceDoc, destinationFileNames)
Finally
iLogicVb.Automation.RulesOnEventsEnabled = savedEnabled
End Try
End Sub
Function GetEventRulesPropertySet(ByVal sourceDoc As Document) As PropertySet
Try
Return sourceDoc.PropertySets(m_ourGuid)
Catch ex As Exception
Return Nothing
End Try
End Function
Function VerifyRulesPropertySet(ByVal propSet As PropertySet) As Boolean
If (propSet Is Nothing) Then Return True
' See if any rules are internal instead of external. We can't copy those.
For Each prop As Inventor.Property In propSet
Dim strValue As String = prop.Value.ToString
If (Not strValue.StartsWith("file://")) Then Return False
Next
Return True
End Function
Sub CopyEventsToAllDocuments(ByVal sourcePropSet As PropertySet, ByVal sourceDoc As Document, ByVal destinationFileNames As List(Of String))
For Each fileName As String In destinationFileNames
If (String.Equals(sourceDoc.FullFileName, fileName)) Then Continue For
CopyEventsToDocument(sourcePropSet, fileName)
Next
End Sub
Sub CopyEventsToDocument(ByVal sourcePropSet As PropertySet, ByVal fileName As String)
'Dim doc As Document = FindOpenDocument(fileName)
Dim openedHere As Boolean = False
If (doc Is Nothing) Then
doc = ThisApplication.Documents.Open(fileName, True)
openedHere = True
End If
CopyEventsPropertySetToDocument(sourcePropSet, doc)
iLogicVb.Automation.RulesOnEventsEnabled = savedEnabled
End Sub
Sub CopyEventsPropertySetToDocument(ByVal sourcePropSet As PropertySet, ByVal doc As Document)
' If an event-driven rules property set already exists, delete it.
Dim oldPropSet As PropertySet = GetEventRulesPropertySet(doc)
If (oldPropSet IsNot Nothing) Then
oldPropSet.Delete()
End If
If (sourcePropSet Is Nothing OrElse sourcePropSet.Count = 0) Then Return
Dim destPropSet As PropertySet = doc.PropertySets.Add("_iLogicEventsRules", m_ourGuid)
For Each prop As Inventor.Property In sourcePropSet
destPropSet.Add(prop.Value, prop.Name, prop.PropId)
Next
EnsureDocumentInterest(doc)
End Sub
Const iLogicId As String = "{3bdd8d79-2179-4b11-8a5a-257b1c0263ac}"
Sub EnsureDocumentInterest(ByVal doc As Document)
If (ThisApplication.SoftwareVersion.Major < 15) Then Return ' Inventor 2010 or before
If (DocumentHasiLogicInterest(doc)) Then Return
Dim dataVersion As Integer = 20090512
Dim newInterest As DocumentInterest = doc.DocumentInterests.Add(iLogicId, "iLogic", DocumentInterestTypeEnum.kInterested, dataVersion, Nothing)
End Sub
Function DocumentHasiLogicInterest(ByVal doc As Document) As Boolean
Dim interest As DocumentInterest = FindDocumentInterest(doc, iLogicId)
If (interest IsNot Nothing) Then
If (interest.InterestType = DocumentInterestTypeEnum.kInterested) Then
Return True
End If
interest.Delete()
End If
Return False
End Function
Function FindDocumentInterest(ByVal doc As Document, ByVal clientId As String) As DocumentInterest
For Each interest As DocumentInterest In doc.DocumentInterests
If (String.Equals(interest.ClientId, clientId, StringComparison.OrdinalIgnoreCase)) Then
Return interest
End If
Next
Return Nothing
End Function
