@isocam the script is not running for an unsaved file as you are trying to access datafile from None. Since the file is not saved documentToSaveAs.dataFile returns None.
Here is the modified script which will work for both saved and unsaved files.
import adsk.core, adsk.fusion, adsk.cam, traceback
def run(context):
ui = adsk.core.UserInterface.cast(None)
try:
app :adsk.fusion.Application = adsk.core.Application.get()
ui = app.userInterface
PartNumber = "12345"
PartDescription = "FUSION 360 TEST"
rootComponent = app.activeProduct.rootComponent
rootComponent.description = PartDescription
SaveDocument(PartNumber)
except:
if ui:
ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
# ------------------------------------------------------------------------------------
def SaveDocument(PartNumber):
ui = None
try:
app = adsk.core.Application.get()
ui = app.userInterface
destinationFolderName = "Fusion 360 Test Folder"
documentToSaveAs = app.activeDocument
# this code is added
# ----------------------------------------
if documentToSaveAs.dataFile is None:
dataProject = app.data.activeProject
else:
dataProject = documentToSaveAs.dataFile.parentProject
# ----------------------------------------
destinationFolder = findFolderInProject(dataProject, destinationFolderName)
if destinationFolder is not None:
documentToSaveAs.saveAs(PartNumber, destinationFolder, "", "#tag")
else:
ui.messageBox("Destination {} folder not found!".format(destinationFolderName))
except:
if ui:
ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
# ------------------------------------------------------------------------------------
def findFolderInProject(dataProject, dataFolderName: str):
return findFolderSubfolders(dataProject.rootFolder, dataFolderName)
# ------------------------------------------------------------------------------------
def findFolderSubfolders(dataFolder, dataFolderName: str):
for folder in dataFolder.dataFolders:
if folder.name == dataFolderName:
return folder
else:
return findFolderSubfolders(folder, dataFolderName)
return None
# ------------------------------------------------------------------------------------
Hope it helps.
------------------------------------------------------------------------------------------------------------------------------
If my reply was helpful, please click the "Accept as Solution" button. It helps others get the answer quickly! A "Like" is always welcomed.
Rushikesh Kadam
Senior QA Engineer
Quality Assurance
Autodesk, Inc.