270 likes | 463 Views
Advanced Feature Development. Neil Iversen Inetium http://justaddcode.com. The Plan. Feature Refresher Feature Limitations Custom Actions Dealing with Dependencies Stapling Managing Files Feature Receivers Some Techniques Questions. Feature Refresher.
E N D
Advanced Feature Development Neil Iversen Inetium http://justaddcode.com
The Plan • Feature Refresher • Feature Limitations • Custom Actions • Dealing with Dependencies • Stapling • Managing Files • Feature Receivers • Some Techniques • Questions
Feature Refresher • Deployment vehicle for SharePoint applications • The Goal • Setup.exe style deployment • The Reality • Not exactly
Feature Refresher • Ability to customize SharePoint • Used extensively by SharePoint itself • Actions • Install/Uninstall • Activate/Deactivate • Stored in the Hive • 12\TEMPLATE\FEATURES • Separate directory for each feature • Scopes • Web, Site, Farm, Web App • Common Scenarios • List Templates • Workflow
Key Feature Limitations • Limited set of supported schemas • Supports fewer file options than Solutions • Must be bundled in Solutions for larger farms • Upgrading deployed features is difficult • Might not follow expected behavior
Mentioning Solutions • Bundled into one file (.wsp) • Can combine multiple features • Deploys across all web front ends • Can easily update SafeControls in web.config • Deploy Code Access Security (CAS)
Custom Actions • Create your own menu options • Many extensibility points • Main Attributes • Title • Location • GroupId • Sequence • HideCustomAction • Hides an existing Custom Action
Custom Actions • URL Prefixes • ~site – Relative link to the SPWeb • ~sitecollection – Relative link to the SPSite • URL Replacements • {ItemId} – List Item’s ID • {ItemUrl} – List Item URL • {ListId} – ID of the List • {SiteUrl} – Like ~site except it can be used anywhere • Example <CustomAction Id="325b7c78-f041-4d1b-856b-f9b1e49ddfeb" GroupId="PersonalActions" Location="Microsoft.SharePoint.StandardMenu" Sequence="1000" Title=“My Title" Description=“A Custom Action <UrlActionUrl=“javascript:alert(‘You were at {SiteUrl}’);"/> </CustomAction>
Managing Files in Features • Deploy a file into a site • Web • Document Library • URL can be aliased • MobileRedirect (\m) uses it • Not as powerful as Solutions • Uninstall behavior is non-intuitive • Example: <Elements xmlns="http://schemas.microsoft.com/sharepoint/"> <Module Name=“file" Url=“” Path=“”"> <File Url=“MyFile.aspx" /> </Module> </Elements>
Dealing with Dependencies • Problem: Feature depends on another SharePoint Object • Solution: Create dependency between the features • Example • <ActivationDependencies> <ActivationDependency FeatureId="52890518-036f- 4027-babd-f4c7df3ee429" /> <ActivationDependency FeatureId="6d276cfc-1c84- 46cc-8566-500e66213e06 " /> </ActivationDependencies>
Dependency Limitations • Feature Chains • Limited to one visible feature • Dependencies can’t be triggered at a higher scope • Ex: Farm Feature can’t depend on a Web Feature • Features can’t be automatically activated at different scopes • Ex: Web Feature can’t activate a Farm Feature • Hidden Features • Automatically Activated for Dependencies • Automatically Deactivated when the last Dependency is Deactivated • Can’t be depended on in different scopes • Can’t have their own dependencies • Can add an additional level to Feature Chains
Stapling • Problem: Can’t customize out of the box Site Definitions • Solution: Stapling! • Scopes: Farm, Web App, Site • Note: Not Web • FeatureSiteTemplateAssociation • <FeatureSiteTemplateAssociation Id="b04e59b1-2c21-48fa-9497-470b1ab711b0" TemplateName="STS#0" /> • <FeatureSiteTemplateAssociation Id="fd45b13f-6334-4bce-b87c-49e3f820a74c" TemplateName=“GLOBAL#0" />
Feature Receivers • The ‘Custom’ Feature • .NET Code • Override • FeatureInstalled, FeatureUninstalling • FeatureActivated, FeatureDeactivating • Example • <Feature Id="0a7e1ca9-ee71-4407-80a0-b5b57f4f6f5d" Title=“My Feature Reciever" Scope="Site" ReceiverAssembly=“MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e35a4d2663eae0ae" ReceiverClass=“MyAssembly.MyFeatureReciever" xmlns="http://schemas.microsoft.com/sharepoint/">
Feature Receivers – Getting Context • Getting Context • Retrieving the Current Scoped Object • SPFeatureReceiverProperties • SPFeatureReceiverProperties.Feature.Parent • Cast to the appropriate type • Scope: Web • SPWeb web = (SPWeb)properties.Feature.Parent; • SPSite site = (SPSite)properties.Feature.Parent • Example Usages • Perform clean uninstalls of features • ‘Upgrade’ features using Activate • Set dependencies to chain actions together • Web.config changes • Address gaps in current supported Features • Policies, Custom Fields, …
Feature Receivers - Debugging • Based on Deployment/Activation Method • Stsadm • Runs as currently logged in user • Console.WriteLine • Web Interface • Runs as App Pool user • Need to use logger (EventLog, or some Logging code) • DLL Deployment • Overwrite Existing DLL • iisreset
Feature Properties • Configuration for your Feature • Allow different values for Dev/Test/Prod • Combine with scoped property bags to set configurations • Example <Properties> <Property Key=“MyKey" Value=“123" /> <Property Key=“DBServer" Value=“prodsql001" /> </Properties>
Manually Activating Features • Why? • Evade chaining restrictions (at your own peril) • Working with Hidden Features • Manage Stages of a Site with a Web Part • Creating a ‘Suicide Feature’
Manually Activating Features • Get your Context • Ex: SPWeb • Find the Feature Collection • Ex: SPWeb.Features • Find the Feature’s Guid • Ex: Guid featureGuid = new Guid(“0a7e1ca9-ee71-4407-80a0-b5b57f4f6f5d”) • Activate! • Ex: SPWeb.Features.Add(featureGuid)
Your Feedback is Important Please fill out a session evaluation form and either put them in the basket near the exit or drop them off at the conference registration desk. Thank you!
Thanks! Neil Iversen Inetium http://justaddcode.com • Other Sessions: • SharePoint 212 – Customizing the Mobile Experience • When – Thursday 11:15am • Where – Mandalay Bay B • SharePoint 314 – PowerShell for SharePoint Developers • When – Thursday 2pm • Where – Mandalay Bay B