• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Leggi altro.

Ridefinizione collegamenti in batch

ApeGana

Utente Standard
Professione: Progettista
Software: Solid Edge ST8
Regione: Marche
#1
Ciao a tutti.
Qualcuno sa se si può impostare una serie di sessioni di ridefinizione collegamenti in revision manager in modo che vengano eseguite in batch, una di seguito all'altra, partendo da una lista di coppie path_vecchio / path_nuovo ?

Spero di essermi spiegato.
 

ApeGana

Utente Standard
Professione: Progettista
Software: Solid Edge ST8
Regione: Marche
#2
Aggiungo qualcosa:
Ho provato a scrivere una macro in Excel, ma chiaramente non funziona :tongue:
Non dà alcun errore, semplicemente non dà origine ad alcun risultato.

La riporto qui nella speranza che qualche anima pia mi dica cosa c'è che non va.
Codice:
Dim objRm As RevisionManager.Application
Dim CurrentLinkStr As String
Dim RedefineLinkStr As String
Dim ListOfFoldersOrFiles As String

Sub Ridefinizione_collegamenti()

 Set objRm = GetObject(, "RevisionManager.Application")

 CurrentLinkStr = "\\srv\Documenti\TEST\Origine\TE1.par"
 RedefineLinkStr = "\\srv\Documenti\TEST\Destinazione\TCE1.par"
 ListOfFoldersOrFiles = "\\srv\Documenti\TEST\"

 Call objRm.RedefineLinks(CurrentLinkStr, RedefineLinkStr, ListOfFoldersOrFiles, bProcessSubFolders, bProcessAssemblyDocuments)

End Sub
Secondo le mie intenzioni dovrebbe cercare file .asm nella cartella ...\TEST e nelle sue sottocartelle, e in quelli che trova andare a sostituire eventuali collegamenti al file ...\Origine\TE1.par con analoghi al file ...\Destinazione\TCE1.par
Chiaramente questa ancora non fa un vero batch, ma poi una volta che funzioni, impostare un ciclo for modificando volta per volta i parametri non dovrebbe essere difficile.

Qualche suggerimento?
 

Be_on_edge

Moderatore
Staff Forum
Professione: Progettazione
Software: Solid Edge
Regione: Emilia Romagna
#3
Così ad occhio mancano un po di virgole nella riga dove invochi il RedefineLinks, in più i parametri optional sebbene indicati come variant secondo me sono dei boolean.

In oltre dal tuo codice si presuppone che Revision Manager sia già aperto, potresti creare un'istanza da utilizzare per la tua macro con:


Codice:
Dim ObjRM As RevisionManager.Application
Dim CurrentLinkStr As String
Dim RedefineLinkStr As String
Dim ListOfFoldersOrFiles As String

Sub Ridefinizione_collegamenti()

CurrentLinkStr = "\\srv\Documenti\TEST\Origine\TE1.par"
RedefineLinkStr = "\\srv\Documenti\TEST\Destinazione\TCE1.par"
ListOfFoldersOrFiles = "\\srv\Documenti\TEST\"

ObjRM = New RevisionManager.Application
ObjRM.RedefineLinks(CurrentLinkStr, RedefineLinkStr, ListOfFoldersOrFiles, , False, True, True, True, True, False, False, , )
ObjRM.Quit()

End Sub

Ciao
 

ApeGana

Utente Standard
Professione: Progettista
Software: Solid Edge ST8
Regione: Marche
#4
Grazie, ma modificando così la riga

ObjRM.RedefineLinks(CurrentLinkStr, RedefineLinkStr, ListOfFoldersOrFiles, , False, True, True, True, True, False, False, , )

mi segnala errore di compilazione: prevista espressione
 

Be_on_edge

Moderatore
Staff Forum
Professione: Progettazione
Software: Solid Edge
Regione: Emilia Romagna
#5
Grazie, ma modificando così la riga

ObjRM.RedefineLinks(CurrentLinkStr, RedefineLinkStr, ListOfFoldersOrFiles, , False, True, True, True, True, False, False, , )

mi segnala errore di compilazione: prevista espressione
modifica la riga così:

Call ObjRM.redefinelinks(CurrentLinkStr, RedefineLinkStr, ListOfFoldersOrFiles, , False, True, True, True, True, False, False)

ciao
 

ApeGana

Utente Standard
Professione: Progettista
Software: Solid Edge ST8
Regione: Marche
#6
Allora, non l'avevo scritto nel post precedente, ma aggiungendo call davanti mi dava sempre lo stesso errore.
Adesso seguendo quello che hai scritto, ho aggiunto Call ed ho anche eliminato le ultime 2 virgole in parentesi... l'errore non lo dà più. Ma non produce risultati :frown:

Per quanto riguarda il fatto che RM dovesse già essere aperto, sì è vero, la prima versione lo presupponeva. Ho provato come dicevi tu, ma la riga
ObjRM = New RevisionManager.Application
non gli piace; andando un po' a rovistare negli esempi dell'SDK l'ho sostituita con
Set objRm = CreateObject("RevisionManager.Application")
non dà errori, ma neanche risultati apprezzabili (non si vede RM aprirsi, si dovrebbe o dovrebbe lavorare in background?)

Se invece apro a mano RM e sulla macro lascio l'istruzione GetObject... , ora che aggiunto anche il quit, vedo RM chiudersi, ma nessun altro effetto :frown:

Boh. Comunque grazie.
 

Be_on_edge

Moderatore
Staff Forum
Professione: Progettazione
Software: Solid Edge
Regione: Emilia Romagna
#7
Direi di aggiungere anche gli ultimi due parametri alla riga "redefinelinks" e poi andare a leggere i file di Log in modo da capire dove si blocca.

Ciao
 

Be_on_edge

