Announcements
Attention for Customers without Multi-Factor Authentication or Single Sign-On - OTP Verification rolls out April 2025. Read all about it here.
ssiem12
426 Views, 4 Replies

Can I change all of Filename as Part number throughout all of class

Hello

I'm using this rule to change Partnumber following rules

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

I found i use too much time to find what part has part number i seek when I draft it respectively

So If I can change filename to part number I can search on search engine easily

 

it seems have a trouble with files have same part number

can it be solved by adding number like (1), (2), (3)... on filename if it has file with same name on storage location

 

It will be very thanksful if you help me