Exemplo n.º 1
0
        /// <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);
        }