Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  TransactionEvent.OnCommit wie abfangen?

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  TransactionEvent.OnCommit wie abfangen? (800 mal gelesen)
EIBe 3D
Mitglied
Dipl. - Ing. (FH)


Sehen Sie sich das Profil von EIBe 3D an!   Senden Sie eine Private Message an EIBe 3D  Schreiben Sie einen Gästebucheintrag für EIBe 3D

Beiträge: 267
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 30. Nov. 2020 14:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

Ralf hatte mir in diesem Beitrag schmackhaft gemacht das TransactionElement "Bauteilliste erstellen" abzufangen.

Mangels Beispielen in der API-Hilfe und da ich im Netz kein übertragbares Beispiel fand, scheitere ich leider daran.


Vielleicht hat jemand ein Beispiel wie man TransactionEvent.OnCommit abfängt?


Vielen Dank schon einmal für eure Hilfe und Grüße

EIBe 3D

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KraBBy
Mitglied
Maschinenbau-Ingenieur


Sehen Sie sich das Profil von KraBBy an!   Senden Sie eine Private Message an KraBBy  Schreiben Sie einen Gästebucheintrag für KraBBy

Beiträge: 601
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 30. Nov. 2020 16:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für EIBe 3D 10 Unities + Antwort hilfreich

bist Du in der Hilfe schon darüber gestolpert?

Hilfe Overview Transactions

Am Ende gehts um die Events. Beim Sub oTxnEvents_OnCommit(...) könnte man TransactionObject.DisplayName abfragen. Lieferte in meinem mini-Test "Bauteilliste erstellen"

------------------
Gruß KraBBy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

EIBe 3D
Mitglied
Dipl. - Ing. (FH)


Sehen Sie sich das Profil von EIBe 3D an!   Senden Sie eine Private Message an EIBe 3D  Schreiben Sie einen Gästebucheintrag für EIBe 3D

Beiträge: 267
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 01. Dez. 2020 13:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo KraBBy,

darüber bin ich tatsächlich schon gestolpert bekomme es aber nicht ans laufen.

Irgendwie stelle ich mich gerade zu blöd an, was vielleicht an meinem Grippevernebelten Hirn liegt.

Könntest du kurz erklären wie ich den Kram ans laufen bekomme?


Danke und Grüße

EIBe 3D

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KraBBy
Mitglied
Maschinenbau-Ingenieur


Sehen Sie sich das Profil von KraBBy an!   Senden Sie eine Private Message an KraBBy  Schreiben Sie einen Gästebucheintrag für KraBBy

Beiträge: 601
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 01. Dez. 2020 15:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für EIBe 3D 10 Unities + Antwort hilfreich

hatte mir eine UserForm (UF) angelegt.
Darauf ein Button "clear" (Element so benannt)
und eine Listbox "List".
Wichtig war noch .ShowModal der UF auf auf False.

Dann den Code in den "Code-Bereich" (heißt der so?) der UF kopiert und z.B. bei Sub UserForm_Initialize ausgeführt.

Dann läuft zumindest das Beispiel.

Edit: bzgl. Grippe natürlich gute Besserung!

------------------
Gruß KraBBy

