Ottenere SPWEB nel ricevitore di funzionalità
-
10-12-2019 - |
Domanda
Durante il test della mia soluzione ricevo un errore sull'attivazione della funzione:
.L'uso rilevato della sprequest per l'oggetto SPWEB chiuso in precedenza.Si prega di chiudere gli oggetti SPWEB quando hai finito con tutti gli oggetti ottenuti da loro, ma non prima.
Questo è il modo in cui sto ottenendo SPWEB:
.public override void FeatureActivated(SPFeatureReceiverProperties properties) { using (SPWeb web = properties.Feature.Parent as SPWeb) { ClassOfMine.doYourStuff(web); } }
Cosa sto facendo male?
Soluzione
Che ne dici;
Avvertenza: la tua funzione deve essere ambita come web per il lavoro ovviamente;)
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);
}
.
.
Non usare la funzione:
Se non quindi utilizzare lo spContExt per ottenere il Web Root
SPContext.Current.Site.RootWeb
.
o - per il Web corrente
SPContext.Current.Web
.
o - per uno specifico URL Web
SPContext.Current.Site.OpenWeb("Website_URL"))
.
.
Per utilizzare sopra nella funzione è necessario utilizzare le proprietà:
Utilizzare le proprietà per ottenere il sito per ottenere il rootweb
SPSite site = properties.Feature.Parent as SPSite;
using (SPWeb web = site.RootWeb)
{
}
.
o - per il Web corrente
SPWeb web = properties.Feature.Parent as SPWeb;
.
o - per uno specifico URL Web
SPSite site = properties.Feature.Parent as SPSite;
using (SPWeb web = site.OpenWeb("Website_URL"))
{
}
. Altri suggerimenti
stai facendo bene.Solo lo scopo della funzione deve essere web.L'attributo "genitore" è sempre l'oggetto della portata di funzionalità.
Stai anche smaltire l'oggetto con l'uso.
L'unico problema con SPConText è che non è possibile attivare la funzione da PowerShell poiché non è presente un contesto HTTP.