Wersja PDM Vault za pomocą makra Excel

Witam 

Postaram się wyjaśnić mój problem najlepiej jak potrafię, ale nie jest to łatwe.

Używam makra programu Excel do zastępowania części i zespołów w zespole modelu.

Mój program działa dobrze na moim komputerze, ale właśnie zauważyłem problem z wersją zestawów, której makro będzie szukać na innym komputerze.

Przykład:

Jeśli wyodrębnię zestaw na moim komputerze (PC1), zmodyfikuj go, a następnie umieść z powrotem w sejfie PDM (nie mam więcej ekstraktów na moim komputerze)

Jeśli na innym komputerze (PC2) użyję makra Excela i zaimportuję ten świeżo zmodyfikowany zestaw, wersja, którą odzyskam, to wersja przed modyfikacją.

Technicznie rzecz biorąc, sposób, w jaki moje makro Excela pobierze mój zespół, jest bardzo prosty, mój plik Excela zawiera nazwy zespołów i ich lokalizacje i używa tego kodu (poniżej) do zastąpienia części modelu (PIECE_A _REMPLACER) zawartej w ASSEMBLAGE_MODELE wybranym zespołem (NEW_PART_NAME), który ma ścieżkę 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)

 

Nie rozumiejąc, dlaczego wersja złożenia, którą otwierał PC2, zamknąłem wszystko i ręcznie wyszukałem (w PDM) ten zespół, który chcę zaimportować do mojego zespołu modelu, a następnie otworzyłem go i tam .... otwiera się właściwa wersja (wersja, którą uświatowiłem na PC1).

Zamykam wszystko, a następnie próbuję ponownie użyć makra za pomocą programu Excel.... To działa, teraz importuje poprawną wersję pliku solidworks.

Na początku myślałem, że jest to problem z pamięcią gotówkową PC2 i dlatego solidworks otwierał to, co miał w swojej pamięci gotówkowej, a nie najnowszą wersję każdego pliku.

Tyle tylko, że... przy kolejnej próbie próbuję teraz zaimportować zespół (zawsze zastępuję część w moim zespole modelu tym nowym zespołem), który nie istniał wcześniej w sejfie PDM: folder, w którym znajduje się ten nowy zespół, nie istniał wcześniej (PC2 nigdy wcześniej nie otwierał tego folderu). 

Na PC2 testuję makro Excela i tam program reaguje tak, jakby nawet nie mógł znaleźć danego pliku... Idzie dalej, nic nie robiąc... chociaż, podobnie jak w przypadku innych części, podaję mu poprawną nazwę pliku i lokalizację.

Przerabiam wszystko, szukam tego nowego pliku na PDM PC2, znajduję go i otwieram... Wszystko idzie dobrze.

Przerabiam wszystko i ponownie próbuję makra Excela... Działa, w końcu znajduje nowy plik.

Wydawałoby się, że za pośrednictwem Excela, nawet jeśli podam prawidłową lokalizację pliku, makro nie ma dostępu do najnowszej wersji skarbca PDM, nie tylko pliku, ale dowolnego PDM. 

Czy na każdym komputerze jest coś w rodzaju "pamięci gotówkowej sejfu PDM" czy coś w tym rodzaju?

Myślałem więc, na początku mojego makra Excela, aby dodać linię, aby opróżnić tę pamięć kasową (jeśli istnieje) i tym samym zmusić makro do przejścia i rysowania z aktualnej wersji PDM, a nie zapamiętanej....

Jeśli masz pomysł, lub jeśli poszedłem zupełnie w złym kierunku... Powiedz mi... może to po prostu sposób, w jaki szukam moich plików w makrze...

Z góry dziękuję

Yves

PS: przepraszam za brak akcentów, jestem w Wielkiej Brytanii więc klawiatura QWERTY

Witam

W makrze musisz pobrać najnowszą wersję pliku przed przetworzeniem, w przeciwnym razie pobiera wersję, która znajduje się w lokalnej pamięci podręcznej lub nic, jeśli nie ma wersji lokalnej.

Pozdrowienia

1 polubienie

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

1 polubienie

Witaj d.roger, 

Przyznaję, że nie mogę znaleźć części kodu w przykładzie, którą muszę wstawić do mojego kodu, aby mieć wersję pliku przed przetworzeniem zamiast lokalnej wersji gotówkowej.

Czy jest to sztuczka, którą można dodać w moim kodzie, który działa z moim obecnym kodem, czy też muszę całkowicie zmienić metodę importu części?

Dziękuję

Yves

Witam

Na http://www.lynkoa.com/forum/import-export-formats-neutres/obtention-de-la-derni%C3%A8re-version-dun-fichier-provenant-du-coffre posta znajdziesz przykład, jak pobrać najnowszą wersję pliku, oczywiście dostosowaną do Twoich potrzeb.

