Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Solid Edge
  VB.Net kopieren einer Baugruppe mit Links

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   VB.Net kopieren einer Baugruppe mit Links (207 mal gelesen)
Andy313
Mitglied
Konstruktöör


Sehen Sie sich das Profil von Andy313 an!   Senden Sie eine Private Message an Andy313  Schreiben Sie einen Gästebucheintrag für Andy313

Beiträge: 181
Registriert: 10.02.2005

Solid Edge ST9 mit Revision Manager
Windows 7 64bit

erstellt am: 04. Aug. 2017 08:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Guten Morgen Zusammen

Ich stehe wider mal an bei meinem Programm mit VB.Net.
Ich versuche eine Baugruppe mit allen Teilen zu kopieren.
In dieser Baugruppe gibt es eine Skizze und 2 Teile sind mit dieser Skizze verknüpft (um die Grösse und Pos. der Teile zu verändern).
Wenn ich das ganze mit dem Design Manager mache (ohne VB), ist es kein Problem, dann sind die Teile an der neuen Baugruppe angehängt und die Links stimmen.
Wenn ich es im VB mit dem Design Manager mache, sind auch alle neuen Teile an der neuen Baugruppe angehängt, aber die Links sind immer noch auf die alte Baugruppe bezogen...
Das passiert wenn die alten Dateien schreibgeschützt sind, wenn sie nicht schreibgeschützt sind werden die Links der neuen Teile auf die neue Baugruppe bezogen, aber die alten Teile verweisen dann auch auf die neue Baugruppe 

Irgendwie müsste man, wie im Design Manager alles auf einmal kopieren.. nur weis ich nicht wie 

Das ist mein Code den ich bis jetzt habe:

Function CopyRHTemplate(TemplatePath As String, TemplateName As String, NewPath As String, NewName As String)
        MyRevManDoc = MyRevMan.Open(TemplatePath & TemplateName & ".asm")
        MyRevManDoc.Copy(NewPath & NewName & ".asm")
        MyRevManDoc.Close()
        MyRevManDoc = MyRevMan.Open(NewPath & NewName & ".asm")
        Dim copiedFiles As New Collections.Specialized.StringDictionary()
        copiedFiles.Add(NewPath & NewName & ".asm", "")
        CopyLinkedDocuments(MyRevManDoc, NewPath, copiedFiles)
        MyRevManDoc.SaveAllLinks()
End Function

Sub CopyLinkedDocuments(ByVal objDoc As RevisionManager.Document, ByVal strDstPath As String, ByRef copiedFiles As Collections.Specialized.StringDictionary)
        Dim objLinks As RevisionManager.LinkedDocuments = objDoc.LinkedDocuments
        If objLinks IsNot Nothing Then
            Dim objLinkInfo As FileInfo
            Dim strExt As String
            For Each objLinkedDoc As RevisionManager.Document In objLinks
                objLinkInfo = New FileInfo(objLinkedDoc.FullName)
                strExt = objLinkInfo.Extension.ToLower()
                    If strExt = ".asm" OrElse strExt = ".par" OrElse strExt = ".dft" OrElse strExt = ".psm" Then
                        'Alle Linked Files die schon kopiert wurden, ausschliessen (sind in "copiedFiles" eingetragen)
                        If Not copiedFiles.ContainsKey(objLinkInfo.FullName) Then
                            copiedFiles.Add(objLinkInfo.FullName, "")
                            'Jedes Unterobjekt kopieren
                            CopyLinkedDocuments(objLinkedDoc, SubPath, copiedFiles)
                            'eine Kopie erstellen
                            objLinkedDoc.Copy(IO.Path.Combine(SubPath, objLinkInfo.Name))
                        End If
                    Else
                        ' Do a simple file copy
                        copiedFiles.Add(objLinkInfo.FullName, "")
                        objLinkInfo.CopyTo(IO.Path.Combine(SubPath, objLinkInfo.Name), True)
                    End If
            Next
        End If
    End Sub

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Arne Peters
Ehrenmitglied V.I.P. h.c.
CAD Dokumentation / Training / Programmierung / Datenbanken


Sehen Sie sich das Profil von Arne Peters an!   Senden Sie eine Private Message an Arne Peters  Schreiben Sie einen Gästebucheintrag für Arne Peters

Beiträge: 5715
Registriert: 24.05.2002

Solid Edge Seminarunterlagen
Training, Beratung, Programmierung

erstellt am: 04. Aug. 2017 08:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andy313 10 Unities + Antwort hilfreich

