Si è verificato un errore nel punto di distribuzione 'Attivare le funzioni': riferimento oggetto non impostato su un'istanza di un oggetto: Errore ricevitore funzionalità

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/109937

Domanda

Ho cretanato una web part visiva in SP 2013. Ha bisogno di un elenco di SharePoint.Così ha scritto il seguente codice nel ricevitore della funzione Web Part. Quando riesco a distribuire la soluzione, ottengo errori dice che si è verificato un errore nella fase di distribuzione 'Attiva funzioni': il riferimento all'oggetto non è impostato su un'istanza di un oggetto.Ho impostato ACTIVATEONDEDEADEDEDAULT="FALSE" e SEMPREFORCEINSTALL="TRUE". Dai un'occhiata al mio file Manifest file.

<Feature xmlns="http://schemas.microsoft.com/sharepoint/" Title="SharePointProject1 Feature1" ActivateOnDefault="FALSE" AlwaysForceInstall="TRUE" Id="8f7163d5-6c65-40d8-9045-8f74192f07d7" ReceiverAssembly="SharePointProject1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9c2f0c3a8e22f6a0" ReceiverClass="SharePointProject1.Features.Feature1.Feature1EventReceiver" Scope="Site">
  <ElementManifests>
    <ElementManifest Location="VisualWebPart1\Elements.xml" />
    <ElementFile Location="VisualWebPart1\VisualWebPart1.webpart" />
  </ElementManifests>
</Feature>
.

Questo è il mio codice funzione1eventreceiver.

SPWeb spWeb = properties.Feature.Parent as SPWeb;
            SPList laptopList = spWeb.Lists["Laptops"];
            if (laptopList != null)
            {
                laptopList.Delete();

            }
            SPListCollection lists = spWeb.Lists;
            lists.Add("Laptops", "The Laptops", SPListTemplateType.GenericList);
            laptopList = spWeb.Lists["Laptops"];


            laptopList.Fields.Add("Name", SPFieldType.Text, true);
            laptopList.Fields.Add("Model", SPFieldType.Text, true);
            laptopList.Fields.Add("Image", SPFieldType.URL, false);
.

Posso distribuire se ho solo sotto il codice

 SPWeb spWeb = properties.Feature.Parent as SPWeb;
.

È stato utile?

Soluzione

La web part visiva deve essere inclusa nella funzione SITE-SCOPED, come risultato. Proprietà. Feature.Parent.Parent è un oggetto SPSite.È necessario verificare l'ambito della funzione e utilizzare il codice seguente se lo scopo è il sito.

SPSite site = properties.Feature.Parent as SPSite;
if (site != null){
    SPWeb web = site.RootWeb;
    SPList laptopList = web.Lists["Laptops"];
    ...
}
.

Altri suggerimenti

Web.Lists [] causerà un'eccezione se l'elenco non è lì.

Utilizzare trygetlist invece

ha funzionato per me dopo Modificato il livello di ambito del funzionamento da Sito a Web

 Inserire l'immagine Descrizione qui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top