AnsweredAssumed Answered

ISWDmDocument13::GetAllExternalReferences4 - brokenRefVar statuses always swDmReferenceStatusNotBroken?

Question asked by Isaac Ross on Jan 30, 2017

I'm using the SolidWorks Document Manager 2017 API to check drawings for broken external references, and I think I'm either misunderstanding something or have encountered a bug. Even when I permanently delete a part referenced in a drawing, I'm still getting swDmReferenceStatusNotBroken. Here's some example code from a small test project (just create a new VB Windows Forms project in VS2015, add a reference to SwDocumentMgr, and add a button to the form if you want to try to reproduce this):

Imports SwDocumentMgr

Public Class Form1
    Dim licenseKey As String = "your_license_key"
    Dim dmClassFact As New SwDMClassFactory
    Dim dmDocMgr As SwDMApplication4 = dmClassFact.GetApplication(licenseKey)
    Dim searchOption As SwDMSearchOption = dmDocMgr.GetSearchOptionObject()

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim fbrowser As New OpenFileDialog
        If fbrowser.ShowDialog = DialogResult.OK Then
            MessageBox.Show("Finished checking references", fbrowser.FileName)
        End If
    End Sub

    Private Sub checkSlddrwXref(fileName As String)
        Dim brokenrefs() As SwDmReferenceStatus = Nothing
        Dim isVirtual() As Boolean = Nothing
        Dim timeStamps() As Integer = Nothing

        Dim status As SwDmDocumentOpenError

        Dim doc As SwDMDocument18 = dmDocMgr.GetDocument(fileName, SwDmDocumentType.swDmDocumentDrawing, True, status)

        If Not (doc Is Nothing) Then
            Dim refs As String() = doc.GetAllExternalReferences4(searchOption, brokenrefs, isVirtual, timeStamps)

            For i As Integer = 0 To UBound(brokenrefs)
                Dim msg As String = "Path: " & refs(i) & Environment.NewLine
                Select Case brokenrefs(i)
                    Case SwDmReferenceStatus.swDmReferenceStatusBroken
                        msg &= "Reference status: swDmReferenceStatusBroken" & Environment.NewLine
                    Case SwDmReferenceStatus.swDmReferenceStatusNotBroken
                        msg &= "Reference status: swDmReferenceStatusNotBroken" & Environment.NewLine
                    Case SwDmReferenceStatus.swDmReferenceStatusUnknown
                        msg &= "Reference status: swDmReferenceStatusUnknown" & Environment.NewLine
                End Select

                msg &= "File exists: " & New IO.FileInfo(refs(i)).Exists.ToString

                MessageBox.Show(msg, fileName)
        End If

    End Sub
End Class

As I said before, even when I intentionally delete a referenced part, it always returns not broken; despite the fact that SolidWorks, SolidWorks Explorer, and eDrawings all show that the references are broken. Is this a bug, or am I simply misunderstanding how this is supposed to behave?


Thanks for your help.