PDM Vault-versie via Excel-macro

Hallo 

Ik zal proberen mijn probleem zo goed mogelijk uit te leggen, maar het is niet gemakkelijk.

Ik gebruik een Excel-macro om onderdelen en assemblages in een modelassemblage te vervangen.

Mijn programma werkt goed op mijn pc, maar ik merkte net een probleem met de versie van de assemblages die de macro zal zoeken op een andere pc.

Voorbeeld:

Als ik een assembly op mijn PC (PC1) uitpak, pas deze aan en plaats deze vervolgens terug in de PDM-kluis (ik heb geen extracten meer op mijn PC)

Als ik op een andere pc (PC2) mijn Excel-macro gebruik en deze pas gewijzigde assembly importeer, is de versie die ik herstel de versie van vóór de wijziging.

Technisch gezien is de manier waarop mijn Excel-macro mijn assembly ophaalt heel eenvoudig, mijn Excel-bestand bevat assembly-namen en hun locaties en gebruikt deze code (hieronder) om een modelonderdeel (PIECE_A _REMPLACER) dat in de ASSEMBLAGE_MODELE is opgenomen, te vervangen door de geselecteerde assembly (NEW_PART_NAME) die het pad NEW_PART_PATH heeft:

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)

 

Niet begrijpend waarom de versie van de assemblage die de PC2 aan het openen was, sloot ik alles en zocht handmatig (in PDM) naar deze assemblage die ik in mijn modelassemblage wil importeren, toen opende ik het, en daar .... de juiste versie opent (de versie die ik op de PC1 had geworldificeerd).

Ik sluit alles af en probeer dan mijn macro nog eens via excel.... Het werkt, het importeert nu de juiste versie van het solidworks-bestand.

Ik dacht eerst dat het een probleem was met het geldgeheugen van de PC2 en dat Solidworks daarom opende wat het in zijn geldgeheugen had en niet de nieuwste versie van elk bestand.

Behalve dat... bij een andere poging probeer ik nu een assembly te importeren (vervang altijd een onderdeel in mijn modelassembly door deze nieuwe assembly) die voorheen niet bestond in de PDM-kluis: de map waarin deze nieuwe assembly staat bestond voorheen niet (de PC2 heeft de map nooit eerder geopend). 

Op de PC2 test ik mijn Excel-macro en daar reageert het programma alsof het het betreffende bestand niet eens kan vinden... hij gaat verder zonder iets te doen.... hoewel ik, net als bij de andere delen, het een correcte bestandsnaam en locatie geef.

Ik doe alles opnieuw, ik zoek naar dit nieuwe bestand op de PDM van de PC2, ik vind het en open het... Alles gaat goed.

Ik doe alles opnieuw en probeer mijn Excel-macro opnieuw... Het werkt, het vindt eindelijk het nieuwe bestand.

Het lijkt erop dat via Excel, zelfs als ik een geldige bestandslocatie geef, de macro geen toegang heeft tot de nieuwste versie van de PDM-kluis, niet alleen van een bestand maar van elke PDM. 

Is er op elke PC een soort "cash memory of the PDM safe" of iets dergelijks?

Dus ik dacht, aan het begin van mijn Excel-macro, om een regel toe te voegen om dit geldgeheugen leeg te maken (als het bestaat) en daarom de macro te dwingen om te gaan en te tekenen uit de huidige versie van PDM en niet uit een uit het hoofd geleerde....

Als je een idee hebt, of als ik helemaal de verkeerde kant op ben gegaan... Vertel eens... misschien is het gewoon in de manier waarop ik zoek naar mijn bestanden in mijn macro ...

Bij voorbaat dank

Yves

PS: sorry voor het ontbreken van accenten, ik ben in het Verenigd Koninkrijk, dus QWERTY-toetsenbord

Hallo

In uw macro moet u de nieuwste versie van het bestand krijgen voordat u het verwerkt, anders neemt het de versie die zich in de lokale cache bevindt of niets als er geen lokale versie is.

Vriendelijke groeten

1 like

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

1 like

Hallo d.roger, 

Ik geef toe dat ik het deel van de code in het voorbeeld niet kan vinden dat ik in mijn code moet invoegen om de bestandsversie te hebben voordat ik deze verwerk in plaats van de lokale contante versie.

Is dit een truc om mijn code toe te voegen die werkt met mijn huidige code of moet ik mijn methode voor het importeren van onderdelen volledig wijzigen?

Bedankt

Yves

Hallo

U vindt een voorbeeld van hoe u de nieuwste versie van een bestand op de post http://www.lynkoa.com/forum/import-export-formats-neutres/obtention-de-la-derni%C3%A8re-version-dun-fichier-provenant-du-coffre kunt krijgen, uiteraard aan te passen aan uw behoeften.

