2009-09-25 8 views
3

J'ai un package wsp qui contient de nombreuses fonctionnalités. Certaines fonctionnalités incluses dans le package wsp dépendent d'autres fonctionnalités qui se trouvent également dans le package wsp.Minutage dans le déploiement de fonctionnalités SharePoint

Dans mon cas, 2 types de contenu sont créés par des fonctionnalités (contenu de type A et de contenu de type B) et le contenu de type B hérite de type de contenu A.

Alors évidemment, la fonction qui contient le type de contenu A (La fonction A) doit être déployée avant la fonction qui contient le type de contenu B (fonction B).

Existe-t-il un moyen de déployer la fonctionnalité A avant la fonction B? Idéalement, les deux fonctionnalités seraient activées automatiquement via le fichier onet.xml et la fonctionnalité A serait juste déployée avant, mais je n'ai aucune idée de la façon de le faire ...

Je ne cherche pas forcément une solution qui résout ce problème particulier, mais je veux savoir est: Comment gérez-vous les fonctionnalités qui dépendent d'autres fonctionnalités dans un projet SharePoint?

Merci!

Répondre

3

Vous pouvez utiliser la fonction dépendances d'activation de fonctions.

<Feature Id="01c34560-6561-11dc-8314-0800200c9a66? 
    Title="Nice to know" 
    Description="This is a feature that adds a new sexy CSS" 
    Version="1.0.0.0? 
    Scope="Site" 
    xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <ActivationDependencies> 
    <ActivationDependency FeatureId="F6924D36-2FA8-4f0b-B16D-06B7250180FA"/> 
    </ActivationDependencies> 
    <ElementManifests> 
    <ElementManifest Location="ProvisionedFiles.xml"/> 
    </ElementManifests> 
</Feature> 

Pour un aperçu, reportez-vous à look here.

+0

Merci, c'est exactement ce que je avais besoin. –

1

Vous pouvez utiliser les dépendances d'activation pour associer des entités entre elles. Vous utilisez le

<ActivationDependencies> 
<ActivationDependency> 

éléments xml dans le fichier de caractéristiques. Vous pouvez en lire plus à ce sujet ici: http://msdn.microsoft.com/en-us/library/aa543162.aspx

4

Vous pouvez également créer un gestionnaire d'événements et activer les fonctions dans l'ordre souhaité. Je l'ai toujours trouvé préférable de faire des choses manuellement dans le code plutôt que d'utiliser les fichiers xml pour faire quelque chose.

Jetez un oeil à SPWeb.Features et FeatureCollections.Add

Voici un exemple de la façon dont je codé dans mon gestionnaire d'événements

public void ActivateFeatures(SPFeatureReceiverProperties properties) 
{ 
    logger.Info("Creating content types"); 
    // feature is scoped at Site, so the parent is type SPSite rather than SPWeb.. 
    using (SPSite site = properties.Feature.Parent as SPSite) 
    { 
     SPWeb currentWeb = null; 
     if (site != null) 
     { 
      currentWeb = site.RootWeb; 
     } 
     else 
     { 
      currentWeb = properties.Feature.Parent as SPWeb; 
     } 

     using (currentWeb) 
     { 
      if (currentWeb == null) return; 

      try 
      { 
       currentWeb.Site.Features.Add(new Guid("01A27C0C-2E44-4298-A74F-8F50601A20B0")); // ctCategory 
       currentWeb.Site.Features.Add(new Guid("496DFE3E-A41E-46e8-B627-29775F376017")); // ctChapter 
       currentWeb.Site.Features.Add(new Guid("F2ECBD5A-4766-49bf-A158-62550661E141")); // ctChapterList 
       currentWeb.Site.Features.Add(new Guid("8C91646F-1466-49d7-BB53-B666F164AA96")); // ctComments 
       currentWeb.Site.Features.Add(new Guid("112E1564-FA1C-41fd-853A-F7569C555905")); // ctDocument 
       currentWeb.Site.Features.Add(new Guid("48BD5A07-8DD1-46ef-9F05-9824380BA26E")); // ctExternalReviewer 
       currentWeb.Site.Features.Add(new Guid("20553A8E-8272-400c-816D-6EE8E02F34E9")); // ctStandard 
       currentWeb.Site.Features.Add(new Guid("E84259BD-E4B3-465e-8928-1745F8760F2D")); // ctSuggestion 
       currentWeb.Site.Features.Add(new Guid("0B313654-D296-4bfa-8F21-E4FF33C1DD6C")); // ctTask 
       currentWeb.Site.Features.Add(new Guid("EFDA877B-B686-4954-9F1A-65ADB32B2E50")); // ctDepartment 
       currentWeb.Site.Features.Add(new Guid("4E4B984E-65E2-4601-A216-2C4D08AA97AE")); // ctInnerWork 
       currentWeb.Site.Features.Add(new Guid("4D85D4B9-1909-45cd-81C7-CDBB0874492F")); // ctOtherDocuments 
       logger.Info("Content types added successfully"); 
      } 
      catch (Exception ex) 
      { 
       logger.Error("Could not in activate content types.", ex); 
      } 
     } 
    } 
} 
+0

+1 - Je préfère cette approche à ActivationDependencies. Peut-être que je suis un fan de contrôle mais j'aime gérer l'ordre d'activation manuellement :) – dariom

Questions connexes