Modify Schedule Definition

Hello @hrasmussen

try this method (find the corresponding field by Name in list of Schedulable Field)

import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

# Import DocumentManager and TransactionManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument

# Import RevitAPI
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *


def findFieldByName(scheduleDef, fieldName):
	fieldIds = scheduleDef.GetFieldOrder()  
	for fieldId in fieldIds:
		if scheduleDef.GetField(fieldId).GetSchedulableField().GetName(doc) == fieldName:
			return fieldId
	return None  

templateSchedule1 =  UnwrapElement(IN[0])
scheduleToSet =  UnwrapElement(IN[1])


TransactionManager.Instance.EnsureInTransaction(doc)
#get Name of ScheduleField from Template
templ_scheduleDef1 = templateSchedule1.Definition
fieldId1 = templ_scheduleDef1.GetFieldOrder()[0]
scheduleFieldTName1 = templ_scheduleDef1.GetField(fieldId1).GetSchedulableField().GetName(doc)

#from Schedule Instance create filter
scheduleDefToSet = scheduleToSet.Definition
searchFieldId = findFieldByName(scheduleDefToSet, scheduleFieldTName1)
newSchFilter1 = ScheduleFilter(searchFieldId, ScheduleFilterType.Equal, "Test")
scheduleDefToSet.AddFilter(newSchFilter1)
TransactionManager.Instance.TransactionTaskDone()

OUT = scheduleDefToSet

2 Likes