Vba - Łącznik EPDM

W EPDM z Eksploratorem Windows,

fakt posiadania jako scenerii "miniaturowego SW 3D"

że ostatnią zakładką używaną w EPDM jest "Podgląd"

i wybierz nowy plik,

Spowoduje to automatyczne pobranie pliku (jeśli na komputerze nie ma wersji w pamięci podręcznej)

 

to jeśli mamy już wersję w "cache" nie będąc ostatnią,

nie ma "automatycznego pobierania" z zakładką "Prognoza"

Ale to zachowanie można zmienić w zależności od ustawień użytkownika/grupy.

(np. zezwalając użytkownikowi na zarządzanie wersjami w pamięci podręcznej lub wymuszając najnowszą wersję itp.)

1 polubienie

Witam

Uważam, że jest to ograniczenie API oprogramowania w VBA. Bo jeśli zajrzysz do pomocy nie ma dokumentacji w VBA: http://help.solidworks.com/SearchEx.aspx?q=EdmVault5&sort=&version=2017&lang=english&prod=api

1 polubienie

Witam, jeśli interfejsy API istnieją na platformie .net, myślę, że istnieją również w vba.

Aby Ci pomóc, możesz skopiować otrzymany kod do konwertera VB.net języka C#. Kilka z nich można znaleźć w Internecie. Ponieważ Vba jest pobierany z vb.net, kod będzie wystarczająco bliski, abyś mógł go zrozumieć.

Z pamięci można załadować bibliotekę dll, aby uzyskać dostęp do obiektów pdm.

Pozdrowienia.

1 polubienie

Yves.T :

Nie ma potrzeby stosowania konwertera, jest wiele przykładów w vb.net. Oto kilka linków: http://help.solidworks.com/2017/english/api/epdmapi/Traverse_Folders_and_Files_in_Vault_Example_VBNET.htm

1 polubienie

Witam

Rzeczywiście, jest biblioteka DLL do załadowania, to "EPDM. Interop.epdm.dll", który znajduje się w katalogu instalacyjnym SOLIDWORKS Enterprise PDM.

Pozdrowienia

1 polubienie

Witam ponownie,

Możesz spróbować użyć nowego makra za pomocą następujących wierszy:

     Dim swApp As Object (Obiekt Ciemny)

     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 "Le_nom_de_ton_coffre-silny", 0

         Ustaw plik = Vault.GetFileFromPath("Le_nom_de_ton_fichier_avec_le_chemin", Folder)
    
         Ustaw część = swApp.OpenDoc6("Le_nom_de_ton_fichier_avec_le_chemin", 1, 0, "", longstatus, longwarnings)

     Koniec subwoofera

Nie zapomnij zmienić nazwy repozytorium i nazwy pliku.

Pozdrowienia

1 polubienie

Cze wszystkim

Będąc na 2 projektach jednocześnie nie udało mi się jeszcze przeprowadzić testów, ale powinienem być w stanie dzisiaj z drugiej strony mam kilka pytań w związku z Twoimi odpowiedziami:

- W przypadku załadowanego ddl nie wiem, jak to zrobić... Czy jest to plik do pobrania? Plik do linkowania tylko z moimi częściami?
- W kodach, które udało mi się przejrzeć, takich jak d.roger  , zauważyłem, że jest funkcja LoginAuto, jak to działa? Bo muszę się połączyć z EPDM przez to okno:

Czy ta funkcja będzie kolidować z moją zwykłą metodą logowania? Być może źle interpretuję termin "Auto".

Bo idealnie bym chciał, żeby przy uruchamianiu makra było sprawdzenie połączenia z EPDM (dzięki powyższemu oknu), a jeśli tak, to w razie potrzeby załadowanie dokumentów do cache.

Ale zanim przejdę do kodu, czy nie byłoby łatwiej zmodyfikować ustawienia EPDM, takie jak "Wyczyść pamięć podręczną przy wylogowaniu"  lub inne podobne w załączniku.

Dziękuję za wielką pomoc


para_epdm.png

