Share via


Utiliser la mise à niveau des fonctionnalités pour appliquer de nouvelles pages maîtres SharePoint lors de la mise à niveau à partir de SharePoint 2010

Découvrez comment réinitialiser une page maître personnalisée pendant l’événement FeatureUpgrading lorsque vous mettez à niveau un site SharePoint du mode de compatibilité 2010 vers le mode de compatibilité 2013.

Lorsque vous mettez à niveau vos personnalisations SharePoint 2010 vers SharePoint, toutes les références aux pages maîtres personnalisées que vous avez créées reviennent à la page default.master. Si vous avez déployé une fonctionnalité qui contient une ou plusieurs pages maîtres personnalisées dans une collection de sites SharePoint mise à niveau qui s’exécute en mode de compatibilité SharePoint 2010, vous devez réinitialiser vos pages maîtres SharePoint lors de la mise à niveau vers le mode de compatibilité 2013. Cette rubrique explique comment utiliser un récepteur de fonctionnalités pour vous assurer que vos pages maîtres personnalisées SharePoint sont réinitialisées lors de la mise à niveau à partir de SharePoint 2010.

Use custom upgrade code to reset a master page

Comme l’explique les instructions fournies dans Déployer des fonctionnalités personnalisées sur des collections de sites mises à niveau dans SharePoint , lorsque vous effectuez une mise à niveau de SharePoint 2010 vers SharePoint, les collections de sites de votre batterie de serveurs s’exécutent en mode de compatibilité SharePoint 2010 par défaut. 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. Vous pouvez réinitialiser vos pages maîtres personnalisées 2013 à l’aide d’un récepteur de fonctionnalités lié à l’événement FeatureUpgrading .

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. Ajoutez une <UpgradeActions> section au fichier feature.xml et vérifiez que l’action s’applique uniquement à la version de la fonctionnalité actuellement utilisée pour le niveau de compatibilité « 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. Dans l’exemple, l’action UpgradeFeature est passée à l’implémentation de la méthode FeatureUpgrading(SPFeatureReceiverProperties, String, IDictionary<String, String>) que vous définirez ultérieurement après avoir ajouté un récepteur de fonctionnalités.

    <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. Ajoutez une <Properties> section au fichier 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.

    Figure 1. Fichier de code pour un récepteur d’événements dans une fonctionnalité

    Une fois que vous avez créé un récepteur d’événements pour votre fonction, un fichier de code apparaît sous la fonction.

    Ce fichier contient une méthode commentée et vide FeatureUpgrading . You'll use this method in the following step.

  5. Ouvrez le fichier de code et supprimez les marques de commentaire de la méthode FeatureUpgrading, qui remplace la méthode FeatureUpgrading(SPFeatureReceiverProperties, String, IDictionary<String, String>). The following example applies the My15MasterPage file that was specified earlier in the feature.xml file.

    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
        }
    }
    

Once you're done with the upgrade, you'll want to think about the future and long-term maintenance of your feature. Reportez-vous à Gestion du cycle de vie des applications dans SharePoint 2010 pour obtenir des conseils sur la gestion du code de confiance totale. Bien que cet article fasse référence spécifiquement à SharePoint 2010, il s’applique également au code de confiance totale dans SharePoint. If you aren't familiar with feature versioning and upgrade actions, refer to the Models for Solution Lifecycle Management section of this article. You should also look at Best Practices for Using Feature Versions.

Voir aussi