none
Сихронный обработчик, как сообщить об ошибке не используя properties.Cancel, properties.ErrorMessage? RRS feed

  • Вопрос

  • Господа!

    WSS 3.0. Для того, чтобы вывсети сообщение об ошибке в синхронном обработчике, можно использовать
    1)
    properties.Cancel = true;
    properties.ErrorMessage = string.Format("текст ошибки.");

    Но в моем случае форма кастомизирована и в результате получаю ошибку "The data source control failed to execute the insert command." Это такое глюкалово с кастомизированными формами.

    Пробую альтернативные методы сообщения об ошибке(просто с обычной, не измененной формой):
    2)
    SPUtility.TransferToErrorPage("TransferToErrorPage function redirected here!");

    3)
    и даже так, вытаскивая контекст:
        public class MyHandler : SPItemEventReceiver
        {
            /// <summary>
            /// контекст для реализации редиректа response.redirect
            /// </summary>
            public HttpContext currentContext;
           
            /// <summary>
            /// вызов конструктора для response.redirect
            /// </summary>
            public MyHandler()
            {
                currentContext = HttpContext.Current;
            }
            //..
           
            public override void ItemUpdating(SPItemEventProperties properties)
            {
                SPUtility.Redirect("http://mail.ru", SPRedirectFlags.Default, currentContext);
            }
            // ..
        }
    

    Редиректа не происходит, а просто отображается список, в своем логе вижу что ничего не происходит. Исключений тоже нет. Эти методы вроде должны бы работать, обработчик ведь синхронный, Updat[b]ing[/b].

    Как сообщить об ошибке не используя properties.Cancel, properties.ErrorMessage?
    • Перемещено Nikita Panov 25 января 2010 г. 13:45 MSDN вопрос (От:Серверные приложения)
    23 января 2010 г. 15:09

Ответы

  • Мне помог третий вариант, с такими изменениями(SPReadirectFlags.Trusted ):

                            try
                            {
                                SPUtility.Redirect(properties.WebUrl + @"/ErrorStatusIsClosed.aspx", SPRedirectFlags.Trusted, currentContext);
                            }
                            catch (Exception ex)
                            {
                                Message(ex.Message + "\n" + ex.Source.ToString() + "\n" + ex.StackTrace.ToString() + "\n");
                            } 
    
    Он бросает исключение "Thread aborted", но перевод на нужную мне страницу выполняет.
    • Помечено в качестве ответа I.Vorontsov 9 апреля 2010 г. 10:52
    8 февраля 2010 г. 8:44

Все ответы

  • Добрый день, возможно, быстрее вам ответят на форуме для разработчиков sharepoint:

    MCTS
    25 января 2010 г. 8:33
  • Мне помог третий вариант, с такими изменениями(SPReadirectFlags.Trusted ):

                            try
                            {
                                SPUtility.Redirect(properties.WebUrl + @"/ErrorStatusIsClosed.aspx", SPRedirectFlags.Trusted, currentContext);
                            }
                            catch (Exception ex)
                            {
                                Message(ex.Message + "\n" + ex.Source.ToString() + "\n" + ex.StackTrace.ToString() + "\n");
                            } 
    
    Он бросает исключение "Thread aborted", но перевод на нужную мне страницу выполняет.
    • Помечено в качестве ответа I.Vorontsov 9 апреля 2010 г. 10:52
    8 февраля 2010 г. 8:44