Вызывается в случаях программного прерывания выполнения команды и выгрузки команды.
Примеры
В этом примере рассматривается создание класса команды.
C#
using ARO.AIS.API;
using ARO.AIS.API.Audit;
using ARO.AIS.API.Logs;
using ARO.AIS.API.Revit;
using Autodesk.Revit.UI;
using System;
using System.Windows;
namespace ARO.AIS.Revit.Commands
{
public class SampleCommand : MarshalByRefObject, IRevitCommand
{
public string GroupName => "Samples";
public string Uid => "00000000000000000000000000000000";
public string Name => "Sample command";
public string Description => "Show current user login";
public Version Version => new Version(1, 0);
public int Product => SupportedProduct.REVIT_2022;
public byte[] Logo => null;
public bool Execute(object application, IRevitTransaction transaction, ILogs logs, IAudit audit)
{
_ = MessageBox.Show($"Current Username: {(application as UIApplication).Application.Username}.!.");
return true;
}
public void ForcedStop(object application) { }
}
}
В этом примере рассматривается процесс работы с транзакциями Revit в рамках команды.
Для возможности обработки транзакции требуется зарегистрировать обработчик и вызвать его через функцию запуска RunTransaction.
C#
namespace ARO.AIS.Revit.Commands
{
public class TransactionExample
{
private readonly IRevitTransaction _revitTransactions;
private readonly string _sampleTransactionUid;
public TransactionExample(IRevitTransaction revitTransactions)
{
_revitTransactions = revitTransactions;
_sampleTransactionUid = _revitTransactions.RegisterHandler(SampleTransaction);
}
public void RunTransaction()
{
_revitTransactions.RunTransaction(_sampleTransactionUid);
}
private void SampleTransaction(object application)
{
UIApplication app = application as UIApplication;
using (Transaction transaction = new Transaction(app.ActiveUIDocument.Document, "Sample transaction"))
{
transaction.Start();
//
transaction.Commit();
}
}
}
}
Работа с объектом Transaction вне обработчика вызовет ошибку времени выполнения.
В этом примере рассматривается отправка информационного лог-сообщения в ЛК без отладочных данных.
namespace ARO.AIS.Revit.Commands
{
public class LogExample
{
public LogExample(ILogs logs)
{
logs.AddToLog(LogLevel.INFO, "Test send log message");
}
}
}
В этом примере рассматривается отправка информационного лог-сообщения в ЛК с отладочными данными.
C#
namespace ARO.AIS.Revit.Commands
{
public class LogExample
{
public LogExample(ILogs logs)
{
try
{
int error = 1 / 0;
}
catch (Exception ex)
{
logs.AddToLog(LogLevel.ERROR, "Division by zero", ex.Message);
}
}
}
}
Общий объем (размер в байтах) одного лог-сообщения, включая отладочную информацию, не должен превышать 1024 байта (1 Кб).
В этом примере рассматривается отправка событий аудита в ЛК.
C#
namespace ARO.AIS.Revit.Commands
{
public class AuditExample
{
public AuditExample(IAudit audit)
{
// событие о смене значения
audit.AddAuditEvent(AuditAction.CHANGE, AuditCategory.FUNCTIONAL, 10, 2, "Изменения значения");
// событие о действиях с UI
audit.AddAuditEvent(AuditAction.INFO, AuditCategory.INTERFACE, 5, null, "Кол-во нажатий кнопки");
}
}
}
Общий объем (размер в байтах) одного события аудита не должен превышать 512 байт.
Подробное описание
Свойства
GroupName
Возвращает имя группы команд на вкладке Разработчика в панели Revit. Не может быть пустой строкой или null.
C#
string GroupName { get; }
Методы
Execute(object, IRevitTransaction, ILogs, IAudit)
Вызывается в момент запуска команды с панели Revit.
Параметры object application - ссылка на объект UIApplication, который представляет активный сеанс пользовательского интерфейса Revit. IRevitTransaction transaction - объект для управления вызовами транзакций Revit. ILogs logs - объект позволяющий отправлять в ЛК лог-сообшения. Ограничения: одно сообщение не более 1 Кб. IAudit audit - объект позволяющий отправлять в ЛК события аудита. Ограничения: общий объем одного подготовленного события (описание + данные) не должен превышать 512 байт.
Возвращаемое значение bool - флаг корректности работы/запуска команды.
ForcedStop(object)
Вызывается в случаях программного прерывания выполнения команды и выгрузки команды.
C#
void ForcedStop(object application)
Параметры object application - ссылка на объект UIApplication, который представляет активный сеанс пользовательского интерфейса Revit.