Cant sucessfully implement the IFailuresPreprocessor interface

hello @ramoon.bandeira
you are missing the instance of the class on the method (self), suddenly a parameter is missing from the PreprocessFailures fonction (method)

2 examples of classes with a double wall creation

class DuplicateMarkSwallower(IFailuresPreprocessor):
	def PreprocessFailures(self, a):
		failures = a.GetFailureMessages()
		for  f in failures:
			id = f.GetFailureDefinitionId()
			if BuiltInFailures.OverlapFailures.WallsOverlap == id:
				a.DeleteWarning(f)	
		return FailureProcessingResult.Continue
		
class CreateFailureAdvancedHandler(IFailuresPreprocessor):
	def PreprocessFailures(self, failuresAccessor):
		failMessages = failuresAccessor.GetFailureMessages()
		if failMessages.Count == 0:
			return FailureProcessingResult.Continue
		transName = failuresAccessor.GetTransactionName()
		if transName == "Wall Create Operation":
			if failuresAccessor.GetSeverity() == FailureSeverity.Warning:
				for currentMessage in failMessages:
					failuresAccessor.DeleteWarning(currentMessage)	
		return FailureProcessingResult.Continue

level = UnwrapElement(IN[1])	
TransactionManager.Instance.ForceCloseTransaction()
with Transaction(doc) as t:
	t.Start("Wall Create Operation")
	failureOptions = t.GetFailureHandlingOptions()
	failureOptions.SetFailuresPreprocessor(CreateFailureAdvancedHandler())
	#OR exemple with GetFailureDefinitionId()
	#failureOptions.SetFailuresPreprocessor(DuplicateMarkSwallower())
	t.SetFailureHandlingOptions(failureOptions)
	#
	#
	line = Line.CreateBound(XYZ.Zero, 10 * XYZ.BasisX)
	for i in range(0,2):
		wall = Wall.Create(doc, line, level.Id, False)
	#
	#
	t.Commit()
4 Likes