Im Zweifelsfalle könntest Du eine Liste mit alten und neuen Dateinamen mitschreiben und am Ende jedes Dokument einzeln bearbeiten.
Ich hab das mal zum Umbenennen gemacht. Aber in VB6.
Die Dokumente hab ich vorher einfach über das FileSystemObject umbenannt.

1. Alle Dateien kopieren und Liste füllen mit altem und neuem Namen inkl. Pfad.
2. Jedes Dokument mit RevisionManager öffnen und Links ersetzen.

Wenn man jedes Dokument einzeln abarbeitet, spart es den rekrusiven Aufruf. Bei der rekrusiven Suche muss man je nach Typ des Links etwas aufpassen, dass man nicht in einer Endlosschleife landet. Zum Beispiel bei XpresRoute.

------------------
Arne

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andy313
Mitglied
Konstruktöör


Sehen Sie sich das Profil von Andy313 an!   Senden Sie eine Private Message an Andy313  Schreiben Sie einen Gästebucheintrag für Andy313

Beiträge: 181
Registriert: 10.02.2005

Solid Edge ST9 mit Revision Manager
Windows 7 64bit

erstellt am: 04. Aug. 2017 08:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Arne
Danke für die schnelle Antwort =)
Danach habe ich auch schon gesucht; bei jedem Element den Link einzeln bearbeiten.

Auch so.. jetzt wo du eine Liste der Files erwähnst:
dann währe das wohl mit der "RedefineLinks Method" zu bewerkstelligen.
Ich habe immer bei "Document" und nicht bei "Application" gesucht.

Supper.. ich werde das mal ausprobieren und mich danach nochmal Melden 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Arne Peters
Ehrenmitglied V.I.P. h.c.
CAD Dokumentation / Training / Programmierung / Datenbanken


Sehen Sie sich das Profil von Arne Peters an!   Senden Sie eine Private Message an Arne Peters  Schreiben Sie einen Gästebucheintrag für Arne Peters

Beiträge: 5715
Registriert: 24.05.2002

Solid Edge Seminarunterlagen
Training, Beratung, Programmierung

erstellt am: 04. Aug. 2017 09:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andy313 10 Unities + Antwort hilfreich

Probier mal.
Wie gesagt, ich hab die Dokumente einfach so kopiert/umbenannt und mich hinterher bei jedem einzeln um die Verknüpfungen gekümmert.
Bei mir ginge s darum, Dateien, die von extern kamen, mit einer eindeutigen Nr am Dokumentnamen zu versehen.
Danach stimmt kein einziger Link mehr.
Die Methode arbeitet gut und schnell.

Hab nochmal nachgesehen.
Ich hatte es so gemacht:

1. Jedes Dokument einzeln im Revision Manager öffnen.
2. LinkedDocuments abarbeiten

------------------
Arne

