AnsweredAssumed Answered

DM Api : get list of components in assembly (

Question asked by Jerome De San Nicolás on Jun 26, 2019
Latest reply on Jun 26, 2019 by Jerome De San Nicolás

Hi all,

I have un little problem with the document manager api : GetExternalFeatureReferences2


let me explain :

I want to get the BOM for an assembly in several configuration, with component name and referenced configuration.


For a simple exemple I have done an assembly with 2 configs and 2 parts (with 2 configs each) it's look like this :


Assy config 1 :


                     Part 1    -    Config 1

                     Part 2    -    Config 1


Assy config 2 :


                     Part 1    -   Config 2

                     Part 2    -   Config 2

                     Part 2    -   Config 2 (second occurrence of part 2 is suppressed in Assy config 1)



And that's how my code works :


the "main" sub ; (how can I format my code in a forum post?)



Sub GetRefWConfigs()


Dim AsmName As String = IO.Path.GetFileName(TBox_Asm.Text) 'I get the assy path from an userform

swDoc = swDocMgr.GetDocument(TBox_Asm.Text, 2, False, OpenErr) 'get the assy doc
configMgr = swDoc.ConfigurationManager

Dim vConfAsm As Object
Dim conf As Object
vConfAsm = configMgr.GetConfigurationNames2(SwConfsResult) 'get all config

For Each conf In vConfAsm 'loop on all assy configurations

DTGView_Tbl.Rows.Add({True, AsmName, IO.Path.GetDirectoryName(TBox_Asm.Text),
AsmName, AsmName, conf, "", 0}) 'puttin' the result in a datagridview
TraverseCpt(swDoc, 1, conf) 'call the components



End Sub




the "Traverse component" sub :


Sub TraverseCpt(ByVal swDoc As SolidWorks.Interop.swdocumentmgr.SwDMDocument18, ByVal Level As Integer, ByVal AssyConfig As String)

Dim dmSearchOpt As SolidWorks.Interop.swdocumentmgr.SwDMSearchOption
Dim ExtRefs() As String
Dim ExtRefsconfig() As String
Dim dmExtRefOption As SolidWorks.Interop.swdocumentmgr.SwDMExternalReferenceOption2
Dim numExtRefs As Integer

'setting up search options maybe this is not good
dmExtRefOption = swDocMgr.GetExternalReferenceOptionObject2
dmSearchOpt = swDocMgr.GetSearchOptionObject()
dmSearchOpt.SearchFilters = (SolidWorks.Interop.swdocumentmgr.SwDmSearchFilters.SwDmSearchExternalReference)

dmExtRefOption.Configuration = AssyConfig 'assembly config
dmExtRefOption.NeedSuppress = False
dmExtRefOption.SearchOption = dmSearchOpt
numExtRefs = swDoc.GetExternalFeatureReferences2(dmExtRefOption)
ExtRefs = dmExtRefOption.ExternalReferences
ExtRefsconfig = dmExtRefOption.ReferencedConfigurations

For i = 0 To ExtRefs.Length - 1 'loop on component

DTGView_Tbl.Rows.Add({True, IO.Path.GetFileName(ExtRefs(i)),
IO.Path.GetDirectoryName(ExtRefs(i)), IO.Path.GetFileName(ExtRefs(i)),
IO.Path.GetFileName(ExtRefs(i)), ExtRefsconfig(i), "", 0})


dmSearchOpt = Nothing
dmExtRefOption = Nothing
ExtRefs = Nothing

End Sub



And that's what I got at the end (I put the datas in a datagridview) :



the components loop seems only to take un account the last active configuration


How can I use GetExternalFeatureReferences2 with assembly configuration (or tell GetDocument to get a specific config??) 


Do you guys have an idea ?


and thank to all how have read all that !