Obtener SPWEB en el receptor de características
-
10-12-2019 - |
Pregunta
Mientras pruebe mi solución, recibo un error en la activación de la función:
Uso detectado de SPREQUEST para el objeto SPWEB cerrado previamente.Cierre los objetos SPWEB cuando haya terminado con todos los objetos obtenidos de ellos, pero no antes.
Esta es la forma en que estoy recibiendo SPWEB:
public override void FeatureActivated(SPFeatureReceiverProperties properties) { using (SPWeb web = properties.Feature.Parent as SPWeb) { ClassOfMine.doYourStuff(web); } }
¿Qué estoy haciendo mal?
Solución
¿Qué tal;
ADVERTENCIA: Su función debe ser scoped como web para que funcione obviamente;)
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
// No need to dispose the web istance, as indicated in the "Do not dispose" guidance
SPWeb web = (SPWeb) properties.Feature.Parent; // added semicolon
ClassOfMine.doYourStuff(web);
}
No usando la característica:
Si no, use el SPCONTEXT para obtener la web raíz
SPContext.Current.Site.RootWeb
o - para la web actual
SPContext.Current.Web
o - para una URL web específica
SPContext.Current.Site.OpenWeb("Website_URL"))
Para usar arriba en función, deberías usar las propiedades:
Utilice las propiedades para obtener el sitio para obtener el rootweb
SPSite site = properties.Feature.Parent as SPSite;
using (SPWeb web = site.RootWeb)
{
}
o - para la web actual
SPWeb web = properties.Feature.Parent as SPWeb;
o - para una URL web específica
SPSite site = properties.Feature.Parent as SPSite;
using (SPWeb web = site.OpenWeb("Website_URL"))
{
}
Otros consejos
estás haciendo bien.Solo el alcance de la característica debe ser web.El atributo "padre" es siempre el objeto del alcance de la característica.
También está dispuesto el objeto con el uso.
El único problema con SPCONTEXT es que no puede activar la función de PowerShell, ya que no hay un contexto HTTP.