Vriendelijke groeten

Van wat ik begrijp uit uw stukje code, moet u uw NEW_PART_PATH opnieuw definiëren en variabelen NEW_PART_NAME die moeten overeenkomen met de Folder.LocalPath en File.Name van het bovenstaande voorbeeld.

Ik heb het niet getest, maar het moet er ongeveer zo uitzien:

...
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)
    
...

 

anders zou een andere oplossing zijn om in de macro het openen en sluiten van het bestand in Solid op te nemen om PDM te dwingen de nieuwste versie te laden. Maar de verwerkingstijd zou ook langer zijn....

Voor de rest is de oplossing van D.roger de beste denk ik.

Vriendelijke groeten

Hallo 

Bedankt voor je antwoorden, ik denk dat ik het begrepen heb, maar mijn probleem is dat wanneer ik mijn code test, het lijkt alsof deze geen verbinding kan maken met de kluis:

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

 

Ik heb ervoor gezorgd dat de PDM-bibliotheek in Excel is geactiveerd:

Ik begrijp het niet...

Ik heb ook getest met de methode:

Vault.Login (USERNAME,PASSWORD,VAULTNAME)

maar ik kom tot hetzelfde resultaat

Ben ik iets vergeten?

Bij voorbaat dank

Hallo

Naar mijn mening, schrijf in plaats daarvan:

Set vault = New EdmVault5 

 

1 like

Eerste poging:

Om dit verbindingsprobleem met de kofferbak voorlopig op te lossen heb ik een voorwaarde gesteld:

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

Ik hoef dus alleen maar eerst verbinding te maken met PDM en dan slaat de macro deze stap over. 

Aan de andere kant, wanneer de macro aankomt bij:

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

Ik krijg een foutmelding dat ik niet verbonden ben met de kluis... maar de macro is de verbindingsfase gepasseerd sinds ik verbonden was ...

 

Tweede poging:

deze keer maak ik verbinding met de PDM voordat ik de macro start, die me terug zou moeten brengen in dezelfde omstandigheden als voorheen (zonder de "If Vault.IsLoggedIn Then" voorwaarde), dus ik heb de PDM-verbinding venster ... behalve dat het werkt...

 

Bovendien is de verbinding via macro onafhankelijk van de verbinding via de verkenner. Van mijn kant kan ik een macro uitvoeren met een beheerdersaccount terwijl ik verbonden ben met mijn normale account in de kluis.

Macro's roepen instanties aan en starten daarom een tweede sessie. Het enige nadeel (maar ik bevind me nooit in deze situatie) is dat ik niet tegelijkertijd iets anders probeer te doen, anders een gegarandeerde crash.

Zoals het er nu uitziet, moet je alles via de macro op parameters instellen om interactie te voorkomen met een SW of een kluis die al in gebruik is op het werkstation waar de bewerking wordt gestart.

1 like

 Hallo Cyril,

Het verandert absoluut niets 

Maar in beide gevallen merk ik dat, ook al heb ik het volgende bericht van achteren:

Ik ben daarna nog steeds verbonden met PDM...

 

 

Hallo

Ik ben verrast door de foutmelding, het geeft aan dat uw macro geen verbinding kan maken met het IEdmVault18-object terwijl u een Vault-object declareert in EdmVault5, zou er niet al eerder in uw macro een Vault-object zijn gedeclareerd?

Vriendelijke groeten

Helaas niet, in volgorde heb ik:

Dim Vault As New EdmVault5

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

Ik kan een zoekopdracht uitvoeren op "Vault", maar ik kan geen andere vinden voordat ...

In uw als u vraagt om verbinding te maken als u al verbonden bent!!!

Je moet zetten :

zo niet kluis. IsLoggedIn dan
      Gewelf. InlogAuto "PDM", 0
Einde als

Ja, ik realiseerde me deze fout en ik veranderde in:

If Not Vault.ISLoggedIN Then

maar het werkt niet beter....

U bent verbonden met de kluis, ja, maar het is niet via de macro (als u alleen via het kluispictogram in het systeemvak controleert, vertelt het u niet of uw macro erin is geslaagd om verbinding te maken of niet, zoals hierboven vermeld, is het onafhankelijk).

Ik denk dat het in je manier van verklaren kluis is, ik zal het onderstaande schrijven proberen na een snelle zoekopdracht op Google:

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

 

Hij lijkt dit schrijven niet leuk te vinden:

Hier is een voorbeeld van code die voor mij werkt:

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

 

Met de volgende bibliotheken:

Misschien al een test doen met alleen de verbinding in een andere macro.

Vriendelijke groeten

1 like