private void DoProcessButtonAction(object sender, EventArgs e, Action action)
        {
            action.NullCheck("action");

            ProcessProgress.Current.RegisterResponser(SubmitButtonProgressResponser.Instance);
            try
            {
                Button btn = (Button)sender;

                action();

                WfActionAfterOperation operations = (WfActionAfterOperation)Enum.Parse(typeof(WfActionAfterOperation), btn.CommandArgument);

                if ((operations & WfActionAfterOperation.RefreshOpener) != WfActionAfterOperation.None)
                {
                    this.Page.Response.Write("<script type=\"text/javascript\">if (parent.opener) parent.opener.location.reload();</script>");
                }

                if ((operations & WfActionAfterOperation.RefreshCurrent) != WfActionAfterOperation.None)
                {
                    this.Page.Response.Write("<script type=\"text/javascript\">parent.location.reload();</script>");
                }

                if ((operations & WfActionAfterOperation.Close) != WfActionAfterOperation.None)
                {
                    WebUtility.ResponseCloseWindowScriptBlock();
                }

                string script = "<script type=\"text/javascript\">parent.location.reload();</script>";
                this.Page.Response.Write(script);
            }
            catch (System.Exception ex)
            {
                WebUtility.ResponseShowClientErrorScriptBlock(ex);
            }
            finally
            {
                this.Page.Response.Write(SubmitButton.GetResetAllParentButtonsScript(true));
                this.Page.Response.End();
            }
        }
        private HtmlAnchor AddAdvancedOpLinkWithSubmitButton(Control wrapper, string text, string url, string buttonID, string promptText, string progressText, WfActionAfterOperation afterOperation, EventHandler serverClickHandler)
        {
            SubmitButton button = new SubmitButton();

            button.ID = buttonID;
            button.Style["display"] = "none";
            button.PopupCaption     = Translator.Translate(Define.DefaultCulture, progressText);
            button.ProgressMode     = SubmitButtonProgressMode.BySteps;
            button.CommandArgument  = afterOperation.ToString();
            button.Click           += serverClickHandler;
            wrapper.Controls.Add(button);

            promptText = Translator.Translate(Define.DefaultCulture, promptText);

            string script          = string.Empty;
            string confirmedScript = string.Format("$get(\"{0}\").click()", button.ClientID);

            if (promptText.IsNotEmpty())
            {
                script = string.Format("if (window.confirm(\"{0}\")) {1};return false", promptText, confirmedScript);
            }
            else
            {
                script = string.Format("{0}; return false;", confirmedScript);
            }

            return(AddAdvancedOpLink(wrapper, text, url, script));
        }