/// <summary> /// Rollback all changes and close this form /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void cancelButton_Click(object sender, EventArgs e) { if (m_transCount > 0) { if (TaskDialogResult.No == TaskDialog.Show("Warning", "By canceling this dialog, all modifications to the model will be discarded." + " Do you want to proceed?", TaskDialogCommonButtons.Yes | TaskDialogCommonButtons.No)) { this.DialogResult = DialogResult.None; return; } } // if there is still an active transaction, roll it back now, silently if ((null != m_transaction) && (m_transaction.GetStatus() == TransactionStatus.Started)) { m_transaction.RollBack(); } // if there are still transaction groups open, roll them back now, silently if ((null != m_transactionGroup) && (m_transactionGroup.GetStatus() == TransactionStatus.Started)) { HandleNestedTransactionGroups(OperationType.RollbackTransactionGroup); } // silently roll back the main (hidden) transaction group if ((null != m_mainTtransactionGroup) && (m_mainTtransactionGroup.GetStatus() == TransactionStatus.Started)) { m_mainTtransactionGroup.RollBack(); } this.DialogResult = DialogResult.Cancel; this.Close(); }
public static TResult InvokeGroup <TResult>(this Document doc, Func <TransactionGroup, TResult> func, string name = "default") { using (var tr = new TransactionGroup(doc, name)) { tr.Start(); var result = func(tr); var status = tr.GetStatus(); switch (status) { case TransactionStatus.Started: tr.Commit(); return(result); case TransactionStatus.Committed: case TransactionStatus.RolledBack: return(result); case TransactionStatus.Error: tr.RollBack(); return(result); default: return(result); } } }
public Result Execute( ExternalCommandData commandData, ref string message, ElementSet elements) { UIApplication uiApp = commandData.Application; _uiDoc = uiApp.ActiveUIDocument; _doc = _uiDoc.Document; SettingsUsr.Init(); // this cleaned up the text display problem // Application.SetCompatibleTextRenderingDefault(false); using (TransactionGroup tg = new TransactionGroup(_doc, "measure points")) { tg.Start(); Process(_uiDoc, _doc); if (tg.GetStatus() == TransactionStatus.Started) { tg.RollBack(); } } return(Result.Succeeded); }
public static void InvokeGroup(this Document doc, Action <TransactionGroup> action, string name = "default") { using (var tr = new TransactionGroup(doc, name)) { tr.Start(); action(tr); var status = tr.GetStatus(); switch (status) { case TransactionStatus.Started: tr.Commit(); return; case TransactionStatus.Committed: case TransactionStatus.RolledBack: break; case TransactionStatus.Error: tr.RollBack(); return; default: return; } } }
/// <summary> /// Accept the changes and and close this form /// </summary> /// <remarks>If any transaction group or the active transaction is still open /// give the user the option to either commit them or roll them back first.</remarks> /// <param name="sender"></param> /// <param name="e"></param> private void okButton_Click(object sender, EventArgs e) { //if any transaction or transaction group is not finished, notify user to deal with it if (null != m_transaction || null != m_transactionGroup) { TaskDialogResult dialogResult = TaskDialog.Show("Warning", "Some transaction groups or the active transaction is not committed." + " Choose Yes to commit them, or No to roll them back.", TaskDialogCommonButtons.Yes | TaskDialogCommonButtons.No | TaskDialogCommonButtons.Cancel); if (TaskDialogResult.Cancel == dialogResult) { return; } else if (TaskDialogResult.Yes == dialogResult) { if (m_transaction != null && (m_transaction.GetStatus() == TransactionStatus.Started)) { m_transaction.Commit(); } HandleNestedTransactionGroups(OperationType.CommitTransactionGroup); } else { if (m_transaction != null && (m_transaction.GetStatus() == TransactionStatus.Started)) { m_transaction.RollBack(); } HandleNestedTransactionGroups(OperationType.RollbackTransactionGroup); } } // silently commit the main (hidden) transaction group if ((null != m_mainTtransactionGroup) && (m_mainTtransactionGroup.GetStatus() == TransactionStatus.Started)) { m_mainTtransactionGroup.SetName("SDK Transaction Sample"); m_mainTtransactionGroup.Assimilate(); } this.DialogResult = DialogResult.OK; this.Close(); }