Wyodrębnij/zarchiwizuj za pomocą skryptu PDM

Witam wszystkich! 

Aby wyjaśnić kontekst, obecnie próbuję wyodrębnić i zarchiwizować pliki za pomocą skryptu PDM, jak widać na obrazku: 

  Oto szczegóły kodu: 

Option Explicit
Dim swApp As Object

Sub main()

Set swApp = Application.SldWorks
swApp.Visible = True
sAddinName = "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS PDM\PDMSW.dll"
status = swApp.LoadAddIn(sAddinName)

modelPath = "<Filepath>"

Set swDocSpecification = swApp.GetOpenDocSpec(modelPath)
        swDocSpecification.DocumentType = swDocPART
        swDocSpecification.ReadOnly = False
        swDocSpecification.Silent = True
        swDocSpecification.ConfigurationName = ""
        swDocSpecification.DisplayState = ""
        swDocSpecification.IgnoreHiddenComponents = True
        Set swModel = swApp.OpenDoc7(swDocSpecification)
        errors = swDocSpecification.Error
        
Set swModel = swApp.ActiveDoc

Dim swPdmVault As IEdmVault5
Const VAULT_NAME As String = "XXXXXXXXXXXX"

Dim swPdmFile As IEdmFile5
Set swPdmVault = New EdmVault5
swPdmVault.LoginAuto VAULT_NAME, 0
Set swPdmFile = swPdmVault.GetFileFromPath(modelPath)

Dim swPdmFolder As IEdmFolder5
Set swPdmFolder = swPdmVault.GetFolderFromPath(Left(modelPath, InStrRev(modelPath, "\")))
swModel.ForceReleaseLocks
swPdmFile.LockFile swPdmFolder.ID, 0

End Sub

 

Chciałbym zwrócić uwagę, że do wykonania tego skryptu używam zadania PDM, które działa poprzez dodatek "SOLIDWORKS Task-Add-in", w którym dodałem również .dll do korzystania z funkcji PDM wyodrębnianie, archiwizowanie itp.

Mój problem polega na tym, że to makro działa bardzo dobrze, gdy uruchamiam je z SolidWorks (oczywiście podmieniając ścieżkę do danego pliku...) bezpośrednio, ale daje mi następujący błąd, gdy uruchamiam go za pomocą skryptu PDM...  

Ponieważ nic nie wskazuje na to, dlaczego skrypt nie działa poprawnie, odwołuję się do Twojej wiedzy!!

Czy ktoś kiedykolwiek spotkał się z tym problemem lub pomysłem? Bo szczerze mówiąc, przeszedłem przez wszystkie moje pomysły....

Z góry bardzo dziękuję tym, którzy mi pomogą i będą mieli dobry dzień :)

Witam

W ten sposób skłaniałbym się do stwierdzenia, że zawiesza się w PDM (domyślam się, że jest w Eksploratorze Windows), ponieważ skrypt w zasadzie wywołuje funkcje SW (stąd fakt, że działa dobrze w SW).

W związku z tym konieczne byłoby dodanie funkcji do otwarcia oprogramowania i pliku docelowego do przeprowadzenia przetwarzania w oprogramowaniu. O ile mi wiadomo, zadania, niezależnie od tego, czy są skrypty, czy nie, koniecznie otwierają oprogramowanie, aby wykonać konwersje lub wydruki.

1 polubienie

Dziękujemy za Twoją opinię, Cyril :) 

Skrypt PDM otwiera SolidWorks na początku wykonywania... a jeśli zachowam tylko tę część skryptu, która pozwala otworzyć plik w SW : 

modelPath = "<Filepath>"

Set swDocSpecification = swApp.GetOpenDocSpec(modelPath)
        swDocSpecification.DocumentType = swDocPART
        swDocSpecification.ReadOnly = False
        swDocSpecification.Silent = True
        swDocSpecification.ConfigurationName = ""
        swDocSpecification.DisplayState = ""
        swDocSpecification.IgnoreHiddenComponents = True
        Set swModel = swApp.OpenDoc7(swDocSpecification)
        errors = swDocSpecification.Error

 

Scenariusz działa bardzo dobrze... Mam więc wrażenie, że jest to problem w części skryptu dotyczącej wyodrębniania/archiwizowania! 

Ups, przepraszam, źle odczytałem kod. Więc przetestowałem szybko, to samo zachowanie nie działa z eksploratora.

Myślę, że istnieje konflikt między tym, co skrypt wysyła do SW, a tym, jak działa SW (na przykład widać, że plik się nie otwiera).

1 polubienie

Tak, też myślę, ale szkoda, że nie mam dokładnych wskazówek dotyczących problemu z wykonaniem... bo nagle znalezienie rozwiązania jest skomplikowane :/ 

To jest "Nie można uruchomić makra Solidworks". Mam wrażenie, że czeka na aktualne wersje VB.NET a nie na VBA, ale prawdą jest, że wcześniej inne zadania konwersji były w skrypcie tak łatwo analizowane.

1 polubienie

Będę nadal próbował niektórych modyfikacji kodu, ale jeśli naprawdę nie mogę nic uzyskać i nikt inny nie ma żadnych pomysłów, otworzę zgłoszenie z pomocą techniczną! 

Ostatecznie pominąłem go w zakładce "szczegóły pliku wyjściowego" lub "Plik" (zależy to od zadania) i klikając w zaawansowane opcje skryptu (otrzymujesz kod SW).

1 polubienie

Może powinienem spróbować wstawić mój kod za pomocą tego typu zadania ? 

Do testowania nigdy nie używałem zadań (tylko konwersja skopiowana z podstawowego, a poza tym używam dispatch do innych funkcji)

1 polubienie

Nie działa też przy użyciu zadań "konwersja" / "drukowanie" !