Pergunta

Ao testar minha solução, recebo um erro na ativação do recurso:

Detectado uso de SPRequest para objeto SPWeb fechado anteriormente.Por favor, feche os objetos SPWeb quando terminar com todos os objetos obtidos deles, mas não antes.

É assim que estou obtendo o SPWeb:

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
    using (SPWeb web = properties.Feature.Parent as SPWeb)
    {
        ClassOfMine.doYourStuff(web);
    }
}

O que estou fazendo de errado?

Foi útil?

Solução

que tal;

aviso:seu recurso precisa ter o escopo definido como web para funcionar, 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);

}

não usando o recurso:

se não, use o spcontext para obter a web raiz

SPContext.Current.Site.RootWeb

ou - para a web atual

SPContext.Current.Web

ou - para um URL específico

SPContext.Current.Site.OpenWeb("Website_URL"))

para usar o recurso acima, você precisaria usar as propriedades:

use as propriedades para obter o site para obter o rootWeb

SPSite site = properties.Feature.Parent as SPSite;
using (SPWeb web = site.RootWeb)
{

}

ou - para a web atual

SPWeb web = properties.Feature.Parent as SPWeb;

ou - para um URL específico

SPSite site = properties.Feature.Parent as SPSite;
using (SPWeb web = site.OpenWeb("Website_URL"))
{

}

Outras dicas

Você está fazendo certo.Apenas o escopo do recurso deve ser web.O atributo "Parent" é sempre o objeto do escopo do recurso.

Você também está descartando o objeto usando.

O único problema com SPContext é que você não pode ativar o recurso no PowerShell porque não há contexto http.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top