Compartilhar via


Usar a atualização de recursos para aplicar novas páginas mestras do SharePoint ao atualizar do SharePoint 2010

Saiba como redefinir uma página mestra personalizada durante o FeatureUpgrading evento ao atualizar um site do SharePoint de 2010 para o modo de compatibilidade de 2013.

Ao atualizar suas personalizações do SharePoint 2010 para o SharePoint, todas as referências às páginas mestras personalizadas que você criou alternar de volta para a página default.master. Se você implantou um recurso que contém uma ou mais páginas mestras personalizadas para uma coleção de sites do SharePoint atualizada que está em execução no modo de compatibilidade do SharePoint 2010, você precisará redefinir suas páginas mestras do SharePoint ao atualizar para o modo de compatibilidade de 2013. Este tópico explica como usar um receptor de recursos para garantir que suas páginas mestras personalizadas do SharePoint seja redefinida quando você atualizar do SharePoint 2010.

Use custom upgrade code to reset a master page

Como explica as diretrizes em Implantar recursos personalizados para coleções de sites atualizadas no SharePoint , quando você atualizar do SharePoint 2010 para o SharePoint, as coleções de sites em seu farm serão executadas no modo de compatibilidade do SharePoint 2010 por padrão. Depending on the approach to upgrading your custom features that you've taken, you'll have deployed any given feature by using either one or two solution packages:

  • A single solution package that can be deployed to both the "14" and the "15" compatibility levels, either because of custom logic for the "15" compatibility level, or because the feature works without any problems in both the "14" and the "15" compatibility levels.
  • Two solution packages that contain different versions of the same feature. This approach is called "feature masking."

In either case, during upgrade any custom master pages you've created will revert to the default.master page. If you don't reset these pages with logic inside your feature, you'll need to reactivate the feature (or the "15" version of the feature) to reset the master pages to your custom versions. Você pode redefinir suas páginas mestras personalizadas de 2013 usando um receptor de recursos vinculado ao FeatureUpgrading evento.

To reset a 2013 custom master page with a feature receiver

  1. Open your solution in Visual Studio. Find your feature under the Features node in Solution Explorer, and open the feature.xml file for your feature.

  2. Adicione uma <UpgradeActions> seção ao arquivo feature.xml e verifique se a ação se aplica apenas à versão do recurso que está atualmente em uso para o nível de compatibilidade "14". This section specifies the name of an action to perform when the feature is upgraded. The following example specifies an upgrade when version 1.0.0.0 of the feature is in use. No exemplo, a ação UpgradeFeature é passada para a implementação do método FeatureUpgrading(SPFeatureReceiverProperties, String, IDictionary<String, String>) que você definirá posteriormente depois de adicionar um receptor de recursos.

    <UpgradeActions
        ReceiverAssembly="MyFeatureReceiver, Version=2.0.0.0, Culture=neutral, PublicKeyToken=<token>"
        ReceiverClass="MyFeature.MyFeatureEventReceiver">
      <VersionRange BeginVersion="1.0.0.0" EndVersion="1.0.0.0">
       <CustomUpgradeAction Name="UpgradeFeature"/>
    <ApplyElementManifests>
    <ElementManifest Location="MasterPages\\UpgradeElements.xml" />
    </ApplyElementManifests>
      </VersionRange>
    </UpgradeActions>
    

    You place the master page or pages in the MasterPages folder of the project, and any metadata related to the master page(s) in the UpgradeElements.xml file.

  3. Adicione uma <Properties> seção ao arquivo feature.xml. This section contains key-value pairs that specify the 2013 custom master page or pages that you want to set when the site is upgraded. The following example specifies the value of the My15MasterPage key that you'll use in the feature receiver.

    <Properties>
      <Property Key="My15MasterPage" Value="_catalogs/masterpage/My15MasterPage.master" />
    </Properties>
    
  4. In Solution Explorer, under the Features node, right click the name of your feature, and then choose Add Event Receiver to add an event receiver to the feature.

    This adds a code file under your feature in Solution Explorer. Figure 1 shows where a sample Feature1.EventReceiver.cs file appears under the feature in the Features folder.

    Figura 1. O arquivo de código de um receptor de eventos em um recurso

    Depois que você cria um receptor de evento para seu recurso, um arquivo de código é mostrado no recurso.

    Este arquivo contém um método comentado e vazio FeatureUpgrading . You'll use this method in the following step.

  5. Abra o arquivo de código e descompacte o método FeatureUpgrading, que substitui o método FeatureUpgrading(SPFeatureReceiverProperties, String, IDictionary<String, String>). O exemplo a seguir aplica o My15MasterPage arquivo especificado anteriormente no arquivo feature.xml.

    public override void FeatureUpgrading(SPFeatureReceiverProperties properties, string upgradeActionName, System.Collections.Generic.IDictionary<string, string> parameters)
    {
        try {
            if (upgradeActionName != "UpgradeFeature")
                return;
                //Set the master page to a value stored as a property in the feature.xml file
                string masterPage = properties.Definition.Properties[My15MasterPage].Value;
                string baseURL;
                var currentWeb = properties.Feature.Parent as SPWeb;
    
                //Checks to see that the API returns a string that ends in a "/" and if not adds it.
                if (currentWeb.ServerRelativeUrl.Substring(currentWeb.ServerRelativeUrl.Length - 1) == "/")
                {
                    baseURL = currentWeb.ServerRelativeUrl;
                }
                else
                {
                    baseURL = currentWeb.ServerRelativeUrl + "/";
                }
    
                masterPage = baseURL + masterPage;
                currentWeb.CustomMasterUrl = masterPage;
    
                currentWeb.Properties.Update();
                currentWeb.Update();
            }
        }
    
        catch (Exception ex)
        {
          //Handle exception
        }
    }
    

Depois de terminar a atualização, você vai querer pensar no futuro e na manutenção de longo prazo do seu recurso. Consulte Gerenciamento de Ciclo de Vida do Aplicativo no SharePoint 2010 para obter diretrizes sobre como manter o código de confiança total. Embora este artigo se refira especificamente ao SharePoint 2010, ele se aplica igualmente bem ao código de confiança total no SharePoint. Se você não estiver familiarizado com as ações de versão e atualização de recursos, consulte a seção Modelos para Gerenciamento do Ciclo de Vida da Solução deste artigo. Você também deve examinar as melhores práticas para usar versões de recursos.

Confira também