Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  ENOVIA SmarTeam
  SmSession aus CATIA sauber beenden

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
Autor Thema:  SmSession aus CATIA sauber beenden (3023 mal gelesen)
phimUoB
Mitglied
Ingenieur


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

Beiträge: 107
Registriert: 08.08.2003

CATIA/Smarteam V5R16
Linux, Oracle, VMWare

erstellt am: 21. Feb. 2006 14:45    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,

Ich habe mal wieder ein API Problem. Nach der Umstellung auf R16 funktioniert unser als DLL realisiertes Stücklisten-Tool nicht mehr sauber. Das Tool wird aus CATIA gestartet, erzeugt eine SmGUISrv.SmCommonGUI Session, holt sich Daten aus der Smarteam Datenbank, macht die Session wieder zu und erzeugt Texte in einer CATIA Drawing.

Der Smarteam Sessseion Teil sieht so aus:

Code:

Option Explicit

Private Engine As SmApplic.SmFreeThreadedEngine
Private Session As SmApplic.SmSession

'Startet SmarTEAM Session

Public Function StartSmarTeam() As SmApplic.SmSession

    On Error GoTo ErrorStartSmarTeam
   
    Dim Database        As SmApplic.SmDatabase
   
    Set Engine = CreateObject("SmApplic.SmFreeThreadedEngine")
        Engine.Init "SmTeam32"
     
    Set Session = CreateObject("SmApplic.SmSession")
        Session.Init Engine, "UniBernBOM", "Smteam32"
       
    Set Database = Engine.Databases(0)
        Session.OpenDatabaseConnection Database.Alias, Database.Password, True
       
'    Dim GuiService As SmGUISrv.SmGUIServices
'    Set GuiService = Session.GetService("SmGUISrv.SmGUIServices")
'        GuiService.GUIStore.LogIn

    Dim GuiService As SmGUISrv.SmCommonGUI
    Set GuiService = Session.GetService("SmGUISrv.SmCommonGUI")
        GuiService.Dialogs.ExecuteLogin
   
    On Error GoTo 0
    GoTo EndStartSmarTeam
   
ErrorStartSmarTeam:
        MsgBox "StartSmartTeam: " & Err.Description & " (" & Err.Number & ")", vbCritical
   
EndStartSmarTeam:
    If Session.UserLoggedOn Then
        Set StartSmarTeam = Session
    Else
        Set StartSmarTeam = Nothing
    End If
   
End Function


'Beendet SmarTEAM Session

Public Function StopSmartTeam()
   
    On Error GoTo ErrorStopSmartTeam
   
    Session.Close
    Set Session = Nothing
   
'    Engine.Terminate 'funktioniert ab R16 nicht mehr gut
    Set Engine = Nothing

    On Error GoTo 0
    GoTo EndStopSmarTeam

ErrorStopSmartTeam:
    MsgBox "StopSmartTeam: " & Err.Description & " (" & Err.Number & ")", vbCritical
   
EndStopSmarTeam:
   
End Function


Es gibt noch eine 'Hauptfunktion' die zuerst StartSmarTeam() und dann StopSmartTeam() aufruft.

Mit R14 lief alles sehr gut. Seit R16 darf ich aber kein Engine.Terminate mehr machen da sonst beim zweiten Mal, also wenn die Funktion StartSmarTeam() nach StopSmartTeam() nochmals aufgerufen wird, folgender Fehler kommt:

Zitat:
Error No: 00621
The security device option ('') does not match the database. You might be exceeding the number of licenses. Consult with your System Administrator.

Mache ich aber kein Engine.Terminate kann ich aus CATIA nicht mehr den Smarteam-User wechseln. SmarTeam -> Disconnect gefolgt von SmarTeam -> Connect fragt dann nicht mehr nach User/Passwort, sondern logt einfach wider mit dem selben User wie vorher ein.
Erst nach einem CATIA Neustart kann wieder der SmarTeam User gewählt werden.

Wie mache ich also meine Session richtig tot?


Gruss, Beat

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

urxter
Mitglied


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

Beiträge: 3
Registriert: 17.06.2008

erstellt am: 10. Jun. 2010 17:11    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 phimUoB 10 Unities + Antwort hilfreich

Hallo Beat

Es sieht so aus, dass ich hier an der Universität den Code von dir weiterpflegen darf 

Ich denke ich habe dein Problem (das ja jetzt zu meinem wurde) gelöst. In R18 funktioniert Engine.Teminate() wieder und durch Probieren ist mir aufgefallen, das Session.UserLogoff() hier zusätzliche Abhile liefert. Die beiden Zuweisungen von Nothing sind ebenfalls nötig, wenn die (Test-)Applikation nach StopSmartTeam() noch weiterläuft und vielleicht nochmals StartSmarTeam() aufruf. Das ganze läuft jedoch mittlerweile unter VB 9, also als .NET-Applikation:

Code:

    'Beendet SmarTEAM Session
    Public Function StopSmartTeam() As Object

        On Error Resume Next

        Session.UserLogoff()
        Session.Close()
        Engine.Terminate()

        Session = Nothing
        Engine = Nothing

    End Function


Leider kann ich mit CATIA V5R18 x64 den Code nicht direkt von VBscript aus der DLL aufrufen, einige Funktionen der SmarTeam Libraries erzeugen Exceptins, wenn sie von einer 64-Bit-Applikation aufgerufen werden. Als einfachsten Workaround starten wir nun aus VBscript ein 32-Bit-Exe, das dann die SmarTeam-Funktionen aufruft. Hat im Zusammenhang mit CATIA x64 schon jemand Erfahrungen mit SmarTeam V5 R20 gemacht?

Grüsse
Urs

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

phimUoB
Mitglied
Ingenieur


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

Beiträge: 107
Registriert: 08.08.2003

CATIA/Smarteam V5R16
Linux, Oracle, VMWare

erstellt am: 15. Jun. 2010 08:41    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

Hoi Urs,

Ich weis nicht ob es bei SmarTeam helfen würde aber wir laden uns in UG NX7 die DLLs mit Reflection aus einem vb Skript:

Code:

Option Strict off

Imports System
Imports System.Reflection
Imports NXOpen
Imports NXOpen.UF

Module NXEXample


Public Class DLLLauncher
Shared Sub Launcher(session As Session, ufsession As UFSession)
Dim a As [Assembly] = [Assembly].LoadFrom("D:\NXbin\RUAG NX Tools.dll")
Dim t As Type = a.GetType("RUAGNXToolsDLL.RUAGNXTools")
Dim p() As Object = {session, ufsession}

t.GetMethod("fix").Invoke(Nothing, p)
End Sub
End Class


Sub Main
Dim theSession As Session = Session.GetSession()
Dim theUFSession As UFSession = UFSession.GetUFSession()
DLLLauncher.Launcher(theSession, theUFSession)
End Sub

Public Function GetUnloadOption(ByVal dummy As String) As Integer
GetUnloadOption = UFConstants.UF_UNLOAD_IMMEDIATELY
End Function


End Module


Das Objekt DLLLauncher holt sich die DLL als Assembly und führt eine bestimmte Funktion (hier heisst sie "fix") in der DLL aus. RUAGNXToolsDLL ist der Namespace und RUAGNXTools das Objekt in der DLL. Mit dem Objekt p können auch noch Argumente an die Funktion übergeben werden.

Eventuell funktioniert das auch mit SmarTeam und 64bit besser.

------------------
Beitrag im Dassault Contact mag: 

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