PDM Vault Version über Excel-Makro

Hallo 

Ich werde versuchen, mein Problem so gut wie möglich zu erklären, aber es ist nicht einfach.

Ich verwende ein Excel-Makro, um Teile und Baugruppen in einer Modellbaugruppe zu ersetzen.

Mein Programm funktioniert gut auf meinem PC, aber ich habe gerade ein Problem mit der Version der Assemblys bemerkt, nach der das Makro auf einem anderen PC sucht.

Beispiel:

Wenn ich eine Baugruppe auf meinem PC (PC1) extrahiere, ändere sie und lege sie dann wieder in den PDM-Safe (ich habe keine Extrakte mehr auf meinem PC)

Wenn ich auf einem anderen PC (PC2) mein Excel-Makro verwende und diese frisch geänderte Assembly importiere, ist die Version, die ich wiederherstelle, die Version vor der Änderung.

Technisch gesehen ist die Art und Weise, wie mein Excel-Makro meine Baugruppe abruft, sehr einfach, meine Excel-Datei enthält Baugruppennamen und deren Speicherorte und verwendet diesen Code (unten), um ein im ASSEMBLAGE_MODELE enthaltenes Modellteil (PIECE_A _REMPLACER) durch die ausgewählte Baugruppe (NEW_PART_NAME) zu ersetzen, die den Pfad NEW_PART_PATH hat:

boolstatus = swModel.Extension.SelectByID2(PIECE_A_REMPLACER & "@" & ASSEMBLAGE_MODELE, "COMPONENT", 0, 0, 0, True, 0, Nothing, 0)

