Yes no Parameter in Schedule filter

@k.khisamova
here is the fixed code

[image]

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 *

toDoList = lambda x : x if hasattr(x, '__iter__') else [x]
lstView = toDoList(UnwrapElement(IN[0]))
nameParaFilter = IN[1]
valueBool = IN[2]
	
def findFilter(paraName, scheduleDef):
	filterCount = scheduleDef.GetFilterCount()
	for idx in range(filterCount):
		schedFilter = scheduleDef.GetFilter(idx)
		field_Id = schedFilter.FieldId 
		field = scheduleDef.GetField(field_Id)
		if field.GetName() == paraName:
			return idx, schedFilter		
	return None, None	
	
def createFilter(paraName, scheduleDef):
	#sub foncion
	def checkField(fieldToAdd):
		fieldIds = scheduleDef.GetFieldOrder()	
		for fieldId in fieldIds:
			if scheduleDef.GetField(fieldId).HasSchedulableField:
				if scheduleDef.GetField(fieldId).GetSchedulableField() == fieldToAdd:
					return fieldId
		return None		
	#main function			
	fieldToAdd = None
	#get GetSchedulableField by Name
	lstAvailbleField = scheduleDef.GetSchedulableFields()
	for schField in lstAvailbleField:
		if schField.GetName(doc) == paraName:
			fieldToAdd = schField
			break
	#check if field is already added and find the corresponding fieldId
	fieldId = checkField(fieldToAdd)
	if fieldId is not None:
		return fieldId
	else:	
		#if not found add the corresponding field
		scheduleDef.AddField(ScheduleFieldType.Instance, fieldToAdd.ParameterId )
		doc.Regenerate()
		#then return the corresponding fieldId
		return checkField(fieldToAdd)

TransactionManager.Instance.EnsureInTransaction(doc)
for v in lstView:
	if v.ViewType == ViewType.Schedule:
		scheduleDef = v.Definition 
		idx, schedFilter = findFilter(nameParaFilter, scheduleDef)
		if idx is not None:
			if valueBool:
				schedFilter.SetValue(1)
			else:
				schedFilter.SetValue(0)
			scheduleDef.SetFilter(idx, schedFilter)
		else:
			fieldId = createFilter(nameParaFilter, scheduleDef)
			if valueBool:
				newSchFilter = ScheduleFilter(fieldId, ScheduleFilterType.Equal, 1)
			else:
				newSchFilter = ScheduleFilter(fieldId, ScheduleFilterType.Equal, 0)		
			scheduleDef.AddFilter(newSchFilter)		
			
TransactionManager.Instance.TransactionTaskDone()		
	
OUT = lstView
1 Like