Witam

W przypadku połączenia nie będzie to powodować konfliktu. LoginAuto korzysta z parametrów połączenia lokalnego, więc jeśli podczas logowania zostanie zażądane login/mdp, zostanie wyświetlone okno.

Jeśli chodzi o czyszczenie pamięci podręcznej po wylogowaniu, naprawdę musisz rozważyć zalety i wady. Ma to wpływ na wyodrębnione pliki (złożenia, zwłaszcza jeśli moja pamięć jest poprawna) i może generować straty pracy. Wszystko zależy od reguł archiwizacji i rygoru użytkowników.

Co do reszty, rzeczywiście nie ma więcej przykładów w vba (w 2009 roku były), ale z VB.NET można się zorientować. Jednak nadal będą dostępne funkcje zarezerwowane dla języków C# i VB.NET.

 

2 polubienia

Witam

Aby biblioteka DLL została załadowana, jest to konieczne w przypadku programów w języku C#. W VBA wystarczy odwołać się do "PDMWorks Enterprise 20xx Type Library" w swoim makrze, patrz załączony obrazek.

Aby zapoznać się z oknem logowania, zobacz odpowiedź Cyril.f powyżej.

W przeciwnym razie myślę, że bardziej interesujące jest rozpoczęcie nauki języka takiego jak VB.net lub C#, które pozwalają na robienie o wiele więcej rzeczy zarówno w formie makr, jak i w formie niezależnych programów, które pozwalają łatwo kontrolować EPDM i/lub SolidWorks, ale to tylko moja osobista opinia. Istnieją doskonałe kursy do nauki tych języków na różnych stronach, takich jak https://openclassrooms.com/courses/apprenez-a-developper-en-c

Pozdrowienia


references.png
2 polubienia

Myślę, że ci się przyda. Co więcej, jest to bardzo ciekawe.

VB.net jest bardziej podobny do VBA. Nauka będzie łatwiejsza.

Osobiście korzystam z EDi Visual Studio w wersji Community: https://www.visualstudio.com/fr/thank-you-downloading-visual-studio/?sku=Community&rel=15

Polecam również doskonałe developpez.com:

Forum platformy .net

Kursy .net

Platforma .net — często zadawane pytania

Sekcja programu Visual Studio

 

Po prawej:

Jak uruchomić kod C lub VB.net jako makra w oprogramowaniu?

 

 

 

2 polubienia

W przypadku tego projektu postaram się być zadowolony z Vba, ponieważ jestem na stażu i niestety nie zostanę zatrudniony, a ludzie, którzy będą korzystać z mojego programu, ledwo mają podstawy Vba...

Ale w przyszłych aplikacjach będę się nad tym bardziej rozwodził. Z drugiej strony mam bardzo głupie pytanie, w czym jest lepszy od Vba? Więcej możliwości? Czy są to również programy do zakodowania w konkretnym module oprogramowania, czy jest on niezależny? (Tylko małe pytania, aby zorientować się, zanim zacznę się uczyć)

Vb.net jest rzeczywiście znacznie bardziej podobny do VBA i dlatego łatwiejszy do nauczenia, C# jest znacznie mniej "rozwlekły", to kwestia gustu.

W przypadku makr w C# lub VB.net w oprogramowaniu tworzę biblioteki DLL, a kiedy wstawiam nowe przyciski w oprogramowaniu, używam tych bibliotek DLL, patrz załączony obrazek. Skończyło się na tym, że stworzyłem bibliotekę DLL, która jest używana tylko do odczytywania pliku tekstowego, w którym umieszczam ścieżkę do mojego głównego pliku wykonywalnego, a następnie uruchamiam ten plik wykonywalny, co pozwala mi na znacznie większą elastyczność w moich programach.

W moich programach używam open source SharpDevelop IDE.

Pozdrowienia


capture-2.png
1 polubienie

W czym jest lepszy od Vba? Więcej możliwości? : Visual Basic for Applications (VBA) jest implementacją języka Microsoft Visual Basic, VB.NET lub C# są językami programowania samymi w sobie. DUŻO więcej możliwości.