[Diese Nachricht wurde von Arne Peters am 04. Aug. 2017 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andy313
Mitglied
Konstruktöör


Sehen Sie sich das Profil von Andy313 an!   Senden Sie eine Private Message an Andy313  Schreiben Sie einen Gästebucheintrag für Andy313

Beiträge: 181
Registriert: 10.02.2005

Solid Edge ST9 mit Revision Manager
Windows 7 64bit

erstellt am: 04. Aug. 2017 15:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich hatte nicht viel Zeit heute, das auszuprobiern..
Aber ich komme auf keinen grünen Zweig heute.. könnte sein, weil heute Freitag ist  

Könntest du mir ein Beispiel aus deinem Code geben, wie du das gelöst hast?
Nur den Teil mit den Links, das kopieren war natürlich kein Problem, das geht sogar am Freitag  

PS: Schönes Wochenende   

[Diese Nachricht wurde von Andy313 am 04. Aug. 2017 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Arne Peters
Ehrenmitglied V.I.P. h.c.
CAD Dokumentation / Training / Programmierung / Datenbanken


Sehen Sie sich das Profil von Arne Peters an!   Senden Sie eine Private Message an Arne Peters  Schreiben Sie einen Gästebucheintrag für Arne Peters

Beiträge: 5715
Registriert: 24.05.2002

Solid Edge Seminarunterlagen
Training, Beratung, Programmierung

erstellt am: 05. Aug. 2017 13:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andy313 10 Unities + Antwort hilfreich

*********************
Anmerkungen 1
*********************


Ich weiß nicht , ob man sich da so einfach in den Code anderer reinarbeitet.
Ich hab ja auch meinen eigenen Stil.

Baugruppenfamilien können Probleme machen wenn der Name deas Familienmitglieds kommt "Dateiname.asm!Member"
Prüfe, welche Links du verarbeiten musst.

Ich hoffe ich hab alles rausgeschmissen, was von der Funktion zum Füllen mit kopiert was, aber nicht gebrau cht wird.

Das Füllen der Liste war etwas aufwendiger. Das Reparieren der Links ist einfach. In der Liste kommt nix doppelt vor.


*********************
Anmerkungen 2
*********************

o_rendocs ist public und schon gefüllt.
o_rendoc ist eine einfache VB6 Klasse, wo ich die Namen und Aktionen speichere. Statt Tabelle oder Array.
Da schreibe ich auch rein, ob ich ein Dokument schon bearbeitet habe. Dann muss ich es nicht nochmal anfassen, falls es erneut auftaucht. 


Da ist Folgendes drin.
- Oldname
- Newname
- toRename As Boolean
- Message As String
- document As Object
- isRenamed As Boolean
- isReplaced As Boolean

*******************

' Wieder alle Dokumente auf und Links reparieren.
' Funktion ist weitgehend wie F_FillList. Damit fülle ich vorher die Liste der Dokumente


Function f_replaceScan(o_doc As Object, logfile) ' Logfile ist nur für das Protokoll

Dim o_LinkedDocs As LinkedDocuments
Dim o_LinkedDoc As Document
Dim o_rendoc As MyDoc
Dim m_filename As String
Dim m_linkedFilename As String
Dim i As Integer

m_filename = f_Filename(o_doc.FullName)

    Set o_LinkedDocs = o_doc.LinkedDocuments(seLinkTypeAll)
    If o_LinkedDocs.Count > 0 Then
        For Each o_LinkedDoc In o_LinkedDocs
            m_linkedFilename = f_Filename(o_LinkedDoc.FullName)
            For i = 1 To o_rendocs.Count
                Set o_rendoc = o_rendocs(i)
                    If o_rendoc.toReplace Then
                        If o_rendoc.Oldname = m_linkedFilename Then
                            o_LinkedDoc.Replace o_rendoc.Newname
                            Print #logfile, "Replace;" & m_filename & ";;" & m_linkedFilename & ";" & o_rendoc.Newname
                        End If
                    End If
            Next i
        Next
    End If

ende:
   
Set o_rendoc = Nothing
Set o_LinkedDocs = Nothing
Set o_LinkedDoc = Nothing

End Function

------------------
Arne

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andy313
Mitglied
Konstruktöör


Sehen Sie sich das Profil von Andy313 an!   Senden Sie eine Private Message an Andy313  Schreiben Sie einen Gästebucheintrag für Andy313

Beiträge: 181
Registriert: 10.02.2005

Solid Edge ST9 mit Revision Manager
Windows 7 64bit

erstellt am: 07. Aug. 2017 08:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Besten Dank für dein ausführlichen Beitrag.
Ich habe es nun so gemacht wie du vorgeschlagen hast.
1) Alle Files kopiert mit IO.File.CopyTo
2) Eine Liste mit den alten Dateinamen und den neuen Dateinamen erstellt
3) Die Zusammenstellung im RevMan geöffnet
4) Jedes angehängte Teil ersetzt mit .Replace
5) Während des Ersetzten die Links jedes Teils durch die neue Baugruppe ersetzt

Komischerweise meldet er einen Fehler wenn ich die Links ersetzten will, das diese Eigenschaft schreibgeschützt ist. Aber er ersetzt es trotzdem. Daher habe diese ersetzten mit Try gemacht.

Mein Code sieht dann so aus:

