RevitAPI: 事务的错误或警告信息的处理 - Failure Processor of Transaction
来源:互联网 发布:康佳电视直播的软件 编辑:程序博客网 时间:2024/05/18 22:18
很多时候,当我们提交一个事务的时候,Revit会弹出错误框或者警告框,而该错误或警告无法使用Try-Catch捕获。
using (Transaction transaction = new Transaction(RevitDoc)){ try { transaction.Start("TransactionName"); // do your stuff transaction.Commit(); } catch (Exception ex) { if (transaction.GetStatus() == TransactionStatus.Started) transaction.RollBack(); }}例如像下面的错误:
这个时候就要用到FailureProcessor了。
首先我们需要定义一个实现了接口IFailuresPreprocessor的类。
public class MyFailuresPreProcessor : IFailuresPreprocessor{ private string _failureMessage; private bool _hasError; public string FailureMessage { get { return _failureMessage; } set { _failureMessage = value; } } public bool HasError { get { return _hasError; } set { _hasError = value; } } public FailureProcessingResult PreprocessFailures(FailuresAccessor failuresAccessor) { var failures = failuresAccessor.GetFailureMessages(); if (failures.Count == 0) return FailureProcessingResult.Continue; foreach (var failure in failures) { if (failure.GetSeverity() == FailureSeverity.Error) { _failureMessage = failure.GetDescriptionText(); // get the failure description _hasError = true; return FailureProcessingResult.ProceedWithRollBack; } if (failure.GetSeverity() == FailureSeverity.Warning) { failuresAccessor.DeleteWarning(failure); } } return FailureProcessingResult.Continue; }}
这里通过PreprocessFailures方法我们就可以捕获错误或者警告,然后进行我们想要的处理。
- FailuresAccessor.GetFailureMessages() 获取所有的失败信息
- FailureMessageAccessor.GetSeverity() 可以得知它是警告还是错误
- FailureMessageAccessor.GetDescriptionText() 可以获取错误的文字
- FailureMessageAccessor.GetFailureDefinitionId() 获取失败的定义
- FailuresAccessor.DeleteWarning删除警告,或者FailuresAccessor.DeleteAllWarnings直接删除所有警告
然后在Transaction类里面设置FailuresPreprocessor,使用FailureHandlingOptions options = transaction.GetFailureHandlingOptions();
获取FailureHandlingOptions,然后使用options.SetFailuresPreprocessor(IFailuresPreprocessor)来设置FailuresPreprocessor。
代码如下:
using (Transaction transaction = new Transaction(RevitDoc)){ try { transaction.Start("TransactionName"); FailureHandlingOptions options = transaction.GetFailureHandlingOptions(); MyFailuresPreProcessor failureProcessor = new MyFailuresPreProcessor(); options.SetFailuresPreprocessor(failureProcessor); transaction.SetFailureHandlingOptions(options); // do your operations var status = transaction.Commit(); if (status != TransactionStatus.Committed) { if (failureProcessor.HasError) { TaskDialog.Show("ERROR", failureProcessor.FailureMessage); } } } catch (Exception ex) { if (transaction.GetStatus() == TransactionStatus.Started) transaction.RollBack(); }}
0 0
- RevitAPI: 事务的错误或警告信息的处理 - Failure Processor of Transaction
- RevitAPI: 事务的错误或警告信息的处理 - Failure Processor of Transaction .
- Mysql的事务(transaction)处理简析
- 一些错误/警告的处理!
- RevitAPI: 获取DWG导出的设置信息
- 事务的理解transaction
- macro redefinition警告或错误的解决方法
- C4995 错误或警告的解决办法
- 关于log4j的警告信息的处理
- log4j的警告信息的处理
- 关于“Invalid location of tag (form) ”错误或警告的解决
- C#的错误和警告信息指令
- 事务(Transaction)的特性
- 事务(Transaction)的特性
- 事务(Transaction)的特性
- 事务(Transaction)的理解
- 事务(Transaction)的理解
- redis的事务(transaction)详解
- ASP. NET MVC4 NHibernate篇
- [经典面试题]给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数
- 仿电视关机动画
- C#动态实现按钮背景设置
- linux 下socket编程
- RevitAPI: 事务的错误或警告信息的处理 - Failure Processor of Transaction
- 【HTML5】Canvas中的tranform变换矩阵
- java命令行运行
- jquery easyUI 的datagrid 表头排序
- JAVA 错误集合
- 细说Android事件传递机制(dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent)
- 错误集_ nib文件加载,Unknown class <XXClass> in Interface Builder file.,Undefined symbolsfor architecture
- 兔子--多击事件
- TTL传输中过期问题导致网站打不开