Archiver automatiquement un fichier enregistré en .STEP ou .SAT dans EPDM

Bonjour,

Lors de l'exécution d'une macro, pour tout faire en même temps, mes fichier CAO sont enregistrés en STEP. 

Le chemin d'enregistrement se trouve dans un fichier localisé dans le coffre EPDM. L'enregistrement se fait sans problème mais cela reste un fichier local.
J'aurais donc aimé savoir s'il était possible d'archiver directement l'enregistrement svp ?

J'espère avoir été clair,

Merci bon après-midi.

1 « J'aime »

Bonjour,

Voir la fonction d'archivage sur ce lien http://help.solidworks.com/2014/English/api/epdmapi/EPDM.Interop.epdm~EPDM.Interop.epdm.IEdmFile5~UnlockFile.html

Cordialement,

1 « J'aime »

Bonjour,

Plutôt que par macro (dont je ne suis pas certain que ça fonctionnera avec SW ouvert), je pencherai plutôt sur les scripts dispatch qui permette d'effectuer ce genre d'actions.

2 « J'aime »

Effectivement l'archivage par macro ne fonctionnera pas si le fichier est ouvert dans SolidWoprks mais si celui-ci est issus d'un modèle 3D sldprt suivi d'un saveAs en Step via macro alors on peut considérer que ce fichier step n'est pas ouvert dans SolidWorks et l'archivage par macro fonctionnera.

Attention, entre le saveAs et l'archivage, il faut gérer le temps d'ajout au coffre...

Cordialement,

1 « J'aime »

Exact d.roger, c'était le sens de mon message ;)

Bonjour, merci pour vos réponses mais je ne comprends pas bien... En plus sur l'aide il n'y a pas d'exemples en Vba et je ne comprends pas trop le VB.net.

Cyril.f, qu'est ce qu'un script despatch svp ?

d.roger quand tu parles du temps d'ajout c'est si je veux l'utiliser directement ? Car en fait mon application sert à gérer la sélection et l'activation d'une configuration 3D et l'ouverture de la mise en plan. En même temps j'aimerais proposer à l'utilisateur l possibilité d'enregistrer cette configuration en STEP pour l'utiliser plus trad.

Pour le moment mon code est simple 

If Check_step.Value = True Then
                                        UserfrmSTEP.Show
                                        EnregistrementSTEP = Part.SaveAs3("Chemin du dossier d'enregistrement\" & NomFichierSTEP & ".STEP", 0, 0)
                                        MsgBox "Le fichier STEP a été enregistré dans le dossier suivant : Cjemin du dossier d'enregistrement" & Chr(10) & "Sous le nom suivant : " & NomFichierSTEP & Chr(10) & "Pensez à archiver le fichier car il se trouve encore en local", vbInformation, "Emplacement du fichier"
End If

 

Dispatch est un utilitaire disponible dans l'interface d'administration du coffre (dans l'arborescence, compléments puis clique droit sur dispatch et gérer les actions).

http://help.solidworks.com/2016/french/EnterprisePDM/admin/IDD_DLG_ADMIN_ACT.htm?rid=0

Pour le temps d'ajout évoqué par d.roger, ceci correspond au temps de traitement du coffre pour ajouter le fichier à la base. Ce temps pouvant varier, le fichier sera considéré comme utilisé par un applicatif et ne pourra donc être archivé via une macro. Il faudrait attendre que SW ait terminé son action et que le coffre ait fini d'ajouter le fichier à sa base.

C'est pourquoi je préconise plutôt de passer par dispatch qui est géré directement par le coffre et s'applique du coup au bon moment.

Pour lockfile version VBA:

Private Sub LockMyFile(vault As EdmVault5)
On Error GoTo ErrHand

  Dim folder As IEdmFolder5
  Set folder = vault.RootFolder

  Dim file As IEdmFile5
  Set file = folder.GetFile("MyFile.txt")
  file.LockFile folder.ID, Me.hWnd
  Exit Sub

ErrHand:
  Dim ename As String
  Dim edesc As String
  vault.GetErrorString Err.Number, ename, edesc
  MsgBox ename + vbLf + edesc
End Sub

 

Bonjour,

Voici un exemple en C# pour sauvegarder un fichier sldprt en step dans Epdm avec archivage de celui-ci :

private SldWorks swAppli;
        
private void Button8Click(object sender, EventArgs e)
{
    // On se raccroche à SW
    if (swAppli == null)
    {
        swAppli = (SldWorks)Activator.CreateInstance(Type.GetTypeFromProgID("SldWorks.Application"));
        swAppli.Visible = true;
    }
    
    // On se connecte au coffre-fort
    EdmVault5 vault;
    vault = new EdmVault5();
    if (!vault.IsLoggedIn)
    {
        while (!vault.IsLoggedIn)
        {
            vault.LoginAuto("Coffre_BE", this.Handle.ToInt32());
        }
    }
    
    // On récupère la pièce SW ouverte
    ModelDoc2 Part = null;
    Part = ((ModelDoc2)(swAppli.ActiveDoc));

    // On défini le dossier de destination du fichier step
    IEdmFolder5 folder;
    folder = vault.GetFolderFromPath(@"C:\Coffre_BE\TEST");
    
    // On défini le nom complet du fichier STEP
    string fichierSTEP = folder.LocalPath + @"\" + Part.GetTitle() + ".step";
    
    // On enregistre le fichier au format STEP
    if (Part.GetType() == (int)swDocumentTypes_e.swDocPART)
    {
        Part.SaveAs(fichierSTEP);
    }
    
    // On ajoute le fichier STEP dans le coffre
    int fileID;
    fileID = folder.AddFile(this.Handle.ToInt32(), fichierSTEP, "", 0);
    
    // On se connecte au fichier STEP créé dans le coffre
    IEdmFile5 newFileSTEP = null;
    IEdmFolder5 ParentFolder = null;
    while (newFileSTEP == null)
    {
        try
        {
            newFileSTEP = (IEdmFile5)vault.GetFileFromPath(fichierSTEP, out ParentFolder);
        }
        catch (Exception)
        {
            
        }
    }
    
    // On archive le fichier STEP
    newFileSTEP.UnlockFile(this.Handle.ToInt32(), "Création fichier STEP.", 0, null);
}

Cordialement,

1 « J'aime »