FailuresProcessing Event


Subscribe to the FailuresProcessing event to be notified when failures are being processed at the end of transaction.

Namespace: Autodesk.Revit.ApplicationServices
Assembly: RevitAPI (in RevitAPI.dll) Version: 17.0.0.0 (17.0.1090.0)
Since: 2011

Syntax

C#
public event EventHandler<FailuresProcessingEventArgs> FailuresProcessing
Visual Basic
Public Event FailuresProcessing As EventHandler(Of FailuresProcessingEventArgs)
Visual C++
public:
 event EventHandler<FailuresProcessingEventArgs^>^ FailuresProcessing {
	void add (EventHandler<FailuresProcessingEventArgs^>^ value);
	void remove (EventHandler<FailuresProcessingEventArgs^>^ value);
}

Remarks

This event is raised when failures are being processed during transaction commit or rollback operations. Handlers of this event have a limited ability to modify the document and/or failures in it, using the provided restricted failures accessor interface.

The event arguments provide access to the FailuresAccessor via [!:Autodesk::Revit::DB::FailuresProcessingEventArgs::GetFailuresAccessor()] which contains the details of the errors and/or warnings that caused the event to trigger.

The arguments also allow you to set a processing result via [!:Autodesk::Revit::DB::FailuresProcessingEventArgs::SetProcessingResult()] . The processing result determines if Revit will attempt to recommit the currently failing transaction, roll it back, or continue. If you are explicitly dismissing warnings from the event callback, a processing result of Continue is sufficient. But if you are explicitly resolving errors from the event callback, you must change the processing result to ProceedWithCommit to ensure that the user is not shown the dismissed errors. If you wish to cancel the transaction silently without showing the errors to the user, set the processing result to ProceedWithRollback, however you must also call SetClearAfterRollback(Boolean) in order to dismiss the errors and silently cancel the transaction.

Examples

Copy C#
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]

public class NoUnenclosedRoomWarnings : IExternalApplication
{
    static AddInId m_appId = new AddInId(new Guid("EB296268-8364-4d25-96E6-F664C608503C"));

    public Result OnStartup(UIControlledApplication application)
    {
        //Create an API application that subscribes to FailuresProcessing event for the lifetime of the session.
        application.ControlledApplication.FailuresProcessing += new EventHandler<FailuresProcessingEventArgs>(CheckWarnings);
        return Result.Succeeded;
    }

    public Result OnShutdown(UIControlledApplication application)
    {
        return Result.Succeeded;
    }

    private void CheckWarnings(object sender, FailuresProcessingEventArgs e)
    {
        FailuresAccessor fa = e.GetFailuresAccessor();
        IList<FailureMessageAccessor> failList = new List<FailureMessageAccessor>();
        failList = fa.GetFailureMessages(); // Inside event handler, get all warnings
        foreach (FailureMessageAccessor failure in failList)
        { 
            // check FailureDefinitionIds against ones that you want to dismiss, 
            FailureDefinitionId failID = failure.GetFailureDefinitionId();
            // prevent Revit from showing Unenclosed room warnings
            if (failID == BuiltInFailures.RoomFailures.RoomNotEnclosed)
            {
                fa.DeleteWarning(failure);
            }
        }
    }
}
Copy VB.NET
<Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)> _
Public Class NoUnenclosedRoomWarnings
    Implements IExternalApplication
    Shared m_appId As New AddInId(New Guid("EB296268-8364-4d25-96E6-F664C608503C"))

    Public Function OnStartup(application As UIControlledApplication) As Autodesk.Revit.UI.Result Implements IExternalApplication.OnStartup
        'Create an API application that subscribes to FailuresProcessing event for the lifetime of the session.
        AddHandler application.ControlledApplication.FailuresProcessing, AddressOf CheckWarnings
        Return Result.Succeeded
    End Function

    Public Function OnShutdown(application As UIControlledApplication) As Autodesk.Revit.UI.Result Implements IExternalApplication.OnShutdown
        Return Result.Succeeded
    End Function

    Private Sub CheckWarnings(sender As Object, e As FailuresProcessingEventArgs)
        Dim fa As FailuresAccessor = e.GetFailuresAccessor()
        Dim failList As IList(Of FailureMessageAccessor) = New List(Of FailureMessageAccessor)()
        failList = fa.GetFailureMessages()
        ' Inside event handler, get all warnings
        For Each failure As FailureMessageAccessor In failList
            ' check FailureDefinitionIds against ones that you want to dismiss, 
            Dim failID As FailureDefinitionId = failure.GetFailureDefinitionId()
            ' prevent Revit from showing Unenclosed room warnings
            If failID = BuiltInFailures.RoomFailures.RoomNotEnclosed Then
                fa.DeleteWarning(failure)
            End If
        Next
    End Sub
End Class

See Also