Revit API では、ExternalCommand と ExternalApplication の動作を設定するためにいくつかの属性が用意されています。
外部コマンドのトランザクション動作をコントロールするには、カスタム属性 Autodesk.Revit.Attributes.TransactionMode を IExternalCommand インタフェースの実装クラスに適用する必要があります。このオプションには既定はありません。このモードでは、コマンドの呼び出し時に使用するトランザクションを API フレームワークがどのように要求するかをコントロールできます。サポートする値は次のとおりです。
3 つすべてのモードで、TransactionMode はアクティブなドキュメントにのみに適用されます。コマンドの実行中に他のドキュメントを開くことができ、これらの開いたドキュメントで Transaction、SubTransaction、TransactionGroup の作成や使用を完全にコントロールできます(ReadOnly モードでも)。
たとえば、外部コマンドが自動トランザクション モードを使用するように設定するには、次の手順を実行します。
コード領域 3-18: TransactionAttribute |
[Transaction(TransactionMode.Automatic)] public class Command : IExternalCommand { public Autodesk.Revit.IExternalCommand.Result Execute( Autodesk.Revit.ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements) { // Command implementation, which modifies the active document directly // and no need to start/commit transaction. } } |
詳細は、「トランザクション」を参照してください。
外部コマンド実行時のジャーナル作成動作をコントロールするために、カスタム属性 Autodesk.Revit.Attributes.JournalingAttribute を必要に応じて IExternalCommand インタフェースの実装クラスに適用することができます。ジャーナル作成には次の 2 つのオプションがあります。
コード領域 3-19: JournalingAttribute |
[Journaling(JournalingMode.UsingCommandData)] public class Command : IExternalCommand { public Autodesk.Revit.IExternalCommand.Result Execute( Autodesk.Revit.ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements) { return Autodesk.Revit.UI.Result.Succeeded; } } |