Message 1 of 6
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hello
I'm using this rule and i found there is some point need to be fixed
this is my rule
Option Explicit On
Class ThisRule
Dim As_count As Integer = 0
Dim Pr_count As Integer = 0
Dim Wl_count As Integer = 0
Dim St_count As Integer = 0
Dim Pt_count As Integer = 0
Dim Rf_count As Integer = 0
Sub Main
ThisApplication.CommandManager.ControlDefinitions.Item("AppUpdateMassPropertiesCmd").Execute
Dim oADoc As AssemblyDocument = ThisDoc.Document
Dim oBOM As BOM = oADoc.ComponentDefinition.BOM
'BOM Export 후 xml파일과 아래 경로를 일치할것
oBOM.ImportBOMCustomization("D:\UC BOM.xml")
oBOM.StructuredViewEnabled = True
oBOM.StructuredViewFirstLevelOnly = False
oBOM.SetPartNumberMergeSettings(False)
Dim oBOMView As BOMView = oBOM.BOMViews.Item("구조적")
oBOMView.Sort("질량", False, "체적", False)
oBOMView.Renumber()
WritePartMumb(oBOMView.BOMRows)
oBOMView.Sort("Part Number", True)
oBOMView.Renumber()
End Sub
Private Sub WritePartMumb(ByVal oBOMRows As BOMRowsEnumerator)
For Each oRow As BOMRow In oBOMRows
If Not IsStandardContentCenterRow(oRow) Then
Dim partnumber As String = PartNumberGenerator(oRow)
If partnumber <> "" Then
oRow.ComponentDefinitions(1).Document.PropertySets(3)(2).Value = partnumber
End If
End If
If oRow.ChildRows IsNot Nothing Then
WritePartMumb(oRow.ChildRows)
End If
Next
End Sub
Private Function PartNumberGenerator(ByVal oRow As BOMRow) As String
Select Case oRow.BOMStructure
Case BOMStructureEnum.kNormalBOMStructure
Dim rowDocType = GetDocumentType(oRow)
If rowDocType = DocumentTypeEnum.kAssemblyDocumentObject Then
As_count = As_count + 1
Return "As-" & As_count.ToString("000")
ElseIf rowDocType = DocumentTypeEnum.kPartDocumentObject Then
Pr_count = Pr_count + 1
Return "Pr-" & Pr_count.ToString("000")
Else
Return ""
End If
Case BOMStructureEnum.kInseparableBOMStructure
Wl_count = Wl_count + 1
Return "Wl-" & Wl_count.ToString("000")
Case BOMStructureEnum.kPurchasedBOMStructure
St_count = St_count + 1
Return "St-" & St_count.ToString("000")
Case BOMStructureEnum.kPhantomBOMStructure
Pt_count = Pt_count + 1
Return "Pt-" & Pt_count.ToString("000")
Case BOMStructureEnum.kReferenceBOMStructure
Rf_count = Rf_count + 1
Return "Rf-" & Rf_count.ToString("000")
End Select
Return "" ' default case if we can't get a part number
End Function
Private Function IsStandardContentCenterRow(ByVal oRow As BOMRow) As Boolean
For Each compDef As ComponentDefinition In oRow.ComponentDefinitions
Dim partCompDef As PartComponentDefinition = TryCast(compDef, PartComponentDefinition)
If partCompDef IsNot Nothing AndAlso partCompDef.IsContentMember Then
Return True
End If
Next
Return False
End Function
Private Function GetDocumentType(ByVal oRow As BOMRow) As DocumentTypeEnum
For Each compDef As ComponentDefinition In oRow.ComponentDefinitions
Dim partCompDef As PartComponentDefinition = TryCast(compDef, PartComponentDefinition)
If partCompDef IsNot Nothing Then
Return DocumentTypeEnum.kPartDocumentObject
End If
Dim assemCompDef As AssemblyComponentDefinition = TryCast(compDef, AssemblyComponentDefinition)
If assemCompDef IsNot Nothing Then
Return DocumentTypeEnum.kAssemblyDocumentObject
End If
Next
Return DocumentTypeEnum.kUnknownDocumentObject
End Function
End Class
other function work well but it's not working if it is Phantom or Reference structure like this
Could you help me please?
Solved! Go to Solution.