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

@philippe.lagrue

I managed to change the names in the iAssembly by accessing the factory document of the iAssembly and changing the occurrence name in there. See if this works for you:

Class ThisRule
	Dim name As String = "Part"
	Dim num As Integer = 1
	Dim existingOccs As ComponentOccurrencesEnumerator
	Sub Main
		iLogicvb.UpdateWhenDone = True
		Dim def As AssemblyComponentDefinition = ThisDoc.Document.ComponentDefinition
		existingOccs = def.Occurrences.AllReferencedOccurrences(def)
		For Each oOcc As ComponentOccurrence In def.Occurrences
			TraverseAndSetNames(oOcc)
		Next
	End Sub
	Sub RenameExisting(oName As String, Optional eOccs As ComponentOccurrencesEnumerator = Nothing)
		Dim existingOccWithName As ComponentOccurrence
		If eOccs Is Nothing
			existingOccWithName = existingOccs.OfType(Of ComponentOccurrence).FirstOrDefault(Function(x) x.Name = oName)
		Else
			existingOccWithName = eOccs.OfType(Of ComponentOccurrence).FirstOrDefault(Function(x) x.Name = oName)
		End If
		If existingOccWithName IsNot Nothing
			existingOccWithName.Name = oName & "_old"
		End If
	End Sub
	Sub RenameOcc(oOcc As ComponentOccurrence)
		oOcc.Name = name & num
		num += 1
	End Sub
	Sub TraverseAndSetNames(oOcc As ComponentOccurrence, Optional eOccs As ComponentOccurrencesEnumerator = Nothing)
		RenameExisting(name & num, eOccs)
		RenameOcc(oOcc)
		If oOcc.DefinitionDocumentType = DocumentTypeEnum.kAssemblyDocumentObject
			If oOcc.IsiAssemblyMember
				Dim iAssyMember As iAssemblyMember = oOcc.Definition.iAssemblyMember
				Dim def As AssemblyComponentDefinition = iAssyMember.ReferencedDocumentDescriptor.ReferencedDocument.ComponentDefinition
				For Each sOcc As ComponentOccurrence In def.Occurrences
					TraverseAndSetNames(sOcc, def.Occurrences.AllReferencedOccurrences(def))
				Next
				iAssyMember.ReferencedDocumentDescriptor.ReferencedDocument.Save2(True)
			Else
				For Each sOcc As ComponentOccurrence In oOcc.SubOccurrences
					TraverseAndSetNames(sOcc)
				Next
			End If
		End If
	End Sub
End Class