Bauteil direkt in Baugruppe modifizieren �� Trigger AppEvents_OnSaveDocument? / Inventor .NET
mb-ing 29. Nov. 2021, 14:00

Hallo zusammen,

ich habe eine Funktion "UpdateStandardIProperties()" implementiert, welche bestimmte I-Properties abhängig vom Dokumenttyp aktualisiert.
Diese wird unter anderem durch folgenden Trigger angesprochen:

Code:
Private Sub AppEvents_OnSaveDocument(DocumentObject As _Document, BeforeOrAfter As EventTimingEnum, Context As NameValueMap, ByRef HandlingCode As HandlingCodeEnum) Handles AppEvents.OnSaveDocument
  If BeforeOrAfter = EventTimingEnum.kBefore Then
  ...
  iProperties.UpdateStandardIProperties()
  ...
...

Das funktioniert soweit auch tadellos, ABER ...  

Wenn ich eine IPT in einer IAM direkt modifiziere (Doppelklick auf die Komponente), zurück in die IAM gehe und dann speichere, werden nur die I-Properties der IAM aktualisiert.
Inventor speichert zwar beide Dateien korrekt ab, aber der obige Trigger wird nur bei der IAM ausgelöst.

Wie bekomme ich es hin, dass auch die modifizierte IPT angesprochen wird?
Natürlich will ich nicht, dass immer alle Komponenten durchgeiert werden 

Eigentlich voll die Zwickmühle...

Speichere ich die IPT während der "Direktbearbeitung" in der IAM läuft die Funktion wie gewünscht durch.

Ich hoffe ich konnte mein Anliegen nachvollziehbar erörtern 

Ergänzung:

Der Trigger:

Code:
Private Sub DocEvents_OnSave(BeforeOrAfter As EventTimingEnum, Context As NameValueMap, ByRef HandlingCode As HandlingCodeEnum) Handles DocEvents.OnSave
  If BeforeOrAfter = EventTimingEnum.kBefore Then
  ...
...

liefert bei den anderen zu speichernden Dokumenten nur "kAfter"!?
Aber ich möchte die I-Properties ja vor dem Speichern aktualisieren 
Oder stehe ich auf dem Schlauch?

Danke und Grüße
MB-Ing.

rkauskh 29. Nov. 2021, 14:41

Hallo

Wie sprichst du denn in deiner iProperties.UpdateStandardIProperties() das gewünschte Dokument an? Ich hoffe nicht über ActiveEditDocument? Weil genau danach klingt es, das es funktioniert wenn du in der Direktbeabeitung speicherst.
Ich würde das DocumentObject des OnSave-Events als Argument mitgeben. Gegebenenfalls könnte man das Argument ja auch als Optional deklarieren und wenn kein DocumentObject übergeben wird, nimmt die Funktion das aktive Dokument.

Aus dem Kopf in etwa so (Syntaxfehler nicht ausgeschlossen):

Code:
Private Sub AppEvents_OnSaveDocument(DocumentObject As _Document, BeforeOrAfter As EventTimingEnum, Context As NameValueMap, ByRef HandlingCode As HandlingCodeEnum) Handles AppEvents.OnSaveDocument
  If BeforeOrAfter = EventTimingEnum.kBefore Then
  ...
  iProperties.UpdateStandardIProperties(DocumentObject)
  ...
...

Code:

Private Function UpdateStandardIProperties(Optional ByVal Document as Document = Nothing)

Dim myDoc as Document = Document
If Document is Nothing then
myDoc=myInventor.ActiveDocument
End if

...



EDIT: DocEvents sollte mW auch ein kBefore haben. 

mb-ing 30. Nov. 2021, 07:08

Hi Ralf,

und erneut vielen, vielen herzlichen Dank für Deine Hilfe, die mein Problem gelöst hat.

Schande über mein Haupt, Fehler 70 

Ich habe zwischendurch das gewünschte Objekt mit "ActiveEditDocument" überschrieben 
Der Murks fällt natürlich erst bei der genannten Konstellation mit der Bauteilbearbeitung in der Baugruppe auf...

Danke und Grüße
MB-Ing.