NewFiles ist eine Liste der alten und neuen Dateinamen getrennt durch ";" (weil ich die Files während des Kopierens noch umbenenne)

        MyRevManDoc = MyRevMan.Open(NewPath & NewName & ".asm")

        For Each o_LinkedDoc In MyRevManDoc.LinkedDocuments(RevisionManager.LinkTypeConstants.seLinkTypeAll)
            For Each NewFile In NewFiles
                If Split(NewFile, ";")(0) = o_LinkedDoc.FullName Then
                    o_LinkedDoc.Replace(Split(NewFile, ";")(1))
                    For Each o_LinkedDocSub In o_LinkedDoc.LinkedDocuments(RevisionManager.LinkTypeConstants.seLinkTypeAll)
                        If Mid(o_LinkedDocSub.FullName, InStrRev(o_LinkedDocSub.FullName, "\") + 1) = TemplateName & ".asm" Then
                            Try
                                o_LinkedDocSub.Replace(MyRevManDoc.FullName)
                            Catch ex As Exception
                            End Try
                        End If
                    Next
                End If
            Next
        Next

Schönen Tag
Ü's sind unterwegs 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Arne Peters
Ehrenmitglied V.I.P. h.c.
CAD Dokumentation / Training / Programmierung / Datenbanken


Sehen Sie sich das Profil von Arne Peters an!   Senden Sie eine Private Message an Arne Peters  Schreiben Sie einen Gästebucheintrag für Arne Peters

Beiträge: 5715
Registriert: 24.05.2002

Solid Edge Seminarunterlagen
Training, Beratung, Programmierung

erstellt am: 07. Aug. 2017 09:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andy313 10 Unities + Antwort hilfreich

Super.
Und das ist nett, dass Du auch "o_" für Objekte nimmst.
Ich hab das mal so gelernt. Aber sonst steht überall "obj"

Ich hatte da mal was rekursives. Da ich aber die Liste mit allen Dateien hab, hab ich einfach jede einzeln aufgemacht, statt mich da durchzuhanglen. Soweit ich mich entsinne, ging das sogar schneller. Es wird kein Dokument doppelt angefasst, auch wenn es 100x verbaut ist.
Evtl kommt die Fehlermeldung bei mehrfach verbauten Dateien, wenn die noch offen sind. Da gibt es ja manchmal auch Timing-Probleme.

------------------
Arne

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Kricher
Mitglied
Entwickler


Sehen Sie sich das Profil von Kricher an!   Senden Sie eine Private Message an Kricher  Schreiben Sie einen Gästebucheintrag für Kricher

Beiträge: 248
Registriert: 10.09.2004

erstellt am: 07. Aug. 2017 10:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andy313 10 Unities + Antwort hilfreich

Hi Ihr,

funktioniert das eigentlich auch mit den CFG-Dateien von Baugruppen, wenn Ihr die nur auf Dateiebene kopiert?

Ich erzeuge die Kopien immer über den RVManager (DA):

int res = rvDoc.Copy(trgFile, Missing.Value, Missing.Value, Missing.Value);

Auf diese Weise muss ich mich nicht um die cfg-Dateien explizit kümmern, sofern dies überhaupt sonst funzt.

CU

Kricher

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Arne Peters
Ehrenmitglied V.I.P. h.c.
CAD Dokumentation / Training / Programmierung / Datenbanken


Sehen Sie sich das Profil von Arne Peters an!   Senden Sie eine Private Message an Arne Peters  Schreiben Sie einen Gästebucheintrag für Arne Peters

Beiträge: 5715
Registriert: 24.05.2002

Solid Edge Seminarunterlagen
Training, Beratung, Programmierung

erstellt am: 07. Aug. 2017 10:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andy313 10 Unities + Antwort hilfreich

Klar, die muss dann aber auch kopiert oder umbenannt werden.

------------------
Arne

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Kricher
Mitglied
Entwickler


Sehen Sie sich das Profil von Kricher an!   Senden Sie eine Private Message an Kricher  Schreiben Sie einen Gästebucheintrag für Kricher

Beiträge: 248
Registriert: 10.09.2004

erstellt am: 07. Aug. 2017 12:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andy313 10 Unities + Antwort hilfreich

Man lernt nie aus 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andy313
Mitglied
Konstruktöör


Sehen Sie sich das Profil von Andy313 an!   Senden Sie eine Private Message an Andy313  Schreiben Sie einen Gästebucheintrag für Andy313

Beiträge: 181
Registriert: 10.02.2005

Solid Edge ST9 mit Revision Manager
Windows 7 64bit

erstellt am: 07. Aug. 2017 14:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Um die cfg Dateien habe ich mich jetzt noch nie gekümmert.. die erstellt Solid Edge ja wider.
Oder steht da etwas drin was nur dort steht? Sprich: gehen Informationen verloren?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Arne Peters
Ehrenmitglied V.I.P. h.c.
CAD Dokumentation / Training / Programmierung / Datenbanken


Sehen Sie sich das Profil von Arne Peters an!   Senden Sie eine Private Message an Arne Peters  Schreiben Sie einen Gästebucheintrag für Arne Peters

Beiträge: 5715
Registriert: 24.05.2002

Solid Edge Seminarunterlagen
Training, Beratung, Programmierung

erstellt am: 07. Aug. 2017 14:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andy313 10 Unities + Antwort hilfreich

Anzeigekonfiguratione.
Explosionen
..

Wenn Du mit dem FileSystemObjebject kopierst, sind es ja nur 3 Zeilen. Bei ASM die Datei mit .CFG auch kopieren.

------------------
Arne

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2017 CAD.de