Version du coffre fort PDM via une macro Excel

Bonjour, 

Je vais essayer d'expliquer mon probleme au mieux mais ce n'est pas evident.

J'utilise une macro excel pour remplacer des pieces et assemblages dans une assemblage modele.

Mon programme marche bien sur mon PC mais je viens de remarque un probleme de version des assemblages que la macro va chercher sur un autre PC.

Exemple:

Si j'extrait un assemblage sur mon PC (PC1), que je le modifie puis que je remet dans le coffre fort PDM (je ne l'ai plus d'extrait sur mon PC)

Si, sur un autre PC (PC2), j'utilise ma macro Excel et importe cet assemblage fraichement modifie, la version que je vais recuperer est la version d'avant modification.

Techniquement, la facon dont ma macro excel va chercher mon assemblage est toute simple, mon fichier excel contient des noms assemblages et leurs localisations et utilise ce code (ci-dessous) pour remplacer une piece modele (PIECE_A _REMPLACER) comprise dans l'ASSEMBLAGE_MODELE par l'assemblage selectionne (NEW_PART_NAME) qui a le chemin NEW_PART_PATH:

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)

 

Ne comprenant pas pourquoi la version de l'assemblage que le PC2 ouvrait j'ai tout ferme et recherche manuellement (dans PDM) cet assemblage que je veux importer dans mon assemblage modele puis je l'ai ouvert, et la .... la bonne version s'ouvre (la version que j'avais mondifie sur le PC1).

Je referme tout puis reessaye ma macro via excel.... ca marche il importe maintenant la bonne version du fichier solidworks.

J'ai d'abord pense a un probleme de memoire cash du PC2 et que donc solidworks ouvrait ce qu'il avait dasn sa memoire cash et non la derniere version de chaque fichier.

Sauf que... sur un autre essai, j'essai maintenant d'importer un assemblage (toujours en remplacer une piece dans mon assemblage modele par ce nouvel assemblage) qui n'existait pas avant dans le coffre fort PDM : le dossier dans lequel ce nouvel assemble est n'existait pas avant (le PC2 n'a jamais ouvert le dossier avant). 

Sur le PC2, Je teste ma macro Excel et la le programme reagit comme si il ne trouvait meme pas le fichier en question... il passe a autre chose sans rien faire.... meme si, comme pour les autres pieces, je lui donne un nom de fichier et un emplacement correctes.

Je refaire tout, je recherche ce nouveau fichier sur le PDM du PC2, je le trouve et l'ouvre... tout se passe bien.

Je refaire tout et retente ma macro Excel... ca marche, il trouve enfin le nouveau fichier.

Il semblerait que via Excel, meme si je donne une emplacement de fichier valide, la macro n'a pas acces a la derniere version du coffre fort PDM, non pas uniquement d'un fichier mais de tout PDM. 

Existe t'il sur chaque PC une sorte de "memoire cash du coffre fort PDM" ou quelque chose du genre?

Je pensais donc a, au debut de a ma macro Excel, ajouter une ligne pour vider cette memoire cash (si elle existe) et donc force la macro a aller piocher dans la version actuelle de PDM et non une memorisee....

Si vous avez une idees, ou si alors je suis completement parti dans une mauvaise direction... dite le moi... c'est peut etre juste dans la facon dont je vais chercher mes fichiers dans ma macro...

Merci d'avance

Yves

PS: desole pour le manque d'accents, je suis au UK donc clavier QWERTY

Bonjour,

dans ta macro il te faut obtenir la dernière version du fichier avant traitement sinon il prend la version qui est en cache local ou rien si pas de version en local.

Cordialement,

1 « J'aime »

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

1 « J'aime »

Bonjour d.roger, 

J'avoue que je n'arrive pas a trouver le partie de code dans l'exemple que je dois inserer dans mon code pour avoir la version de fichier avant traitement au lieu de la version du cash local.

Est-ce une manip a ajouter dans mon code qui fonctionne avec mon code actuel ou je dois changer totalement ma methode d'importation de piece?

Merci

Yves

Bonjour,

Tu trouveras un exemple permettant d'obtenir la dernière version d'un fichier sur le post http://www.lynkoa.com/forum/import-export-formats-neutres/obtention-de-la-derni%C3%A8re-version-dun-fichier-provenant-du-coffre, à adapter à ton besoin bien sûr.

Cordialement,

De ce que je comprends de ton bout de code, il faut donc redéfinir tes variables NEW_PART_PATH et NEW_PART_NAME qui doivent correspondrent aux Folder.LocalPath et File.Name de l'exemple donné ci-dessus.

Je n'ai pas testé mais cela doit ressembler à quelque chose comme ça :

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

 

sinon autre solution serait d'inclure dans la macro, l'ouverture et la fermeture du fichier dans solid afin d'obligé PDM à charger la dernière version. Mais le temps de traitement serait également plus long....

Sinon la solution de D.roger est la mieux je pense.

Cordialement

Bonjour, 

Merci pour vos reponses, je pense avoir compris mais mon probleme est que lorsque je teste mon code il semblerait qu'il n'arrive pas a se connecter au coffre:

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

 

j'ai pris soins d'activer la library PDM dans excel :

je ne comprend pas...

J'ai aussi teste avec la methode:

Vault.Login (USERNAME,PASSWORD,VAULTNAME)

mais j'arrive au meme resultat

J'ai oublie quelque chose?

Merci d'avance

Bonjour,

A mon avis, écrire plutôt:

Set vault = New EdmVault5 

 

1 « J'aime »

Premier essai:

Afin de passer ce probleme de connection au coffre pour l'instant j'ai mis une condition :

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

Il me suffit donc de me connection a PDM avant et alors la macro passe cette etape. 

en revanche, lorsque la macro arrive a :

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

j'ai un message d'erreur me disant que je ne suis pas connecte au coffre... pourtant la macro a passe l'etape de la connection vu que j'etait connecte...

 

Deuxieme essai:

cette fois ci je me connect au PDM avant de lancer la macro, ce qui devrait me remettre dans les memes conditions qu'avant (sans la condition "If Vault.IsLoggedIn Then"), j'ai donc la fenetre de connection a PDM ... sauf que la ca marche...

 

En complément, la connection via macro est indépendante de la connection via l'explorateur. Pour ma part je peux faire tourner une macro avec un compte admin tout en étant connecté avec mon compte normal sur le coffre.

Les macros font appel à des instances et donc lancent une seconde session. Seul inconvénient (mais je ne me trouve jamais dans ce cas de figure) ne pas essayer de faire autre chose en même temps sinon plantage assuré.

En l'état il faut tout passer en paramètre via la macro pour éviter les intéractions avec un SW ou un coffre déjà en fonctionnement sur le poste où est lancé la manip.

1 « J'aime »

Bonjour Cyril,

Ca ne change absolument rien 

Mais dans les deux cas je remarque que, meme si j'ai le message d'arreur suivant:

Je suis tout de meme connecte a PDM par la suite...

 

 

Bonjour,

Je suis surpris par le message d'erreur, celui-ci signale que ta macro n'arrive pas à se connecter à l'object IEdmVault18 alors que tu déclare un object Vault en EdmVault5, n'y aurait-il pas un object Vault déjà déclaré plus tôt dans ta macro ?

Cordialement,

Malheureusement non, dans l'ordre j'ai:

Dim Vault As New EdmVault5

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

j'ai beau faire une recherche sur "Vault" je n'en trouve pas d'autre avant...

Dans ton if tu demande à te connecter si tu es déjà connecté !!!!!

Il faut mettre :

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

Oui je me suis rendu compte de cette erreur et j'ai change pour:

If Not Vault.ISLoggedIN Then

mais ca ne marche pas mieux....

Tu es connecté au coffre oui mais ce n'est pas via la macro (si tu fais la vérif uniquement via l'icône de coffre dans la zone de notification ça ne te dit pas si ta macro a réussi à se connecter ou non, comme dit plus haut c'est indépendant).

Je pense que c'est dans ta façon de déclarer vault, je tenterai l'écriture ci-dessous suite à une recherche rapide sur google:

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

 

il n'a pas l'aire d'aimer cette ecriture:

Voici un exemple de code qui fonctionne pour moi :

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

 

Avec les librairies suivantes :

Fais peut-être déjà un test avec seulement la connexion dans une autre macro.

Cordialement,

1 « J'aime »