| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co. | | |  | Mit dem all4cad-Blog immer bestens informiert! - Neues zu Lösungen und Entwicklungen rund um ERP und PDM, eine Pressemitteilung
|
Autor
|
Thema: Versionskonflikte (R19 => R24 ) vermeiden durch übeprüfen von Versionen beim Laden (2015 mal gelesen)
|
gunngir Mitglied Technischer Produktdesigner

 Beiträge: 17 Registriert: 17.06.2014
|
erstellt am: 21. Jul. 2015 08:06 <-- editieren / zitieren --> Unities abgeben:         
Hallo CAD.DE - Gemeinde, Bei uns gibt es Probleme, dass man manchmal die R19- Projekt mit R24 abspeichert. Dieses sollte umgangen werden. Ein Handle wäre die perfekte Lösung. Dies soll die Versionen von CATIA - Programm und Datei überprüfen und Unterschiede anzeigen. Hier die Frage: Gibt es eine möglichkeit, Makros automatisch an Handles anzuheften?
Mit dem Makro würde man dann die Versionen des Programms und der Datei vergleichen und wenn nötig Unterschiede mit einer einfachen Messagebox aufzeigen. Vielen Dank für Eure Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Mitglied Freiberuflicher Konstrukteur
   
 Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 22. Jul. 2015 00:12 <-- editieren / zitieren --> Unities abgeben:          Nur für gunngir
Hallo gunngir, Der folgende Dreizeiler gibt Catia-Version/Release etc. aus. Code:
Dim oCAS As Object 'SystemConfiguration Set oCAS = CATIA.SystemConfiguration lblVersion.Caption = "CATIA V" & oCAS.Version & " R" & oCAS.Release & " SP" & oCAS.ServicePack & " " & oCAS.OperatingSystem
Was verstehst Du hier unter einem Handle? So wie ich es verstehe, ist ein Handle ein (willkürlich vergebener) Name. Tschau, Joe ------------------ The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence. ~Charles Bukowski Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gunngir Mitglied Technischer Produktdesigner

 Beiträge: 17 Registriert: 17.06.2014
|
erstellt am: 22. Jul. 2015 06:43 <-- editieren / zitieren --> Unities abgeben:         
Ein Handle ist für mich ein Ereignis, wie zum Beispiel: (aus VS2010) Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
... End Sub Diese Subroutine wird automatisch gefeuert, wenn die Form geladen wird. So etwas muss es doch auch unter Catia geben, dass immer wenn ein Product / Part geladen wird, dieses spezielle Handle feuert und die Versionen der Datei und von Catia selbst vergleicht. weitere Erklärung: Eine Subroutine soll immer nach / vor einem bestimmten Ereignis automatisch abgefeuert werden. Dies soll geschehen, ohne selbst ein Makro starten zu müssen. Diesen Fall verstehe ich unter einem Handle. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 22. Jul. 2015 08:08 <-- editieren / zitieren --> Unities abgeben:          Nur für gunngir
Servus IMHO lassen sich solche Events nicht direkt abfangen. Henry hatte mal eine Möglichkeit beschrieben (siehe hier). Alternativ könntest du auch den Öffendialog selbst programmieren und dort die Prüfung mit einbauen, Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Mitglied Freiberuflicher Konstrukteur
   
 Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 22. Jul. 2015 14:39 <-- editieren / zitieren --> Unities abgeben:          Nur für gunngir
D'oh! Ein Ereignis ist ein 'Event'. Ein 'Handler' ist ein Betreuer, Abhandler; von 'to handle': handhaben, bearbeiten, abwickeln. 'Load' ist ein 'Event', die Routine 'Form_Load' ein 'Event-handler', sprich: Der Betreuer des Ereignisses. Der sagt, was zu tun ist, sobald das betreffende Ereignis eintritt. Zum Thema: Annahme 1) Es ist möglich mit dem Catia-Start ein Makro auszuführen. (geht. Das Makro läuft im Hintergrund und liest die Modell-Daten in einem Zeitabstand von n Sekunden aus.) Annahme 2) Es ist möglich das Speicher-Release eines Modells zu bestimmen. (messy, aber vermutlich machbar.) Annahme 3) Es ist möglich das Catia-Release zu bestimmen (geht) Der anschliessende Vergleich Catia-/Modell-Release geht auch. Die Meldung käme aber alle n Sekunden wieder. Die Frage lautet dann: Wie verhindere ich, dass Modelle unter 'falschem' Release abgespeichert werden? Nachträgliches ReadOnly-Attribut setzen auf Betriebssystemebene? - vermutlich machbar, aber ist es auch wirksam? - müsste nach dem Schliessen des Modells wieder rückgängigg gemacht werden. Save in Catia deaktivieren: - geht wahrscheinlich per Api; gilt dann aber für alle geladenen Modelle Message-Hook: Ein Hook klinkt sich in die Message-Queue eines Programmes ein. Komplex. Dll notwendig. Dürfte aber der einzig sinnvolle Weg sein, gezielt 'falsches' speichern zu verhindern. Falls das alles gelingt: Wie kann trotzdem unter R24 gespeichert werden, falls gewollt? Tschau, Joe ------------------ The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence. ~Charles Bukowski Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Mitglied Freiberuflicher Konstrukteur
   
 Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 22. Jul. 2015 17:42 <-- editieren / zitieren --> Unities abgeben:          Nur für gunngir
|
mnkymnk Mitglied Modellbaukonstrukteur

 Beiträge: 62 Registriert: 25.08.2014 Catia V5 R24
|
erstellt am: 24. Jul. 2015 11:45 <-- editieren / zitieren --> Unities abgeben:          Nur für gunngir
haben genau das selbe Problem. ich zB habe mir den Hintergrund verschieden eingefärbt, damit ich immer daran erinnert werde, in welcher Version ich im Moment arbeite. Eine Lösung mit einer Messagebox wäre natürlich perfekt. Sollte eine Lösung gefunden werden, wäre es hammer wenn man diese unter diesem Thread posten könnte, da sicherlich noch viele andere dieses Problem haben. ------------------ Gruß mnkymnk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Mitglied Freiberuflicher Konstrukteur
   
 Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 25. Jul. 2015 12:39 <-- editieren / zitieren --> Unities abgeben:          Nur für gunngir
Hallo, das Thema gab's schon mal. In dem Thread werden zwei Utilities vorgestellt: http://forum.cad.de/foren/ubb/Forum133/HTML/008301.shtml Beides sind eigenständige Programme und laufen auf Betriebssystemebene, also nicht unter Catia. Beide untersuchen die auf der Platte abgelegten Dateien. Ob sie mit R24 funktionieren, weiss ich nicht. Tschau, Joe
------------------ The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence. ~Charles Bukowski Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Mitglied Freiberuflicher Konstrukteur
   
 Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 28. Jul. 2015 23:23 <-- editieren / zitieren --> Unities abgeben:          Nur für gunngir
