Pergunta

Quando crio um novo site, tenho um evento FeatureActivated com escopo na Web que gostaria de executar.O recurso é ativado, mas o evento FeatureActivated não é acionado.

O site é criado com webtemplate que inclui o guia de recursos no nó webfeatures.Do onet.xml do meu webtemplate que especifica o recurso

<WebFeatures>
   <Feature ID="e6e83174-0e6a-4fb6-a3e9-f16739a08a93" />
</WebFeatures>

Aqui está meu código ativado por recursos:

private const string QuicklaunchHeader = "Saksmappe";

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
    SPWeb webTemp = properties.Feature.Parent as SPWeb;
    var web = webTemp.Site.RootWeb;
    var rootFolder = web.RootFolder;
    rootFolder.WelcomePage = "Pages/CaseFolder.aspx";
    rootFolder.Update();

    //Remove old custom quick launch entry
    RemoveQuickLaunchItems(QuicklaunchHeader, web);

    //Add custom quick launch entry
    var header = new SPNavigationNode(QuicklaunchHeader, 
                                       web.Navigation.Home.Url,   false);
    web.Navigation.QuickLaunch.AddAsFirst(header);

    //TODO Set correct urls
    header.Children.AddAsLast(new SPNavigationNode("Saksdetaljer", ""));
    header.Children.AddAsLast(new SPNavigationNode("Merknader", ""));
}

Quando crio o site não consigo depurar o código.Eu tentei Debugger.Break() e coloquei um ponto de interrupção no VS2010.

Quando eu implanto o pacote do VS2010, o código ativado pelo recurso é acionado.Então o evento funciona, mas não quando eu crio o novo site.Alguém sabe como resolver esse problema?

Foi útil?

Solução

Você está usando o rootweb do site, não da web atual, portanto, qualquer alteração que você fizer será sempre para o rootweb.Em vez de usar webTemp para obter rootweb, Apenas use webTemp como a web.

private const string QuicklaunchHeader = "Saksmappe";

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
    SPWeb web = properties.Feature.Parent as SPWeb;
    var rootFolder = web.RootFolder;
    rootFolder.WelcomePage = "Pages/CaseFolder.aspx";
    rootFolder.Update();

    //Remove old custom quick launch entry
    RemoveQuickLaunchItems(QuicklaunchHeader, web);

    //Add custom quick launch entry
    var header = new SPNavigationNode(QuicklaunchHeader, 
                                       web.Navigation.Home.Url,   false);
    web.Navigation.QuickLaunch.AddAsFirst(header);

    //TODO Set correct urls
    header.Children.AddAsLast(new SPNavigationNode("Saksdetaljer", ""));
    header.Children.AddAsLast(new SPNavigationNode("Merknader", ""));
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top