boolstatus = swModel.ReplaceComponents2(NEW_PART_PATH & "\" & NEW_PART_NAME, "", False, 0, True)

 

Da ich nicht verstand, warum die Version der Baugruppe, die der PC2 öffnete, alles schloss ich alles und suchte manuell (in PDM) nach dieser Baugruppe, die ich in meine Modellbaugruppe importieren möchte, dann öffnete ich sie, und dort .... Es öffnet sich die korrekte Version (die Version, die ich auf dem PC1 worldifiziert hatte).

Ich schließe alles und versuche es dann erneut mit meinem Makro über Excel.... Es funktioniert, es importiert jetzt die korrekte Version der SOLIDWORKS-Datei.

Zuerst dachte ich, dass es sich um ein Problem mit dem Cash-Speicher des PC2 handelte und dass SolidWorks daher das öffnete, was es in seinem Cash-Speicher hatte, und nicht die neueste Version jeder Datei.

Außer, dass... Bei einem anderen Versuch versuche ich nun, eine Baugruppe zu importieren (immer ein Teil in meiner Modellbaugruppe durch diese neue Baugruppe zu ersetzen), die vorher nicht im PDM-Safe vorhanden war: Der Ordner, in dem sich diese neue Baugruppe befindet, existierte vorher nicht (der PC2 hat den Ordner noch nie geöffnet). 

Auf dem PC2 teste ich mein Excel-Makro und dort reagiert das Programm so, als ob es die betreffende Datei gar nicht finden könnte... Er geht weiter, ohne etwas zu tun... obwohl, wie bei den anderen Teilen, ich ihm einen korrekten Dateinamen und Speicherort gebe.

Ich mache alles neu, ich suche diese neue Datei auf dem PDM des PC2, ich finde sie und öffne sie... Alles läuft gut.

Ich mache alles noch einmal und versuche es mit meinem Excel-Makro erneut... Es funktioniert, es findet endlich die neue Datei.

Es scheint, dass das Makro über Excel, selbst wenn ich einen gültigen Dateispeicherort angebe, keinen Zugriff auf die neueste Version des PDM-Tresors hat, nicht nur auf eine Datei, sondern auf ein beliebiges PDM. 

Gibt es auf jedem PC eine Art "Cash-Speicher des PDM-Tresors" oder ähnliches?

Also dachte ich zu Beginn meines Excel-Makros darüber nach, eine Zeile hinzuzufügen, um diesen Geldspeicher zu leeren (falls vorhanden) und daher das Makro zu zwingen, aus der aktuellen Version von PDM zu ziehen und nicht aus einer gespeicherten....

Wenn du eine Idee hast, oder wenn ich völlig in die falsche Richtung gegangen bin... Sag mir... vielleicht liegt es nur an der Art und Weise, wie ich in meinem Makro nach meinen Dateien suche...

Vielen Dank im Voraus

Yves

PS: Entschuldigung für den Mangel an Akzenten, ich bin in Großbritannien, also QWERTZ-Tastatur

Hallo

In Ihrem Makro müssen Sie vor der Verarbeitung die neueste Version der Datei abrufen, andernfalls wird die Version verwendet, die sich im lokalen Cache befindet, oder nichts, wenn keine lokale Version vorhanden ist.

Herzliche Grüße

1 „Gefällt mir“

Siehe: http://help.solidworks.com/2017/english/api/epdmapi/epdm.interop.epdm~epdm.interop.epdm.iedmfile5~getfilecopy.html?verRedirect=1

1 „Gefällt mir“

Hallo d.roger, 

Ich gebe zu, dass ich den Teil des Codes im Beispiel nicht finden kann, den ich in meinen Code einfügen muss, um die Dateiversion vor der Verarbeitung anstelle der lokalen Cash-Version zu haben.

Ist dies ein Trick, den ich in meinen Code einfüge, der mit meinem aktuellen Code funktioniert, oder muss ich meine Teileimportmethode vollständig ändern?

Vielen Dank

Yves

Hallo

Ein Beispiel dafür, wie Sie die neueste Version einer Datei erhalten, finden Sie im Beitrag http://www.lynkoa.com/forum/import-export-formats-neutres/obtention-de-la-derni%C3%A8re-version-dun-fichier-provenant-du-coffre, das natürlich an Ihre Bedürfnisse angepasst werden kann.

Herzliche Grüße

Nach dem, was ich Ihrem Codeausschnitt entnehme, müssen Sie Ihre NEW_PART_PATH neu definieren und Variablen NEW_PART_NAME, die dem Folder.LocalPath und File.Name des obigen Beispiels entsprechen müssen.

Ich habe es nicht getestet, aber es muss in etwa so aussehen:

...
Dim File As IEdmFile5
Dim Folder As IEdmFolder5
Set File = Vault.GetFileFromPath(NEW_PART_PATH & "\" & NEW_PART_NAME, Folder)
    
boolstatus = swModel.Extension.SelectByID2(PIECE_A_REMPLACER & "@" & ASSEMBLAGE_MODELE, "COMPONENT", 0, 0, 0, True, 0, Nothing, 0)
    
boolstatus = swModel.ReplaceComponents2(Folder.LocalPath & "/" & File.Name, "", False, 0, True)
    
...

 

Andernfalls wäre eine andere Lösung, das Öffnen und Schließen der Datei in solid in das Makro aufzunehmen, um PDM zu zwingen, die neueste Version zu laden. Aber die Bearbeitungszeit wäre auch länger....

Ansonsten ist D.rogers Lösung meiner Meinung nach die beste.

Herzliche Grüße

Hallo 

Vielen Dank für Ihre Antworten, ich denke, ich habe verstanden, aber mein Problem ist, dass beim Testen meines Codes anscheinend keine Verbindung zum Tresor hergestellt werden kann:

Dim Vault As New EdmVault5
Vault.LoginAuto "PDM", 0

 

Ich habe darauf geachtet, die PDM-Bibliothek in Excel zu aktivieren:

Ich verstehe nicht...

Ich habe auch mit der Methode getestet:

Vault.Login (USERNAME,PASSWORD,VAULTNAME)

aber ich komme zu demselben Ergebnis

Habe ich etwas vergessen?

Vielen Dank im Voraus

Hallo

Meiner Meinung nach schreiben Sie stattdessen:

Set vault = New EdmVault5 

 

1 „Gefällt mir“

Erster Versuch:

Um dieses Verbindungsproblem zum Trunk vorerst zu überwinden, habe ich eine Bedingung gestellt:

'Connection to the Vault
If Vault.IsLoggedIn Then
    Vault.LoginAuto "PDM", 0
End If

Ich muss also vorher nur eine Verbindung zu PDM herstellen und dann überspringt das Makro diesen Schritt. 

Auf der anderen Seite, wenn das Makro ankommt bei:

Set File = Vault.GetFileFromPath(NEW_PART_PATH & "\" & NEW_PART_NAME, Folder)

Ich erhalte eine Fehlermeldung, dass ich nicht mit dem Tresor verbunden bin... aber das Makro hat die Verbindungsphase durchlaufen, seit ich verbunden war ...

 

Zweiter Versuch:

Diesmal verbinde ich mich mit dem PDM, bevor ich das Makro starte, was mich wieder in die gleichen Bedingungen wie zuvor versetzen sollte (ohne die Bedingung "If Vault.IsLoggedIn Then"), sodass ich das PDM-Verbindungsfenster habe ... Außer, dass es funktioniert...

 

Zudem ist die Verbindung per Makro unabhängig von der Verbindung über den Explorer. Ich für meinen Teil kann ein Makro mit einem Administratorkonto ausführen, während ich mit meinem normalen Konto im Tresor verbunden bin.

Makros rufen Instanzen auf und starten daher eine zweite Sitzung. Der einzige Nachteil (aber ich befinde mich nie in dieser Situation) ist, dass ich nicht gleichzeitig versuche, etwas anderes zu tun, sonst ein garantierter Absturz.

So wie es aussieht, müssen Sie alles über das Makro auf Parameter einstellen, um eine Interaktion mit einer bereits in Betrieb befindlichen SW oder einem Tresor auf der Workstation zu vermeiden, an der die Operation gestartet wird.

1 „Gefällt mir“

 Hallo Cyril,

Es ändert absolut nichts 

Aber in beiden Fällen merke ich das, auch wenn ich von hinten folgende Meldung habe:

Ich bin danach immer noch mit PDM verbunden...

 

 

Hallo

Ich bin überrascht von der Fehlermeldung, die darauf hinweist, dass Ihr Makro keine Verbindung mit dem IEdmVault18-Objekt herstellen kann, während Sie ein Vault-Objekt in EdmVault5 deklarieren.

Herzliche Grüße

Leider nein, in der Reihenfolge habe ich:

Dim Vault As New EdmVault5

If Vault.IsLoggedIn Then
    Vault.LoginAuto "PDM", 0
End If

Ich kann eine Suche nach "Vault" durchführen, aber ich kann vorher keine andere finden...

In Ihrem Wenn Sie eine Verbindung anfordern, wenn Sie bereits verbunden sind!!!

Sie müssen eingeben :

Wenn nicht , Tresor. IsLoggedIn dann
      Gewölbe. LoginAuto "PDM", 0
Ende , wenn

Ja, ich habe diesen Fehler bemerkt und bin gewechselt zu:

If Not Vault.ISLoggedIN Then

Aber besser geht es nicht....

Sie sind mit dem Tresor verbunden, ja, aber es ist nicht über das Makro (wenn Sie nur über das Tresorsymbol im Infobereich überprüfen, wird Ihnen nicht mitgeteilt, ob Ihr Makro es geschafft hat, eine Verbindung herzustellen oder nicht, wie oben gesagt, ist es unabhängig).

Ich denke, es ist in Ihrer Art, den Tresor zu deklarieren, ich werde das folgende Schreiben nach einer schnellen Suche bei Google ausprobieren:

Dim vault as IEdmVault5 = New EdmVault5
vault.LoginAuto ("PDM",0)

 

Er scheint diese Schrift nicht zu mögen:

Hier ist ein Beispiel für Code, der für mich funktioniert:

Sub Macro1()
    Dim vault As New EdmVault5

    Dim File As IEdmFile5
    Dim Folder As IEdmFolder5

    vault.LoginAuto "Coffre", 0

    Set File = vault.GetFileFromPath("C:\Coffre\TEST\0088880002.SLDPRT", Folder)

    MsgBox Folder.LocalPath & "\" & File.Name
End Sub

 

Mit den folgenden Bibliotheken:

Vielleicht machen Sie schon einen Test nur mit der Verbindung in einem anderen Makro.

Herzliche Grüße

1 „Gefällt mir“