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; } }
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.
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