Pozdrowienia

Z tego, co rozumiem z Twojego fragmentu kodu, musisz przedefiniować swoje zmienne NEW_PART_PATH i NEW_PART_NAME, które muszą odpowiadać Folder.LocalPath i File.Name z podanego powyżej przykładu.

Nie testowałem tego, ale musi to wyglądać mniej więcej tak:

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

 

w przeciwnym razie innym rozwiązaniem byłoby włączenie do makra otwierania i zamykania pliku w postaci stałej, aby zmusić PDM do załadowania najnowszej wersji. Ale czas przetwarzania byłby również dłuższy....

W przeciwnym razie rozwiązanie D.rogera jest moim zdaniem najlepsze.

Pozdrowienia

Witam 

Dziękuję za odpowiedzi, myślę, że zrozumiałem, ale mój problem polega na tym, że kiedy testuję mój kod, wydaje się, że nie może połączyć się z magazynem:

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

 

Zadbałem o aktywację biblioteki PDM w Excelu:

Nie rozumiem...

Testowałem również metodą:

Vault.Login (USERNAME,PASSWORD,VAULTNAME)

ale dochodzę do tego samego wyniku

Czy o czymś zapomniałem?

Z góry dziękuję

Witam

Moim zdaniem zamiast tego napisz:

Set vault = New EdmVault5 

 

1 polubienie

Pierwsza próba:

Aby na razie uporać się z tym problemem z podłączeniem do bagażnika, postawiłem warunek:

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

Więc po prostu muszę połączyć się z PDM wcześniej, a następnie makro pomija ten krok. 

Z drugiej strony, gdy makro dotrze do:

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

Otrzymuję komunikat o błędzie informujący, że nie mam połączenia z magazynem... jednak makro przeszło etap połączenia, ponieważ byłem połączony...

 

Druga próba:

tym razem łączę się z PDM przed uruchomieniem makra, co powinno wprowadzić mnie z powrotem w te same warunki co poprzednio (bez warunku "If Vault.IsLoggedIn Then"), więc mam okno połączenia PDM... Z tym, że to działa...

 

Ponadto połączenie za pomocą makra jest niezależne od połączenia za pomocą eksploratora. Ze swojej strony mogę uruchomić makro z kontem administratora, będąc połączonym z moim normalnym kontem w skarbcu.

Makra wywołują instancje i w związku z tym uruchamiają drugą sesję. Jedyną wadą (ale nigdy nie znajduję się w takiej sytuacji) jest to, że nie próbuję robić czegoś innego w tym samym czasie, w przeciwnym razie gwarantowany awaria.

W obecnej sytuacji musisz ustawić wszystko na parametry za pomocą makra, aby uniknąć interakcji z oprogramowaniem programowym lub sejfem już działającym na stacji roboczej, na której operacja jest uruchamiana.

1 polubienie

 Witaj Cyrylu,

To niczego nie zmienia

Ale w obu przypadkach zauważam, że nawet jeśli mam następujący komunikat z tyłu:

Po tym czasie nadal jestem połączony z PDM...

 

 

Witam

Jestem zaskoczony komunikatem o błędzie, oznacza to, że makro nie może połączyć się z obiektem IEdmVault18 podczas deklarowania obiektu Vault w EdmVault5, czy nie byłoby już obiektu Vault zadeklarowanego wcześniej w makrze?

Pozdrowienia

Niestety nie, w kolejności posiadam:

Dim Vault As New EdmVault5

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

Mogę wyszukać "Vault", ale nie mogę znaleźć innego wcześniej...

W polu Jeśli poprosisz o połączenie, jeśli jesteś już połączony!!!

Musisz umieścić :

Jeśli nie , Vault. Jest zalogowany, a następnie
      Sklepienie. LoginAuto "PDM", 0
Zakończ jeżeli :

Tak, zdałem sobie sprawę z tego błędu i zmieniłem na:

If Not Vault.ISLoggedIN Then

ale to nie działa lepiej....

Jesteś połączony z magazynem, tak, ale nie za pomocą makra (jeśli zaznaczysz tylko za pomocą ikony skarbca w obszarze powiadomień, nie powie ci, czy twoje makro zdołało się połączyć, czy nie, jak wspomniano powyżej, jest niezależne).

Myślę, że jest to twój sposób na zadeklarowanie skarbca, spróbuję napisać poniżej po szybkim wyszukiwaniu w google:

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

 

Wydaje się, że nie podoba mu się ten tekst:

Oto przykład kodu, który działa dla mnie:

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

 

Z następującymi bibliotekami:

Może już zrób test z samym połączeniem w innym makrze.

Pozdrowienia

1 polubienie