Redireccionar desde NewForm al EditForm del mismo elemento - Blog de David Alonso. Microsoft SharePoint, Office 365, Azure y otras tecnologías Microsoft

Blog de David Alonso. Microsoft SharePoint, Office 365, Azure y otras tecnologías Microsoft

Microsoft SharePoint, Azure, Office 365

jueves, 4 de octubre de 2012

Redireccionar desde NewForm al EditForm del mismo elemento

En el caso de plantearse la necesidad de redireccion hacia el dispform/editform de un elemento justo despues de su inclusion, ésta puede realizarse desde el evento ItemAdding tal y como se muestra en el codigo que introduzco a continuacion.
 private HttpContext _currentContext = null;

        public EventReceiver1()
            : base()
        {
            if (null != HttpContext.Current)
            {
                _currentContext = HttpContext.Current;
            }
        }

        /// <summary>
        /// Se va a agregar un elemento
        /// </summary>
        public override void ItemAdding(SPItemEventProperties properties)
        {
            base.ItemAdding(properties);
            try
            {

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

                // Se clona el item ya que al hacer adding lo perderiamos
                EventFiringEnabled = false;
                SPListItem itemToAdd = list.Items.Add();

                // Todos los campos
                itemToAdd["Title"] = properties.AfterProperties["Title"];
                itemToAdd["test"] = properties.AfterProperties["test"];

                // Actualizamos el item
                itemToAdd.Update();
                site.Update();

                // Se obtiene el ID del elemento para la vinculacion
                string IDcampo = itemToAdd.ID.ToString();
                EventFiringEnabled = true;

                // Limpieza
                site.Dispose();
                siteColl.Dispose();

                // Redirect
                SPUtility.Redirect("/Lists/test/EditForm.aspx?ID=" + IDcampo, SPRedirectFlags.Default, _currentContext);
            }
            catch (Exception ex)
            {
                properties.Status = SPEventReceiverStatus.CancelNoError;
                properties.ErrorMessage = "ERROR " + ex.ToString();
                properties.Cancel = true;
            }
        }
Primero, se realiza la creacion del contexto para posteriormente, clonar el elemento e incluirlo en la lista con los valores del elemtneo original. Esto es debido a que la redireccion bloquea la inserccion del elemento actual en la lista.

No hay comentarios:

Publicar un comentario