Pobieranie najnowszej wersji pliku z repozytorium EPDM

W jaki sposób najlepsza odpowiedź na Twój drugi post nie rozwiązuje Twojego problemu?

Uważaj na subtelność:

Pobierz najnowszą wersję (w tym dzieci w przyszłej wersji)

i:

Pobierz wersję powykonawczą (taką samą dla dzieci)

Kiedy patrzymy na zadania EPDM, ten parametr jest tam i często ustawiamy go na "jak zbudowane"

 

Przykład:

ASM = wersja 3/3

PRT1 = 5/5

PRT2 = 9/9

Jeśli usługa ASM została skompilowana przy użyciu

PRT1 = 4/5

PRT2 = 7/9

 

Jeśli zrobisz "pobierz najnowszą wersję", zajmie Ci to:

ASM = 3/3

PRT1 = 5/5

PRT2 = 9/9

więc nie znajdziesz się w "As Built"!

Witam

Należy użyć funkcji Getfile metody IedmFile

I potencjalnie sprawdź wcześniej liczbę wersji, aby wiedzieć, którą z nich otworzyć.

Odpowiadam Ci tutaj, ponieważ w innym temacie zostanie to stracone dla tej konkretnej potrzeby.

Poniżej znajduje się metoda GetFile podana przez pomoc API PDM 2009 w języku vba

Private Sub GetMyFile(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.GetFileCopy Me.hWnd, 0, folder.ID
  Exit Sub

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

 

KVuilleumier , ponieważ jest to dobra odpowiedź, ale to nie rozwiązuje mojego problemu, błąd nadal występuje.

olivier42 Teraz rozumiem subtelność, ale moje elementy nie są w zespole, tylko otwieram części. Ponadto części te są umieszczane w sejfie właśnie po to, aby uniknąć nowych modyfikacji, ponieważ są to standardy. Jeśli któregoś dnia nastąpią potencjalne zmiany związane z nowymi środkami produkcji, będzie to musiało zostać zatwierdzone przez kierownictwo i dopiero wtedy zmiany zostaną wprowadzone. I będą one musiały zostać przeniesione do wszystkich plików przy użyciu tych części (jeśli takie istnieją).

Te części znajdują się w skarbcu, ponieważ są produkowane, więc chcemy je śledzić, ale nie modyfikować. Jednak moi koledzy mogą je przejrzeć i zrobić z nich kopię, aby stworzyć produkt, który nazywamy "specjalnym", ale w tym przypadku będzie to nowy plik.

Cyril.f Już myślę o użyciu tej funkcji przez ten wiersz:

Set File = Vault.GetFileFromPath("C:\SOLIDWORKS Data\Schaublin_RODS\04-Dessins Solidworks\01-Dessins pieces\80-\80-5\CAO_W25_80-5", Folder)

Myślę, że mój problem polega na tym, że kiedy otwierasz część lub nawet przeglądasz ją w eksploratorze EPDM MUSISZ załadować "najnowszą wersję, aby umieścić ją w pamięci podręcznej. Ale w moim przypadku nikt fizycznie nie klika na plik, aby go załadować, ponieważ jest to makro, więc w mojej pamięci podręcznej nie mam żadnej wersji, więc dla niego to nie istnieje.

Tęsknisz za tym: odejdź. Pobieranie pliku Kopiuj

Fragment kodu, który umieściłem, zawiera wszystko, co potrzebne do użycia tej funkcji z metody getFileFromPath.

Jeśli dobrze rozumiem, muszę stworzyć nową funkcję, w której muszę napisać wskazany przez Ciebie kod, a następnie wywołać tę funkcję tuż przed otwarciem mojego pokoju?

Ale kiedy mam podać ścieżkę (lokalizację) mojego pliku lub folderu? Zamiast MyFile.txt?

Redagować:

Sub GetMyFile(vault As EdmVault5)
    On Error GoTo ErrHand
    
      Dim folder As IEdmFolder5
      Set folder = vault.GetFolderFromPath("C:\SOLIDWORKS Data\Mon_coffre\04-Dessins Solidworks\01-Dessins pieces\80-\80-5")
      Dim file As IEdmFile5
      Set file = folder.GetFile("CAO_W25_80-5")
      file.GetFileCopy Me.HWnd, 0, folder.ID
      Exit Sub
    
ErrHand:
      Dim ename As String
      Dim edesc As String
      vault.GetErrorString Err.Number, ename, edesc
      MsgBox ename + vbLf + edesc
End Sub

Napisałem to dla siebie, to po prostu, prawda?

Edycja bis:

Kiedy uruchamiam makro, zatrzymuje się ono na Me.Hwnd i pojawia się błąd "Nie znaleziono metody ". Czy jest jakieś odniesienie do dodania?

Dodano plik. GetFileCopy 0, 0, folder.ID w pliku Set. Z drugiej strony musisz pobrać identyfikator folderu, w którym znajduje się plik.

Ustaw folder = vault.getfolderfrompath(C:\xxx")

Właśnie dostałem ten sam komunikat o błędzie co ty, spróbuj dodać rozszerzenie do swojej nazwy pliku (częściowo .sldprt).

Pozdrowienia

Przede wszystkim dziękujemy za zainteresowanie tym wpisem!

Dodałem więc rozszerzenie mojego pliku (.sldprt) Dodałem też to, o czym mówi Cyryl.f  

W końcu dostaję ten kod 

 Private Sub CBox_etat_Click()

    'Déclaration des varaibles nécessaires
     Dim Part                As SldWorks.ModelDoc2
     Dim boolstatus          As Boolean
     Dim longstatus          As Long
     Dim longwarnings        As Long
     Dim swModel             As ModelDoc2
     Dim swDesignTable       As SldWorks.DesignTable
     Dim xlWS                As Worksheet
     Dim DebutDesignation    As Range
     Dim r                   As Range
     Dim Vault               As New EdmVault5
     Dim File                As IEdmFile5
     Dim Folder              As IEdmFolder5
     
     Vault.LoginAuto "Schaublin_RODS", 0

     If Info_general.CBox_type.Value = ("Pince W25") Then
        'Ouverture du fichier correspond au besoin choisi dans la liste
        'Chemin à changer lors du changement d'emplacement des fichiers EXEMPLE : Lors de l'insertion dans l'ePDM
         If CBox_etat.Value = ("Pince finie") Then
            Set Folder = Vault.GetFolderFromPath("C:\SOLIDWORKS Data\BE\04-Dessins Solidworks\01-Dessins pieces\80-\80-5")
            Set File = Vault.GetFileFromPath("C:\SOLIDWORKS Data\BE\04-Dessins Solidworks\01-Dessins pieces\80-\80-5\CAO_W25_80-5.SLDPRT", Folder)
            File.GetFileCopy 0, 0, Folder.ID
            Set Part = swApp.OpenDoc6("C:\SOLIDWORKS Data\BE\04-Dessins Solidworks\01-Dessins pieces\80-\80-5\CAO_W25_80-5.SLDPRT", 1, 0, "", longstatus, longwarnings)
            swApp.ActivateDoc2 "CAO_W25_80-5", False, longstatus
            
                'Activation du modèle ouvert, nécessaire pour accéder à la famille de pièces
                 Set swModel = swApp.ActiveDoc
                
                'Récupération de la famille de pièces
                 Set swDesignTable = swModel.GetDesignTable()
                
                'Si récupération correcte de la famille de pièces
                 If Not swDesignTable Is Nothing Then

To działa... ale tylko na moim poście (z różnymi sesjami EPDM). Więc tego się obawiałem, to makro działa z dokumentami z mojej lokalnej pamięci podręcznej. Wynika to z wiersza File.GetFileCopy 0, 0, Folder.ID prawda?

Edit: Z drugiej strony d.roger w swoim kodzie (w drugim poście) używasz 

Set Part = swApp.OpenDoc6(Folder.LocalPath & "/" & File.Name, 1, 2, "", longstatus, longwarnings)

A nie ścieżka do pliku, czy to normalne?

Folder.LocalPath to nazwa folderu pobranego przez GetFileFromPath, a File.Name to nazwa pliku: po prostu oszczędza mi to kopiowania i wklejania, a dla moich testów miałem tylko jedną linię do zmiany, zwykle nie ma to wpływu. Z tego samego powodu w wierszu swApp.ActivateDoc2 File.Name, False, longstatus umieściłem File.Name zamiast nazwy pliku.

Dla wiersza File.GetFileCopy 0, 0, Folder.ID możesz spróbować z File.GetFileCopy HWnd, 0, Folder.ID

Właśnie przymierzyłem inny post i wszystko działa cuda.....

W porządku, dodałem HWnd, ale to nic nie zmienia, nie mogę uruchomić mojego makra na innym komputerze.
Zawsze utknie na tej samej linii. Czy musisz definiować HWnd jako Long?

Edycja: w linii 

Set Part = swApp.OpenDoc6("C:\SOLIDWORKS Data\Mon_coffre\04-Dessins Solidworks\01-Dessins pieces\80-\80-5\CAO_W25_80-5.SLDPRT", 1, 0, "", longstatus, longwarnings)

Stawiasz ,1,2, jaką to robi różnicę? Stp

1 mówi, że jest to sldprt, 2, aby otworzyć go w trybie tylko do odczytu.

Czy ścieżka do pliku jest taka sama na każdym komputerze?

"C:\SOLIDWORKS Data\Mon_coffre\04-Dessins Solidworks\01-Dessins pieces\80-\80-5\CAO_W25_80-5.SLDPRT"

Tak, jest to ta sama ścieżka dla każdej pozycji. Wstawię mój kod z powrotem, jeśli poślizgnąłem się błąd podczas modyfikowania

Private Sub CBox_etat_Click()

    'Déclaration des varaibles nécessaires
     Dim Part                As SldWorks.ModelDoc2
     Dim boolstatus          As Boolean
     Dim longstatus          As Long
     Dim longwarnings        As Long
     Dim swModel             As ModelDoc2
     Dim swDesignTable       As SldWorks.DesignTable
     Dim xlWS                As Worksheet
     Dim DebutDesignation    As Range
     Dim r                   As Range
     Dim Vault               As New EdmVault5
     Dim File                As IEdmFile5
     Dim Folder              As IEdmFolder5
     Dim HWnd                As Long
     
     Vault.LoginAuto "BE", 0

     If Info_general.CBox_type.Value = ("Pince W25") Then
        'Ouverture du fichier correspond au besoin choisi dans la liste
        'Chemin à changer lors du changement d'emplacement des fichiers EXEMPLE : Lors de l'insertion dans l'ePDM
         If CBox_etat.Value = ("Pince finie") Then
            
            Set File = Vault.GetFileFromPath("C:\SOLIDWORKS Data\BE\04-Dessins Solidworks\01-Dessins pieces\80-\80-5\CAO_W25_80-5.SLDPRT", Folder)
            Set Folder = Vault.GetFolderFromPath("C:\SOLIDWORKS Data\BE\04-Dessins Solidworks\01-Dessins pieces\80-\80-5")
            File.GetFileCopy HWnd, 0, Folder.ID
            Set Part = swApp.OpenDoc6("C:\SOLIDWORKS Data\BE\04-Dessins Solidworks\01-Dessins pieces\80-\80-5\CAO_W25_80-5.SLDPRT", 1, 0, "", longstatus, longwarnings)
            swApp.ActivateDoc2 "CAO_W25_80-5", False, longstatus
            
                'Activation du modèle ouvert, nécessaire pour accéder à la famille de pièces
                 Set swModel = swApp.ActiveDoc
                
                'Récupération de la famille de pièces
                 Set swDesignTable = swModel.GetDesignTable()
                
                'Si récupération correcte de la famille de pièces
                 If Not swDesignTable Is Nothing Then
                
                    'Récupération de la feuille excel
                     Set xlWS = swDesignTable.EditTable2(False)

Szczerze mówiąc trochę tracę nadzieję, bo mam wrażenie, że oprócz tego, że działa tylko na moim komputerze, to tylko "ładuje" plik, ale nie powiązane z nim rysunki.

To normalne, że ładuje tylko plik, a nie rysunki, musisz również pobrać rysunki, aby mieć je lokalnie. Jeśli masz kilka plików do umieszczenia lokalnie, lepiej użyć funkcji CreateUtility(EdmUtility).EdmUtil_BatchGet), ale tutaj, w VBA, może to być trochę trudniejsze. Oto przykład w języku C# jako załącznik.

Uważaj, to tylko przykład odpowiadający potrzebie, którą miałem!!


fonction_lastversion.txt

Dobry wieczór

Rzeczywiście, ładuje tylko wywołany plik. W vba musisz połączyć kilka działań, aby odzyskać rodziców i dzieci pliku (w zależności od typu pliku). GetNextChild lub GetNextParent w pomocy interfejsu API.

O ile mi wiadomo, partia proponowana przez d.rogera nie nadaje się do użytku z vba. Tylko C# i VB.Net

 

Jestem bardzo rozczarowany, bo myślę, że jestem bardzo blisko rozwiązania, ale nie zostało mi dużo czasu, aby poświęcić się temu makro, bo muszę iść dalej...

Zwłaszcza, że d.roger mówisz, że działa na kilku stacjach roboczych z tym kodem? Ścieżka do pliku  : C:\SOLIDWORKS Data\Mon_coffre\04-Solidworks Drawings\01-Drawings pieces\80-\80-5\CAO_W25_80-5.SLDPRT, ponieważ jest to ścieżka, którą znajduję w eksploratorze (znajduję tę samą na innych stacjach roboczych), ale wydaje mi się dziwne, że znajduje się na dysku lokalnym. Może zmieniłeś ścieżki? 

Już nie wiem co robić...  

Edycja: d.roger czy mógłbyś umieścić cały kod, którego użyłeś, kiedy powiedziałeś, że działa cuda?

Witam

Oto kod testowy, który działa dla mnie idealnie:

Dim swApp As Object

Przyciemnij część jako obiekt
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

    Ustaw swApp = Application.SldWorks

    Dim Vault jako nowy EdmVault5

    Przyciemnij plik jako IEdmFile5
    Przyciemnij folder jako IEdmFolder5

    Vault.LoginAuto "Coffre_BE", 0

    Set File = Vault.GetFileFromPath("C:\Coffre_BE\TEST\0088880001.SLDPRT", Folder)
    
    Ustaw część = swApp.OpenDoc6(Folder.LocalPath & "/" & File.Name, 1, 2, "", longstatus, longwarnings)
    
    swApp.ActivateDoc2 File.Name, Fałsz, longstatus
    
    Ustaw swModel = swApp.ActiveDoc
    
    swModel.ViewZoomtofit2

Koniec subwoofera

W przypadku ścieżki pliku normalne jest, że jest ona podobna do pliku lokalnego, ponieważ jest to plik z lokalnego widoku repozytorium, jestem po prostu zaskoczony, że ten widok znajduje się w danych SOLIDWORKS.

Aby skompensować ewentualną różnicę w położeniu widoku repozytorium między różnymi pikietami, można rozpocząć od kodu, wyszukać widok repozytorium, a następnie wywołać ścieżkę pliku zaczynającą się od Vault.rootfolder.localpath, na przykład:

Skarbiec1. FolderGłówny.Ścieżka_lokalna + \TEST\0088880001.SLDPRT"

przykład znajdowania widoków repozytorium w języku C#, a następnie nawiązywania połączenia:

vault1 = nowy EdmVault5();
                
IEdmVault8 vault = (IEdmVault8)skarbiec1;

 EdmViewInfo[] Widoki = null;

Sklepienie. GetVaultViews(out Views, false);
            
comboBox1.Items.Clear();
            
foreach (EdmViewInfo View w widokach)
{
      comboBox1.Items.Add(View.mbsVaultName);
}
if (comboBox1.Items.Count > 0)
{
      comboBox1.Text = (ciąg)comboBox1.Items[0];
}

if (!vault1. IsLoggedIn)
{
      Skarbiec1. LoginAuto(comboBox1.Text, ten. Uchwyt.ToInt32());
}

Pozdrowienia

1 polubienie

Witam

W swoim kodzie możesz usunąć GetFolderFromPatch, ponieważ otrzymasz go w GetFileFromPath (już zmniejszy to przetwarzanie i pozwoli uniknąć błędów kopiowania/wklejania).

Czy w ustawieniach repozytorium wszyscy użytkownicy mają dostęp do tego folderu? Czy nie masz dodatkowych uprawnień, które sprawiają, że działa to na Twoim stanowisku, a nie na kimś innym?

2 polubienia

Szczerze dziękuję, bardzo dziękuję szczególnie d.rogerowi i Cyril.f za zainteresowanie i pomoc udzieloną temu postowi!

Problem był dość prosty, jak w większości przypadków! Dzieje się tak po przeczytaniu odpowiedzi Cyril.f pytającego, czy ścieżki są identyczne na wszystkich stacjach roboczych i d.rogera zastanawiającego się nad obecnością folderu SOLIDWORKS Data w ścieżce.

Rzeczywiście, na moim komputerze widok bagażnika nie został zainstalowany w tym samym miejscu, co na innych komputerach. Nie powinnam była ufać...

Jeszcze raz dziękuję i do zobaczenia wkrótce na inne zawiłe, ale interesujące pytania!

1 polubienie