Czy są to również programy do zakodowania w konkretnym module oprogramowania, czy jest on niezależny? Niezależne programowanie (tworzenie plików wykonywalnych) przy użyciu IDE, takiego jak Visual Studio Community lub Sharpdevelop, znacznie ułatwia sprawę.

2 polubienia

Rzeczywiście, wygląda to bardziej interesująco! Zdecydowałem więc, że po moim projekcie przechodzę do nauki VB.net.

Ale jeśli chodzi o mój problem, wypróbowałem makro d.roger i początek wydaje się działać, ponieważ kiedy klikam na wybór, otwiera się okno połączenia EPDM.

Ale następująca linia wydaje się nie spełniać swojego zadania, chyba że nie rozwiąże mojego problemu:

'Active la seconde ComboBox lorsqu'un type est sélectionné dans la 1er liste
 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 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 "Nom_coffre", 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("Chemin + nom de fichier", Folder)
    Set Part = swApp.OpenDoc6("Chemin + nom de fichier", 1, 0, "", longstatus, longwarnings)
    swApp.ActivateDoc2 "Nom fichier", 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...........................
                
             

Oto część mojego kodu, a błąd "obiekt nie jest ustawiony"  pojawia się w wierszu odzyskiwania rodziny części.

Dziękuję za pomoc.

Ustaw swDesignTable = swModel.GetDesignTable bez ()?

i przyciemnij swDesignTable jako SldWorks.DesignTable

W linii:

Vault.LoginAuto "Nom_coffre", 0

Nie podałeś nazwy swojego sejfu, wątpię, żeby nazywał się Nom_coffre.

To samo w wierszach:

Set File = Vault.GetFileFromPath("Ścieżka + Nazwa pliku", Folder)
Ustaw część = swApp.OpenDoc6("Ścieżka + nazwa pliku", 1, 0, "", longstatus, longwarnings)

lub Ścieżka + nazwa pliku powinna być nazwą pliku wraz ze ścieżką, a więc w postaci "C:\Vault-BE\TEST\TestFile.sldprt", na przykład

Pozdrowienia

Tak, tak , d.roger , nie martw się, zmieniłem to ^^. Właśnie usunąłem nazwiska, aby umieścić je na forum ;).

Cyril.f próbowałem, ale nadal nie działa.

Edycja: Myślę, że ma to wpływ, ale kiedy uruchamiam mój File, Part i swDesigntable = Nic się nie zmienia krok po kroku, ale nie widzę problemu, działa to, jeśli ręcznie załaduję poprzednią wersję.

Witam

Czy Twój plik dobrze otwiera się w oprogramowaniu?

Przykład użycia GetDesignTable w VBA: http://help.solidworks.com/2013/English/api/sldworksapi/Get_Design_Table_Example_VB.htm

Spróbuj także dodać linię

Plik.GetFileCopy (0)

tuż za linią

Vault.GetFileFromPath("Le_nom_de_ton_fichier_avec_le_chemin", Folder)

Pozdrowienia

Właśnie wstawiłem linię, którą mi wskazałeś, a błąd jest w tym wierszu, ten sam błąd.

Tak, mój plik dobrze otwiera się w oprogramowaniu, a moje makro działa wspaniale, o ile wcześniej kliknąłem na mój plik, aby "Pobierz najnowszą wersję". 

Potwierdza to, że jest to rzeczywiście powód błędu.

Edycja: jeśli chodzi o korzystanie z GetDesignTable, używam go zgodnie ze wskazaniami.

Ja tego nie widzę. Dla Twojej informacji, nie mam żadnego błędu operacyjnego z następującym makrem:

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

Jedynym komunikatem, jaki otrzymuję, jest to, że Epdm mnie, czy chcę wyodrębnić plik po jego załadowaniu, normalna wiadomość, ponieważ tak nie jest. FYI Nie potrzebuję wiersza GetFileCopy.

Jestem na wersji z 2015 roku.

Pozdrowienia