[Diese Nachricht wurde von KraBBy am 01. Dez. 2020 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

EIBe 3D
Mitglied
Dipl. - Ing. (FH)


Sehen Sie sich das Profil von EIBe 3D an!   Senden Sie eine Private Message an EIBe 3D  Schreiben Sie einen Gästebucheintrag für EIBe 3D

Beiträge: 267
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 01. Dez. 2020 16:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo KraBBy,

danke für die Erklärung und Besserungswünsche. Damit habe ich es folgendermaßen rudimentär zum Laufen gebracht:

In ein Klassenmodul "clsTxnEnvents":

Code:

Public WithEvents oTxnEvents As TransactionEvents

Private Sub Class_Initialize()
    Dim oTxnMgr As TransactionManager
    Set oTxnMgr = ThisApplication.TransactionManager
   
    Set oTxnEvents = oTxnMgr.TransactionEvents
End Sub

Private Sub oTxnEvents_OnCommit(ByVal TransactionObject As Transaction, ByVal Context As NameValueMap, ByVal BeforeOrAfter As EventTimingEnum, HandlingCode As HandlingCodeEnum)

    If BeforeOrAfter = kBefore Then
        Debug.Print "Transaction: " & TransactionObject.DisplayName
        Debug.Print "Transaction: " & TransactionObject.Id & " will be committed"
    ElseIf BeforeOrAfter = kAfter Then
        Debug.Print "Transaction: " & TransactionObject.DisplayName
        Debug.Print "Transaction: " & TransactionObject.Id & " has been committed"
    End If
   
End Sub


In ein allgemeines Modul z.B. "EventHandler":

Code:

Private oTxnEvent As clsTxnEvents

Public Sub TxnEventStart()
    Set oTxnEvent = New clsTxnEvents
End Sub


Starte ich nun die Sub im allgemeinen Modul, wirft er mir einmalig die Debug.Print Lines in die Ausgabe. Passt soweit wie vorgesehen. Füge ich eine erneut eine Bauteilliste wird der Eventhandler nicht mehr befeuert.


Nun müsste ich allerdings jede Aktion die ich nach dem Event anstossen will dies ja auch innerhalb des Klassenmoduls tun, da ich scheinbar nur dort die Events abfangen kann? Sehe ich das soweit richtig?


Grüße

EIBe 3D

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KraBBy
Mitglied
Maschinenbau-Ingenieur


Sehen Sie sich das Profil von KraBBy an!   Senden Sie eine Private Message an KraBBy  Schreiben Sie einen Gästebucheintrag für KraBBy

Beiträge: 601
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 01. Dez. 2020 18:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für EIBe 3D 10 Unities + Antwort hilfreich

(jetzt werde ich in diese Sache gezogen, wobei ich nicht mehr geschafft hab, als das Beispiel aus der Hilfe zu starten. Hab bisher noch sehr wenig mit Klassen und Events gespielt. Das wieder als Warnung und um meine Aussagen besser einordnen zu können.)

Ja, deine Aktionen nach dem Event müssen im jeweiligen Eventhandler gestartet werden. Vorher noch checken, ob der Name der transaction passt. Wird dann ein Aufruf eines anderen sub sein, oder?

Das mit dem Modul weiß ich nicht so recht. Das müsste lange genug am laufen bleiben, bis das Event eingetreten ist. So läuft das Makro ja durch und am Ende werden alle Objekte gekillt. Kann man sehen, wenn eine msgbox in die Class_Terminate() gesetzt wird.
Das ist der Witz bei der UF, denk ich. Die bleibt so lange aktiv (und damit die eventhandler), bis sie geschlossen wird.

------------------
Gruß KraBBy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

EIBe 3D
Mitglied
Dipl. - Ing. (FH)


Sehen Sie sich das Profil von EIBe 3D an!   Senden Sie eine Private Message an EIBe 3D  Schreiben Sie einen Gästebucheintrag für EIBe 3D

Beiträge: 267
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 03. Dez. 2020 08:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo KraBBy,

ich zieh dich nirgendwo rein, das machst du schon selbst 

Nach erneuten Versuchen habe ich festgestellt, dass die Klasse weiter aktiv bleibt und wiederholt die Events ausgibt. Warum das bei meinen ersten Tests nicht so war kann ich nicht sagen.

Weitere Recherche hat ergeben, dass in VB.net scheinbar Events auch ausserhalb von Klassenmodulen unterstützt werden. Zeit für Tests hatte ich noch nicht.

Insgesamt ergibt sich für mich erstmal die ernüchternde Vermutung, möchte ich unterschiedliche Aktionen (z.B. Aufruf einer anderen Sub) bei Eintreten des gleichen Events ausführen, brauche ich dafür jeweils eine eigene Klasse in VBA.

Grüße

EIBe 3D

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KraBBy
Mitglied
Maschinenbau-Ingenieur


Sehen Sie sich das Profil von KraBBy an!   Senden Sie eine Private Message an KraBBy  Schreiben Sie einen Gästebucheintrag für KraBBy

Beiträge: 601
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 03. Dez. 2020 12:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für EIBe 3D 10 Unities + Antwort hilfreich

bei VB.net und Addin muss ich leider passen.

Das unbedingt verschiedenen Klassen nötig sind, sehe ich nicht so. Du könntest Deine Klasse ja so gestalten, dass sie von außen die nötigen Infos bekommt. z.B. den gesuchten DisplayName der Transaction und die auszuführende Aktion als Property (im einfachsten Fall als Public Variable auf Class-Ebene).

z.B. ein Sub in der Klasse (falls auch nicht nur das _OnCommit was zu tun bekommt)

Private Sub chose_Action()
Select Case public_auszuf_Aktion
Case "A"
  Call Sub_was_auch_immer()
Case "B"
  Call Sub_was_anderes()
'...
Case Else
  'Fehlermeldung oder Warnung
End Select
End Sub

Im Eventhandler nach der Prüfung auf DisplayName, dann nur der Aufruf der chose_Action().

Vielleicht bietet sich ein Enumerator an, um die "auszuführende Aktion" besser in den Griff zubekommen. Könnte im Code besser lesbar/verständlich sein, als mein "A" u. "B" oben.

------------------
Gruß KraBBy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

EIBe 3D
Mitglied
Dipl. - Ing. (FH)


Sehen Sie sich das Profil von EIBe 3D an!   Senden Sie eine Private Message an EIBe 3D  Schreiben Sie einen Gästebucheintrag für EIBe 3D

Beiträge: 267
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 04. Dez. 2020 09:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke für den Tipp. Jetzt wo ich wieder halbwegs klar denken kann hab ich es auch gerafft  

Sobald ich Zeit habe werd ich mich drum kümmern. Ist gerade nur ein untergeordnetes Problem da es ja funktioniert. Wenn ich das Ganze ändere muss ich es eh in VBA und VB.net tun.

Anzumerken wäre noch, dass die Abfrage nach dem Displaynamen der Transaction zu Fehlern führen kann. Nicht alle Transactions haben diesen. Ich glaube nur Tansactions die per undo oder redo behandelt werden können. Habe ich aber noch nicht genau geprüft. Geht man über die Transaction ID ist man jedenfalls auf der sicheren Seite.

Sobald ich das ausgetüftelt habe stell ichs hier rein.

Grüße

EIBe 3D

Edit: Schwachsinn korrigiert

[Diese Nachricht wurde von EIBe 3D am 04. Dez. 2020 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KraBBy
Mitglied
Maschinenbau-Ingenieur


Sehen Sie sich das Profil von KraBBy an!   Senden Sie eine Private Message an KraBBy  Schreiben Sie einen Gästebucheintrag für KraBBy

Beiträge: 601
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 04. Dez. 2020 09:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für EIBe 3D 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von EIBe 3D:
Anzumerken wäre noch, dass die Abfrage nach dem Displaynamen der Transaction zu Fehlern führen kann. Nicht alle Transactions haben diesen. Ich glaube nur Tansactions die per undo oder redo behandelt werden können. Habe ich aber noch nicht genau geprüft. Geht man über die Transaction ID ist man jedenfalls auf der sicheren Seite.

Das raffe ich jetzt nicht. Was hilft die ID? Das ist doch mehr oder weniger nur ein Zähler, mit dem die Transactions durchnummeriert werden. Selbst gleiche Aktionen bekommen verschiedene IDs.

------------------
Gruß KraBBy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

EIBe 3D
Mitglied
Dipl. - Ing. (FH)


Sehen Sie sich das Profil von EIBe 3D an!   Senden Sie eine Private Message an EIBe 3D  Schreiben Sie einen Gästebucheintrag für EIBe 3D

Beiträge: 267
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 04. Dez. 2020 09:58    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Stimmt natürlich, ich hab Mist geschrieben. 

Ich korrigier das mal lieber oben

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz