Could you help me to find bug from rule my assigning part number
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hello
I have rule assigning part number based on BOM stucture
This is
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
Dim oModelBOMView As BOMView = oBOM.BOMViews.Item(1)
WritePartMumb(oModelBOMView.BOMRows)
'BOM Export 후 xml파일과 아래 경로를 일치할것
oBOM.ImportBOMCustomization("D:\STCRECH.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
Basic structure is '00-000'
it start from Assemblydocument
Following BOM in inventor
Rule for prefix
Normal - two type (As for assembly, Pr for part)
Inseparable - Wl
Purchased - St
Phantom - Pt
Reference - Rf
(Standard product is exception,No changing Part number)
Rule for suffix
001
002
003
004...
this sequence is ascending order of mass
as a exception if it has same mass by missing selecting material or something, ascending order of volume is okay
it should be different according to the prefix
for example Part number
As-001 (assembly and first heavy one)
As-002(assembly and second heavy one)
Pr-001(Part and first heavy one)
Pr-002(Part and second heavy one)
Wl-001(Welding and first heavy one)
But it ignore sequence when i play rule
For example I sort it by part number is show some of part number is ignored
it should be start from 001 per each of prefix
could you help me?