Hallo Leut', ich hab mal versucht, Version/Release etc. aus geladenen Catia-Modellen(Parts, Products & Drawings;.cgrs werden ignoriert) auszulesen. Ergebnis anbei:
Code:
'--------------------------------------------------------------------------------------- ' Module : modFindMinVersionToRead ' Author : jherzog ' Date : 28.07.2015 ' Purpose : Read Minimal Version for CatFile '--------------------------------------------------------------------------------------- ' Option ExplicitPrivate Const FILE_ATTRIBUTE_NORMAL = &H80 Private Const GENERIC_READ As Long = &H80000000 Private Const FILE_FLAG_RANDOM_ACCESS = &H10000000 Private Const OPEN_EXISTING As Long = 3 Private Const INVALID_HANDLE_VALUE As Long = -1 'returned if findfirst fails Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurity As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function ReadFileByNum Lib "kernel32" Alias "ReadFile" (ByVal hFile As Long, ByVal lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Long) As Long Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, ByVal lpFileSizeHigh As Long) As Long Private Type CATFILEDATA_TYPE strVersion As String 'version strRel As String 'release strSP As String 'service pack strBuild As String 'build date strHF As String 'hotfix End Type Const strVersion As String = "V1.0" Const strMakroName As String = "FindMinVersionToRead" Sub CATMain() Dim strFileFullPath As String Dim oDocs As Documents Dim oDoc As Document Dim strHeader As String Dim cft_f As CATFILEDATA_TYPE Dim cft_l As CATFILEDATA_TYPE Dim lStart As Long Dim lPos As Long Dim strTmp As String Dim strMinVersionRead As String Set oDocs = CATIA.Documents 'if oDoc is a Drawing then the CatPart will be loaded automatically For Each oDoc In oDocs strFileFullPath = oDoc.FullName '.cgrs do not include version info If Right(strFileFullPath, 4) = ".cgr" Then GoTo SkipFile strTmp = ReadFileToString(strFileFullPath) If strTmp <> "" Then strHeader = Left(strTmp, 16) ' Debug.Print strHeader ReadVersionRelease strTmp, "CATSummaryInformation", cft_f With cft_f ' Debug.Print "FirstSaveVersion: " & .strVersion ' Debug.Print "FirstSaveRelease: " & .strRel ' Debug.Print "ServicePack: " & .strSP ' Debug.Print "BuildDate: " & .strBuild ' Debug.Print "HotFix: " & .strHF MsgBox "Datei: " & strFileFullPath _ & vbCr & vbCr & "First save:" & vbCr & "Version: " & .strVersion _ & vbCr & "Release: " & .strRel _ & vbCr & "Service pack: " & .strSP _ & vbCr & "Build date: " & .strBuild _ & vbCr & "Hot fix: " & .strHF & vbCr, _ vbOKOnly Or vbInformation, strMakroName & " " & strVersion End With ReadVersionRelease strTmp, "LastSaveVersion", cft_l With cft_l ' Debug.Print "LastSaveVersion: " & .strVersion ' Debug.Print "LastSaveRelease: " & .strRel ' Debug.Print "ServicePack: " & .strSP ' Debug.Print "BuildDate: " & .strBuild ' Debug.Print "HotFix: " & .strHF MsgBox "Datei: " & strFileFullPath _ & vbCr & vbCr & "Last save:" & vbCr & "Version: " & .strVersion _ & vbCr & "Release: " & .strRel _ & vbCr & "Service pack: " & .strSP _ & vbCr & "Build date: " & .strBuild _ & vbCr & "Hot fix: " & .strHF & vbCr, _ vbOKOnly Or vbInformation, strMakroName & " " & strVersion End With lStart = InStr(strTmp, "MinimalVersionToRead") lPos = InStr(lStart, strTmp, "CATIA") strMinVersionRead = Mid(strTmp, lPos, 10) ' Debug.Print "MinVersionRead: " & strMinVersionRead MsgBox "Datei: " & strFileFullPath _ & vbCr & vbCr & "Min. version to read: " & strMinVersionRead, _ vbOKOnly Or vbInformation, strMakroName & " " & strVersion End If SkipFile: Next End Sub '--------------------------------------------------------------------------------------- ' Procedure : ReadVersionRelease ' Author : jherzog ' Date : 28.07.2015 ' Time : 20:01 ' Languages : VBA 6.5 ' V5-Release: V5R19/21 ' Purpose : ' Parms : strData: the string holding the file's data ' : strStart: search starts at the first occurance of strStart ' : cf: CatFileData_Type record to hold found values ' Ret. Value: - (data contained in CatFileData_Type) ' ' Syntax : ReadVersionRelease strTmp, "LastSaveVersion", cft_l ' ' Prereqs : string data from a CatFile ' Remarks : '--------------------------------------------------------------------------------------- ' Function ReadVersionRelease(strData As String, strStart As String, cf As CATFILEDATA_TYPE) Dim lStart As Long Dim lEnd As Long Dim lPos As Long lStart = InStr(strData, strStart) lPos = InStr(lStart, strData, "<Version>") lEnd = InStr(lPos, strData, "/<Version>") cf.strVersion = Mid(strData, lPos + Len("<Version>"), lEnd - lPos - Len("<Version>")) lPos = InStr(lStart, strData, "<Release>") lEnd = InStr(lPos, strData, "/<Release>") cf.strRel = Mid(strData, lPos + Len("<Release>"), lEnd - lPos - Len("<Release>")) lPos = InStr(lStart, strData, "<ServicePack>") lEnd = InStr(lPos, strData, "/<ServicePack>") cf.strSP = Mid(strData, lPos + Len("<ServicePack>"), lEnd - lPos - Len("<ServicePack>")) lPos = InStr(lStart, strData, "<BuildDate>") lEnd = InStr(lPos, strData, "/<BuildDate>") cf.strBuild = Mid(strData, lPos + Len("<BuildDate>"), lEnd - lPos - Len("<BuildDate>")) lPos = InStr(lStart, strData, "<HotFix>") lEnd = InStr(lPos, strData, "/<HotFix>") cf.strHF = Mid(strData, lPos + Len("<HotFix>"), lEnd - lPos - Len("<HotFix>")) End Function '--------------------------------------------------------------------------------------- ' Procedure : ReadFileToString ' Author : jherzog ' Date : 28.07.2015 ' Time : 18:31 ' Languages : VBA 6.5 ' V5-Release: V5R19/21 ' Purpose : Read the contents of a file and assign to a string ' Parms : strFN: Full path + name of file to read ' Ret. Value: the string holding the file's contents or "" ' ' Syntax : strTmp = ReadFileToString(strFileFullPath) ' ' Prereqs : an existing file ' Remarks : '--------------------------------------------------------------------------------------- ' Private Function ReadFileToString(strFN As String) As String Dim lBytesRead As Long 'number of bytes read Dim ret As Long 'return value from ReadFile; 0 or 1 Dim hwndTextFile As Long 'handle to opened file Dim lFSize As Long 'file size Dim TempStr As String 'string to hold data 'open the file hwndTextFile = CreateFile(strFN, GENERIC_READ, 0, 0, _ OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS Or FILE_ATTRIBUTE_NORMAL, 0) If hwndTextFile <> INVALID_HANDLE_VALUE Then 'if we have a valid handle lFSize = GetFileSize(hwndTextFile, 0) 'read the file size('max. 4 Gbyte) TempStr = String(lFSize + 1, Chr$(0)) 'init placeholder for data string ret = ReadFileByNum(hwndTextFile, TempStr, _ lFSize, lBytesRead, 0) 'read file into string If ret <> 0 Then 'read was successful ReadFileToString = TempStr End If CloseHandle hwndTextFile 'close handle Exit Function 'and quit End If '--------------------------------------------------------------------------------------- 'fall through to error message ReadFileToString = TempStr 'tempstr is empty MsgBox " Read Error", vbOKOnly + vbCritical, "ReadFileToString" End Function
Zum austesten, Code komplett in ein leeres vba-Modul kopieren und CATMain starten. Bitte erst mit einer Datei ausprobieren, sonst werden die Message-Boxen lästig! Have fun, Joe
------------------ The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence. ~Charles Bukowski Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |