/// <summary>Start a new transaction</summary> /// <param name="transactionID">Transaction ID</param> /// <param name="expectedTitle">Title of the transaction. This is used for validation.</param> public static GuiFrameWindow BeginTransaction(this GuiSession session, string transactionID, string expectedTitle) { // force current transaction to end, preventing any blocking(eg: model dialog) session.EndTransaction(); Logger.Instance.Debug("Starting transaction : " + transactionID); session.StartTransaction(transactionID); var window = session.ActiveWindow; if (window.Text != expectedTitle) { const string Message = "You do not have the correct permission to access this transaction. Or, such transaction does not exist."; var context = new Dictionary <string, object> { { "TransactionID", transactionID }, { "Expected Title", expectedTitle }, { "WindowTitle", window.Text }, { "StatusMessage", window.FindByName <GuiStatusbar>("sbar").Text }, }; Logger.Instance.Error("Unable to access personal data"); throw new InvalidOperationException(Message + Environment.NewLine + context.Prettify()) .BindContext(context); } return(window); }
private static GuiFrameWindow BeginTransactionImpl(this GuiSession session, string transactionID, Predicate <GuiFrameWindow> validation, Func <GuiFrameWindow, Exception> errorBuilder) { // force current transaction to end, preventing any blocking(eg: model dialog) session.EndTransaction(); session.StartTransaction(transactionID); var window = session.ActiveWindow; if (!validation(window)) { throw errorBuilder(window); } return(window); }