Enhancing SharePoint Development: Insights from MODIG Meetup - February 21, 2008
Join the Minneapolis Office Developer Interest Group (MODIG) as we delve into feature development for SharePoint applications. Presented by Neil Iversen from Inetium, this meeting will cover essential topics including features and limitations, custom actions, file management, and dependency handling. Participate in presentations, discussions, and share your cool projects with the community. We aim to foster a collaborative environment for SharePoint developers to exchange knowledge and best practices. Become part of our community and enhance your SharePoint solutions!
Enhancing SharePoint Development: Insights from MODIG Meetup - February 21, 2008
E N D
Presentation Transcript
Minneapolis Office Developer Interest Group (MODIG) Neil Iversen Inetium February 21, 2008 Solutions and Feature Development http://justaddcode.com/
The Plan • Introduction You are here • Feature Presentation • Solutions and Features • Next Topic Selection • Random Stuff
User Group Goals • Provide a community for SharePoint Developers • Share development knowledge • Exchange tips/tricks/other • Understand SPUtility as a metaphor for life
User Group Format • Presentations • 1-2 per meeting • Hopefully Demo Heavy • Highlights of Nifty Things • See next slide • QA/Discussion/Random Things
Call for Cool Stuff • Created something cool? • Send Screenshots or Videos • We’ll try to feature some items here
Sharepointmn.com/pages/modig.aspx • Our current home • Convenient URL • Meeting information • Previous presentations • Running on SharePoint • As required by SharePoint User Group Law
Upcoming • Next Meeting • Week Of: March 17-20 (Watch your email) • Topic: TBD – Hopefully later today • MNSPUG • March 12 (9:00am – Noon) • Topic : TBD (sharepointmn.com)
Solutions and Features • Feature Intro • Feature Limitations • Custom Actions • Dealing with Dependencies • Stapling • Managing Files • Feature Receivers • Solutions • Questions
Feature Introduction • Deployment vehicle for SharePoint applications • The Goal • Setup.exe style deployment • The Reality • Not exactly
Feature Introduction • 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\Removing deployed features is difficult • Might not follow expected behavior
Feature Lifecycle • Normal Behavior • Farm Behavior
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> <ActivationDependencyFeatureId="52890518-036f- 4027-babd-f4c7df3ee429" /> <ActivationDependencyFeatureId="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 Recievers • 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 Recievers - Debugging • Based on Deployment/Activation Method • Stsadm • Runs as currently logged in user • Debug/Console.WriteLine • System.Diagnostics.Debugger.Launch(); • Web Interface • Runs as App Pool user • Need to use logger (EventLog, or some Logging code) • Attach to w3wp.exe • DLL Deployment • Overwrite Existing DLL • iisreset • stsadm –o activatefeature -force
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 a Feature • Get your Context • Ex: SPWeb • Find the Feature Collection • Ex: SPWeb.Features • Find the Feature’s Guid • Ex: GuidfeatureGuid = new Guid(“0a7e1ca9-ee71-4407-80a0-b5b57f4f6f5d”) • Activate! • Ex: SPWeb.Features.Add(featureGuid)
Solutions • Replaces copying files across servers • …with creating XML/DDF files • Can Easily Deploy • Multiple Features • Web Parts • Assemblies (GAC or BIN) • SafeControls • Code Access Security Settings • Plain Files • Farm Safe
Anatomy of a Solution • Manifest.xml • XML to define what you want SharePoint to do • Needs to be included in the DDF • The DDF • Defines what ‘makecab’ cabs • Slightly headache inducing file format • WSP == CAB
Summary • Features are Nifty • Solutions are Useful • Getting full value from either has a learning curve
Next Meeting Planning • Possible Topics • PowerShell and SharePoint for Developers • Extending SharePoint with Custom Fields (Column Types) • …
Random Stuff Neil Iversen Inetium http://justaddcode.com Feedback Forms/Giveaway Mingle, Eat, Feedback See you next time!