diff --git a/xUnitRevitUtils2021/xru.cs b/xUnitRevitUtils2021/xru.cs
index 6f79f9d..af84e24 100644
--- a/xUnitRevitUtils2021/xru.cs
+++ b/xUnitRevitUtils2021/xru.cs
@@ -99,14 +99,15 @@ namespace xUnitRevitUtils
}
- ///
- /// Runs an Action in a Revit transaction, uses TaskCompletionSource to communicate when done
- ///
- /// Action to run
- /// Revit Document
- /// Transaction Name
- ///
- public static Task RunInTransaction(Action action, Document doc, string transactionName = "transaction")
+ ///
+ /// Runs an Action in a Revit transaction, uses TaskCompletionSource to communicate when done
+ ///
+ /// Action to run
+ /// Revit Document
+ /// Transaction Name
+ /// Enable to swallow all warnings generated by the transaction and prevent them from being raised within Revit
+ ///
+ public static Task RunInTransaction(Action action, Document doc, string transactionName = "transaction", bool ignoreWarnings = false)
{
var tcs = new TaskCompletionSource();
Queue.Add(new Action(() =>
@@ -116,6 +117,14 @@ namespace xUnitRevitUtils
using (Transaction transaction = new Transaction(doc, transactionName))
{
transaction.Start();
+
+ if (ignoreWarnings)
+ {
+ var options = transaction.GetFailureHandlingOptions();
+ options.SetFailuresPreprocessor(new IgnoreAllWarnings());
+ transaction.SetFailureHandlingOptions(options);
+ }
+
action.Invoke();
transaction.Commit();
}
@@ -130,7 +139,28 @@ namespace xUnitRevitUtils
EventHandler.Raise();
return tcs.Task;
+
+ }
+
+ ///
+ /// A failures preprocesser that clears any failures that occur within a transaction
+ ///
+ internal class IgnoreAllWarnings : IFailuresPreprocessor
+ {
+ public FailureProcessingResult PreprocessFailures(FailuresAccessor failuresAccessor)
+ {
+ var failList = failuresAccessor.GetFailureMessages();
+
+ foreach (FailureMessageAccessor failure in failList)
+ {
+ failuresAccessor.DeleteWarning(failure);
+ }
+
+ return FailureProcessingResult.Continue;
+ }
+ }
+
+
+ #endregion
}
-#endregion
- }
}