воскресенье, 19 июля 2009 г.

Move to display form after create element

Задача: после добавления нового элемента перейти на форму редактирования

Решение: Создаеться EventReciver и добавляется следующий код. На что особенно следует обратить внимание. Ни каким кастомайзингом вы этого не добьетесь, в момент щелчка по кнопке OK просто нет идентификатора записи поэтому и переходить некуда.

Это решение позволяет избежать этой ситуации.

Отдельные комментарии присутствуют в коде.

public override void ItemAdding(SPItemEventProperties properties)
        {
            // Get a "reference" to the list

           
            SPSite siteColl = new SPSite(properties.SiteId);
            SPWeb site = siteColl.OpenWeb(properties.RelativeWebUrl);
            SPList list = site.Lists[properties.ListId];

// Вызываем базовый метод и ничего не делаем, если это не наш список
            if (!list.DefaultViewUrl.Contains("Lists/Orders"))
            {
                base.ItemAdding(properties);
                return;
            }

// А вот тут идет обработка перехода с конкретной страницы, ну не нужен мне этот обработчик везде :)
            if (_currentContext.Request.CurrentExecutionFilePath.Contains("CopyListItem.aspx"))
            {
                base.ItemAdding(properties);
                return;
            }
            // Add the item and fill it with the values from properties
            DisableEventFiring();           
            SPListItem itemToAdd = list.Items.Add();
            foreach (SPField field in itemToAdd.Fields)
            {
                if (!field.Hidden &&
                    !field.ReadOnlyField &&
                    field != null &&
                    field.InternalName != "Attachments")
                {
                    itemToAdd[field.InternalName] = properties.AfterProperties[field.InternalName];
                }
            }
            itemToAdd.Update();
            EnableEventFiring();

            // Cleanup
            site.Dispose();
            siteColl.Dispose();
            string targetUrlOfNewItem = "DispForm.aspx?ID=" + itemToAdd.ID;
// ВАУ а вот тут Особая уличная магия :)

            // Redirect
            SPUtility.Redirect(targetUrlOfNewItem,SPRedirectFlags.Default, _currentContext);
        }

Комментариев нет: