IFailuresProcessor Interface |
To create your own UI or fully automated tool to process Revit Failures, derive a class from this interface.
Namespace: Autodesk.Revit.DBAssembly: RevitAPI (in RevitAPI.dll) Version: 25.0.0.0 (25.0.0.0)
Syntaxpublic interface IFailuresProcessor
Public Interface IFailuresProcessor
public interface class IFailuresProcessor
type IFailuresProcessor = interface end
The IFailuresProcessor type exposes the following members.
Methods | Name | Description |
---|
 | Dismiss |
This method is being called in case of exception or document destruction to dismiss any possible pending failure UI that may
have left on the screen
|
 | ProcessFailures |
Method that Revit will invoke to process failures at the end of transaction.
|
Top
Remarks
To override Revit default Failures Processing UI, instantiate your own processor derived from this interface
and register it in Revit application.
Example[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
public class MyFailuresUI : IExternalApplication
{
static AddInId m_appId = new AddInId(new Guid("9F179363-B349-4541-823F-A2DDB2B86AF3"));
public Result OnStartup(UIControlledApplication application)
{
IFailuresProcessor myFailUI = new FailUI();
Autodesk.Revit.ApplicationServices.Application.RegisterFailuresProcessor(myFailUI);
return Result.Succeeded;
}
public Result OnShutdown(UIControlledApplication application)
{
return Result.Succeeded;
}
public class FailUI : IFailuresProcessor
{
public void Dismiss(Document document)
{
}
public FailureProcessingResult ProcessFailures(FailuresAccessor failuresAccessor)
{
IList<FailureResolutionType> resolutionTypeList = new List<FailureResolutionType>();
IList<FailureMessageAccessor> failList = new List<FailureMessageAccessor>();
failList = failuresAccessor.GetFailureMessages();
string errorString = "";
bool hasFailures = false;
foreach (FailureMessageAccessor failure in failList)
{
resolutionTypeList = failuresAccessor.GetAttemptedResolutionTypes(failure);
if (resolutionTypeList.Count >= 3)
{
TaskDialog.Show("Error", "Cannot resolve failures - transaction will be rolled back.");
return FailureProcessingResult.ProceedWithRollBack;
}
errorString += "IDs ";
foreach (ElementId id in failure.GetFailingElementIds())
{
errorString += id.ToString() + ", ";
hasFailures = true;
}
errorString += "\nWill be deleted because: " + failure.GetDescriptionText() + "\n";
failuresAccessor.DeleteElements(failure.GetFailingElementIds() as IList<ElementId>);
}
if (hasFailures)
{
TaskDialog.Show("Error", errorString);
return FailureProcessingResult.ProceedWithCommit;
}
return FailureProcessingResult.Continue;
}
}
}
<Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)> _
Public Class MyFailuresUI
Implements IExternalApplication
Shared m_appId As New AddInId(New Guid("9F179363-B349-4541-823F-A2DDB2B86AF3"))
Public Function OnStartup(application As UIControlledApplication) As Autodesk.Revit.UI.Result Implements IExternalApplication.OnStartup
Dim myFailUI As IFailuresProcessor = New FailUI()
Return Result.Succeeded
End Function
Public Function OnShutdown(application As UIControlledApplication) As Autodesk.Revit.UI.Result Implements IExternalApplication.OnShutdown
Return Result.Succeeded
End Function
Public Class FailUI
Implements IFailuresProcessor
Public Sub Dismiss(document As Document) Implements IFailuresProcessor.Dismiss
End Sub
Public Function ProcessFailures(failuresAccessor As FailuresAccessor) As FailureProcessingResult Implements IFailuresProcessor.ProcessFailures
Dim resolutionTypeList As IList(Of FailureResolutionType) = New List(Of FailureResolutionType)()
Dim failList As IList(Of FailureMessageAccessor) = New List(Of FailureMessageAccessor)()
failList = failuresAccessor.GetFailureMessages()
Dim errorString As String = ""
Dim hasFailures As Boolean = False
For Each failure As FailureMessageAccessor In failList
resolutionTypeList = failuresAccessor.GetAttemptedResolutionTypes(failure)
If resolutionTypeList.Count >= 3 Then
TaskDialog.Show("Error", "Cannot resolve failures - transaction will be rolled back.")
Return FailureProcessingResult.ProceedWithRollBack
End If
errorString += "IDs "
For Each id As ElementId In failure.GetFailingElementIds()
errorString += id.ToString() + ", "
hasFailures = True
Next
errorString += vbLf & "Will be deleted because: " + failure.GetDescriptionText() + vbLf
failuresAccessor.DeleteElements(TryCast(failure.GetFailingElementIds(), IList(Of ElementId)))
Next
If hasFailures Then
TaskDialog.Show("Error", errorString)
Return FailureProcessingResult.ProceedWithCommit
End If
Return FailureProcessingResult.[Continue]
End Function
End Class
End Class
No code example is currently available or this language may not be supported.
No code example is currently available or this language may not be supported.
See Also