Community
안녕하세요
현재 아래의 규칙을 사용 중이며, 일부 내용을 수정하고 싶습니다.
제 규칙은 다음과 같습니다.
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
다른 기능은 잘 작동하지만, Phantom 또는 Reference structure(참조 구조)에서는 그렇지 않습니다.
도움 주시기 바랍니다.
가능합니다. 다만, Bom뷰에서 Sub routine argument로 이동해야 합니다.
WritePartMumb(oModelBOMView.BOMRows)
문제 해결이 되었다면 솔루션으로 채택 부탁드립니다.
또는 도움이 되었다면 좋아요를 눌러 주세요.
Regards
Alan
답변 제공: @A.Acheson
Can't find what you're looking for? Ask the community or share your knowledge.