Moderatore
Staff Forum
Professione: Progettazione
Software: Solid Edge
Regione: Emilia Romagna
#9
Negli ultimi 2 parametri di RedefineLInks devi specificare il percorso in cui vengono salvati i file di log

Public Function RedefineLinks( _
ByVal CurrentLinkStr As String, _
ByVal RedefineLinkStr As String, _
Optional ByVal ListOfFoldersOrFiles As Variant, _
Optional ByVal InputTextFileName As Variant, _
Optional ByVal bProcessSubFolders As Variant, _
Optional ByVal bReplaceIfFileExists As Variant, _
Optional ByVal bProcessAssemblyDocuments As Variant, _
Optional ByVal bProcessDraftDocuments As Variant, _
Optional ByVal bProcessPartDocuments As Variant, _
Optional ByVal bProcessWeldmentDocuments As Variant, _
Optional ByVal bProcessSheetMetalDocuments As Variant, _
Optional ByRef DetailLogFile As Variant, _
Optional ByRef ErrorLogFile As Variant _

) As Long
 

ApeGana

Utente Standard
Professione: Progettista
Software: Solid Edge ST8
Regione: Marche
#10
Ok, ma quali file di log?
Vabè scusa, sarà che stanotte ho dormito poco!!

Comunque ho provato; non ero sicuro se dover mettere solo il percorso per i log o il percorso completo di nome file; ho provato in entrambi i casi:
NIENTE DI NIENTE
nessuna ridefinizione, nessun file log generato.

È come se quella riga la saltasse a piè pari.
 

vespa_83

Utente Standard
Professione: disegnatore
Software: Solid Edge
Regione: Romagna
#11
NON VA.
Ho provato a mettere una matrice (elenco) sull'elenco dei file o cartelle, ma non va.
Tra le varie prove mi era comparso un errore del tipo che vba di excel non supportava una proprietà o metodo.

I file log non si compilano neppure creando prima il file a mano.

Forse bisogna chiedere sul forum americano un esempio funzionante.

p.s.: per queste cose batch, io apri il singolo file, sostituisco il link, salvo.
Se ti interessa ti posto un esempio.

Codice:
Sub Ridefinizione_collegamenti() ' non va
    Dim ObjRM As RevisionManager.Application
    Dim CurrentLinkStr As String
    Dim RedefineLinkStr As String
    
    Dim ListOfFoldersOrFiles(0) As Variant
    
    Dim DetailLogFile As Variant
    Dim ErrorLogFile As Variant
    
    CurrentLinkStr = "C:\Disegni - Locale\SDK\test SolidEdge\test1.par"
    RedefineLinkStr = "C:\Disegni - Locale\SDK\test SolidEdge\test2.par"
    
    ListOfFoldersOrFiles(0) = "C:\Disegni - Locale\SDK\test SolidEdge\"
    'ListOfFoldersOrFiles(1) = ""
    
    DetailLogFile = "C:\Disegni - Locale\SDK\test SolidEdge\DetailLogFile.txt"
    ErrorLogFile = "C:\Disegni - Locale\SDK\test SolidEdge\ErrorLogFile.txt"
    
    On Error Resume Next
    
    Set ObjRM = GetObject(, "RevisionManager.Application")
    If ObjRM Is Nothing Then
        On Error GoTo 0
        Set ObjRM = CreateObject("RevisionManager.Application")
    End If
   
    ObjRM.DisplayAlerts = True
    ObjRM.Visible = True
    
    'MsgBox (ObjRM.WhereUsedCriteria("*.*", ListOfFoldersOrFiles))
    Call ObjRM.RedefineLinks(CurrentLinkStr, RedefineLinkStr, ListOfFoldersOrFiles, , False, True, True, True, True, False, False, DetailLogFile, ErrorLogFile)
    Call ObjRM.Quit
    
    Set ObjRM = Nothing

End Sub
 

ApeGana

Utente Standard
Professione: Progettista
Software: Solid Edge ST8
Regione: Marche
#12
Si, grosso modo è uguale a come l'ho scritta io (o meglio come è diventata dopo le varie correzioni e suggerimenti), ma effettivamente non va.
Grazie del tentativo!
Effettivamente ho anche provato a cercare qualche esempio già scritto, ma sull'SDK della versione 19 non sono riuscito a trovarlo.

p.s.: per queste cose batch, io apri il singolo file, sostituisco il link, salvo.
Se ti interessa ti posto un esempio.
Potrebbe interessarmi, spiegami meglio. Grazie
 

vespa_83

Utente Standard
Professione: disegnatore
Software: Solid Edge
Regione: Romagna
#13
Esempio di Modifica il 3D collegato a un file draft. Si ipotizza che sia presente solo un collegamento oppure si intende modificare solo primo.

Codice:
FilePath = "E:\Disegni\Progetti"
FileName = "nomefile"
'FileEXT = "asm"
On Error Resume Next

Set rmApp = GetObject(, "RevisionManager.Application")
	If rmApp Is Nothing Then
On Error GoTo 0
		Set rmApp = CreateObject("RevisionManager.Application")
	End If
Set rmDFT = rmApp.Open(FilePath & "\" & FileName & ".dft")

' TODO:
' per i dft senza 3D:  mettere un controllo
' rmDFT.LinkedDocuments.Count > 0
Set rm3D = rmDFT.LinkedDocuments.Item(1)
rm3D_filename = rm3D.FullName

' PARSE - PARSING
testo = rm3D_filename
pos = InStrRev(testo, ".")
parseArg = Trim(Mid(testo, pos + 1, 3))
FileEXT = parseArg
' FileEXT = "asm" ' sovrascrivi
 
rm3D.Replace (FileName & "." & FileEXT)
rmDFT.SaveAllLinks