SlideShare une entreprise Scribd logo
1  sur  30
Advanced SharePoint Web Part Development
Rob Windsor
rob@robwindsor.com
@robwindsor
About Me
 Senior SharePoint Consultant
 Technical Contributor to the Pluralsight On-Demand Library
 Microsoft MVP, MCPD, MCT
 Founder and Past-President of the North Toronto .NET UG
 Co-author of Prof. Visual Basic 2012 and .NET 4.5 (Wrox)
Session Prerequisites
 Experience developing for SharePoint
 Experience building Web Parts
 Experience with JavaScript and jQuery
Agenda
 Script Parts
 Persistent Web Part Properties
 Editor Parts
 Script Part Properties
 Connectable Web Parts
 Asynchronous Web Parts
 Web Part Gallery
 Web Part Pages
DEMO
Basic Web Parts
Script Parts
 Web parts implemented using only JavaScript
 Why?
 Can’t deploy farm solutions to SharePoint Online
 Sandbox solutions with managed code are deprecated
 Restrictions
 Can’t create custom web parts without managed code
 Must use OOB web parts to implement script parts
 Implementation
 Use modules to provision JavaScript/HTML files
 Use custom actions to load common JavaScript files
 Use Content Editor Web Part to inject HTML and JavaScript into page
DEMO
Script Part
Web Part Properties
 Web Parts support persistent properties
 Configure properties via attributes
 Personalizable(param)
 Directs SharePoint to persist property value
 Parameter indicates if property may be personalized
 WebBrowsable(true)
 Directs SharePoint to generate interface to edit property
 WebDisplayName, WebDescription
 The prompt and tooltip that accompany the data entry element
 Category
 The group in which the properties will be shown
[Personalizable(PersonalizationScope.Shared)]
[WebBrowsable(true)]
[WebDisplayName("Year")]
[Category("Pluralsight")]
public int Year { get; set; }
DEMO
Web Part Properties
Editor Parts
 Editor parts enable user customization
 Editor parts contained within an editor
zone
 ASP.NET supplies standard editor parts
 Layout, appearance, etc
 Developers can create custom editor
parts
 Similar development experience to Web Part
 Control over interface used to edit properties
 Ability to validate user input
 In web part
 Override CreateEditorParts
 In editor part
 Override CreateChildControls, SyncChanges and
ApplyChanges
DEMO
Editor Parts
Script Part Properties
 No way to implement real web part properties without managed code
 We can emulate the user experience
 Property values stored in element attribute
 Detect when property editor is open
 Add data entry controls into editor using jQuery
 Capture submit event and retrieve values
 Update attribute containing property values
 Use native script editor web part persistence mechanism
 Alternative implementation
 Build Custom Web Part Properties with JSOM
 vxcompany.com/kennis/blog/2014/10/02/build-custom-web-part-properties-jsom/
DEMO
Script Part Properties
IMPORTANT: This demo is a
proof of concept only. It is
nowhere near production
ready!
Creating Connectable Web Parts
 Pass data from one web part to another
 Loosely-coupled connection
 Communication managed by WebPartManager
 Provider web part supplies data
 Consumer web parts retrieve data
 Interface used to define data contract
 ASP.NET has standard connection contracts
 Shown later in this module
 Can use custom connection contracts
 SharePoint provides user interface elements to establish
connections
 Not compatible with sandboxed solutions
DEMO
Web Part Connections
Web Part Connections using Ajax
 Communication between web parts requires a postback
 Generally, only consumer web part needs to be updated
 Can use partial page rendering (UpdatePanel) to only update
consumer
 Problem:
 Event triggered by provider
 UpdatePanel in consumer
 Solution:
 Pass reference to control that triggers update from provider to consumer
 Consumer registers control as AsyncPostbackControl with
ScriptManager
DEMO
Web Part Connections
Using Ajax
Asynchronous Loading of Web Parts
 Long running tasks are blocking calls
 One web part can bring a page to a crawl
 When on the same page, multiple instances can kill the user experience
 Make long running tasks asynchronous
 Don’t hold up page processing
Asynchronous Loading of Web Parts
protected void Page_PreRender(object sender, EventArgs e) {
_func = new Func<XDocument>(GetFeed);
Page.RegisterAsyncTask(
new PageAsyncTask(
new BeginEventHandler(BeginFeed),
new EndEventHandler(EndFeed),
new EndEventHandler(TimoutFeed),
null, true));
}
public IAsyncResult BeginFeed(object sender, EventArgs e, AsyncCallback cb, object state) {
return _func.BeginInvoke(cb, state);
}
public void EndFeed(IAsyncResult ar) {
var feed = _func.EndInvoke(ar);
var posts = from item in feed.Descendants("item")
select new {
Title = item.Element("title").Value,
Description = item.Element("description").Value,
Published = DateTime.Parse(item.Element("pubDate").Value)
};
posts = posts.Skip(_pageNum * PageSize).Take(PageSize);
FeedListView.DataSource = posts.ToList();
FeedListView.DataBind();
}
DEMO
Async Loading of Web
Parts
Minimal Download Strategy
 All controls on a page must be marked as MdsCompliant for
page to use Minimal Download Strategy
 MdsCompliant Restrictions:
 HTML style and script tags are not supported
 Use CssRegistration and ScriptLink instead
 Using Response object to write to page is not supported
 Use SPHttpUtility.Write* instead
 Inline code must be wrapped in SharePoint:ScriptBlock element
 For more information see Modify SharePoint components for MDS
 http://msdn.microsoft.com/library/office/dn456543.aspx
DEMO
MdsCompliant
Cleaning the Web Part Gallery
 Files provisioned into Content DB do not get removed on
Feature deactivation
 This includes webpart / dwp files added to Web Part Gallery
 Deletion of files can be done in Feature receiver
 Examine element manifests to find web parts
 Remove from web part gallery
Cleaning the Web Part Gallery
public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
var site = properties.Feature.Parent as SPSite;
if (site == null) return;
var parts = new List<string>();
var elements = properties.Definition.GetElementDefinitions(CultureInfo.CurrentCulture);
foreach (SPElementDefinition element in elements) {
if (element.ElementType != "Module") continue;
var node = element.XmlDefinition;
if (node.Attributes["Url"].Value != "_catalogs/wp") continue;
foreach (XmlElement childNode in node.ChildNodes) {
if (childNode.Name == "File") {
parts.Add(childNode.GetAttribute("Url"));
}
}
}
var web = site.RootWeb;
var gallery = web.Lists["Web Part Gallery"];
var items = gallery.Items;
for (int i = items.Count - 1; i >= 0; i--) {
var item = items[i];
if (parts.Contains(item.File.Name)) {
item.Delete();
}
}
}
DEMO
Cleaning the Web Part
Gallery
Creating Web Part Page Templates
 Create a site page
 Set base type to
Microsoft.SharePoint.WebPartPages.WebPartPage
 Add one or more web part zones to page
 Provision page instances using Module
<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<!-- Other register directives -->
<%@ Register Tagprefix="WebPartPages"
Namespace="Microsoft.SharePoint.WebPartPages"
Assembly="Microsoft.SharePoint, Version=14.0.0.0, …" %>
<%@ Page Language="C#"
Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage"
MasterPageFile="~masterurl/default.master" %>
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
<WebPartPages:WebPartZone
ID="MainZone" runat="server"
FrameType="TitleBarOnly"
Title="Main Web Part Zone" />
</asp:Content>
Adding Web Parts to Web Part Pages
 Use SPLimitedWebPartManager
 Get reference from property of Page object
 Use SPLimitedWebPartManager.AddWebPart to add
var page = web.GetFile("SiteAssets/Test02.aspx");
using (var manager = page.GetLimitedWebPartManager(
PersonalizationScope.Shared)) {
if (!manager.WebParts.Contains(webPartTitle))
{
var part = new MostPopularProducts2.MostPopularProducts2();
part.Title = "Most Popular Products";
part.Category = "Condiments";
part.Year = 1997;
manager.AddWebPart(part, "Left", 0);
}
}
Note: Contains method shown in code sample is a custom extension
DEMO
Creating Web Part Pages
and Adding Web Parts
Additional Stuff
 Closing versus deleting web parts
 Closing a web part does not remove it from page
 Having many closed web parts on a page can degrade performance
 Set AllowClose to false to remove option to close from web part verbs
 Versioning
 DO NOT change the assembly version of your assemblies
 SharePoint stores the full name with version of all web parts in galleries
and on pages
 Use the AssemblyFileVersion instead
Thank You
 Big thanks to the organizers, sponsors and you for
making this event possible
 Please fill out your evaluation
 Please keep in touch
rob@robwindsor.com
@robwindsor
msmvps.com/blogs/windsor

Contenu connexe

Tendances

JavaScript and jQuery for SharePoint Developers
JavaScript and jQuery for SharePoint DevelopersJavaScript and jQuery for SharePoint Developers
JavaScript and jQuery for SharePoint DevelopersRob Windsor
 
Understanding and programming the SharePoint REST API
Understanding and programming the SharePoint REST APIUnderstanding and programming the SharePoint REST API
Understanding and programming the SharePoint REST APIChris Beckett
 
Develop iOS and Android apps with SharePoint/Office 365
Develop iOS and Android apps with SharePoint/Office 365Develop iOS and Android apps with SharePoint/Office 365
Develop iOS and Android apps with SharePoint/Office 365Kashif Imran
 
Introduction to the SharePoint 2013 REST API
Introduction to the SharePoint 2013 REST APIIntroduction to the SharePoint 2013 REST API
Introduction to the SharePoint 2013 REST APISparkhound Inc.
 
Taking Advantage of the SharePoint 2013 REST API
Taking Advantage of the SharePoint 2013 REST APITaking Advantage of the SharePoint 2013 REST API
Taking Advantage of the SharePoint 2013 REST APIEric Shupps
 
Are you getting Sleepy. REST in SharePoint Apps
Are you getting Sleepy. REST in SharePoint AppsAre you getting Sleepy. REST in SharePoint Apps
Are you getting Sleepy. REST in SharePoint AppsLiam Cleary [MVP]
 
SharePoint 2013 REST API & Remote Authentication
SharePoint 2013 REST API & Remote AuthenticationSharePoint 2013 REST API & Remote Authentication
SharePoint 2013 REST API & Remote AuthenticationAdil Ansari
 
SharePoint 2013 APIs
SharePoint 2013 APIsSharePoint 2013 APIs
SharePoint 2013 APIsJohn Calvert
 
Who Are You and What Do You Want? Working with OAuth in SharePoint 2013.
Who Are You and What Do You Want? Working with OAuth in SharePoint 2013.Who Are You and What Do You Want? Working with OAuth in SharePoint 2013.
Who Are You and What Do You Want? Working with OAuth in SharePoint 2013.Eric Shupps
 
CSOM (Client Side Object Model). Explained @ SharePoint Saturday Houston
CSOM (Client Side Object Model). Explained @ SharePoint Saturday HoustonCSOM (Client Side Object Model). Explained @ SharePoint Saturday Houston
CSOM (Client Side Object Model). Explained @ SharePoint Saturday HoustonKunaal Kapoor
 
Toms introtospring mvc
Toms introtospring mvcToms introtospring mvc
Toms introtospring mvcGuo Albert
 
Working With Sharepoint 2013 Apps Development
Working With Sharepoint 2013 Apps DevelopmentWorking With Sharepoint 2013 Apps Development
Working With Sharepoint 2013 Apps DevelopmentPankaj Srivastava
 
Ch 04 asp.net application
Ch 04 asp.net application Ch 04 asp.net application
Ch 04 asp.net application Madhuri Kavade
 
Server Controls of ASP.Net
Server Controls of ASP.NetServer Controls of ASP.Net
Server Controls of ASP.NetHitesh Santani
 
SPTechCon 2014 How to develop and debug client side code in SharePoint
SPTechCon 2014 How to develop and debug client side code in SharePointSPTechCon 2014 How to develop and debug client side code in SharePoint
SPTechCon 2014 How to develop and debug client side code in SharePointMark Rackley
 
Introduction to using jQuery with SharePoint
Introduction to using jQuery with SharePointIntroduction to using jQuery with SharePoint
Introduction to using jQuery with SharePointRene Modery
 
ASP.NET Overview - Alvin Lau
ASP.NET Overview - Alvin LauASP.NET Overview - Alvin Lau
ASP.NET Overview - Alvin LauSpiffy
 
Office 2013 loves web developers slide
Office 2013 loves web developers   slideOffice 2013 loves web developers   slide
Office 2013 loves web developers slideFabio Franzini
 

Tendances (20)

JavaScript and jQuery for SharePoint Developers
JavaScript and jQuery for SharePoint DevelopersJavaScript and jQuery for SharePoint Developers
JavaScript and jQuery for SharePoint Developers
 
Understanding and programming the SharePoint REST API
Understanding and programming the SharePoint REST APIUnderstanding and programming the SharePoint REST API
Understanding and programming the SharePoint REST API
 
Develop iOS and Android apps with SharePoint/Office 365
Develop iOS and Android apps with SharePoint/Office 365Develop iOS and Android apps with SharePoint/Office 365
Develop iOS and Android apps with SharePoint/Office 365
 
Introduction to the SharePoint 2013 REST API
Introduction to the SharePoint 2013 REST APIIntroduction to the SharePoint 2013 REST API
Introduction to the SharePoint 2013 REST API
 
Taking Advantage of the SharePoint 2013 REST API
Taking Advantage of the SharePoint 2013 REST APITaking Advantage of the SharePoint 2013 REST API
Taking Advantage of the SharePoint 2013 REST API
 
Are you getting Sleepy. REST in SharePoint Apps
Are you getting Sleepy. REST in SharePoint AppsAre you getting Sleepy. REST in SharePoint Apps
Are you getting Sleepy. REST in SharePoint Apps
 
Sharepoint Online
Sharepoint OnlineSharepoint Online
Sharepoint Online
 
Asp.net.
Asp.net.Asp.net.
Asp.net.
 
SharePoint 2013 REST API & Remote Authentication
SharePoint 2013 REST API & Remote AuthenticationSharePoint 2013 REST API & Remote Authentication
SharePoint 2013 REST API & Remote Authentication
 
SharePoint 2013 APIs
SharePoint 2013 APIsSharePoint 2013 APIs
SharePoint 2013 APIs
 
Who Are You and What Do You Want? Working with OAuth in SharePoint 2013.
Who Are You and What Do You Want? Working with OAuth in SharePoint 2013.Who Are You and What Do You Want? Working with OAuth in SharePoint 2013.
Who Are You and What Do You Want? Working with OAuth in SharePoint 2013.
 
CSOM (Client Side Object Model). Explained @ SharePoint Saturday Houston
CSOM (Client Side Object Model). Explained @ SharePoint Saturday HoustonCSOM (Client Side Object Model). Explained @ SharePoint Saturday Houston
CSOM (Client Side Object Model). Explained @ SharePoint Saturday Houston
 
Toms introtospring mvc
Toms introtospring mvcToms introtospring mvc
Toms introtospring mvc
 
Working With Sharepoint 2013 Apps Development
Working With Sharepoint 2013 Apps DevelopmentWorking With Sharepoint 2013 Apps Development
Working With Sharepoint 2013 Apps Development
 
Ch 04 asp.net application
Ch 04 asp.net application Ch 04 asp.net application
Ch 04 asp.net application
 
Server Controls of ASP.Net
Server Controls of ASP.NetServer Controls of ASP.Net
Server Controls of ASP.Net
 
SPTechCon 2014 How to develop and debug client side code in SharePoint
SPTechCon 2014 How to develop and debug client side code in SharePointSPTechCon 2014 How to develop and debug client side code in SharePoint
SPTechCon 2014 How to develop and debug client side code in SharePoint
 
Introduction to using jQuery with SharePoint
Introduction to using jQuery with SharePointIntroduction to using jQuery with SharePoint
Introduction to using jQuery with SharePoint
 
ASP.NET Overview - Alvin Lau
ASP.NET Overview - Alvin LauASP.NET Overview - Alvin Lau
ASP.NET Overview - Alvin Lau
 
Office 2013 loves web developers slide
Office 2013 loves web developers   slideOffice 2013 loves web developers   slide
Office 2013 loves web developers slide
 

Similaire à Advanced SharePoint Web Part Development

Tutorial, Part 4: SharePoint 101: Jump-Starting the Developer by Rob Windsor ...
Tutorial, Part 4: SharePoint 101: Jump-Starting the Developer by Rob Windsor ...Tutorial, Part 4: SharePoint 101: Jump-Starting the Developer by Rob Windsor ...
Tutorial, Part 4: SharePoint 101: Jump-Starting the Developer by Rob Windsor ...SPTechCon
 
Asp.net By Durgesh Singh
Asp.net By Durgesh SinghAsp.net By Durgesh Singh
Asp.net By Durgesh Singhimdurgesh
 
SharePoint Object Model, Web Services and Events
SharePoint Object Model, Web Services and EventsSharePoint Object Model, Web Services and Events
SharePoint Object Model, Web Services and EventsMohan Arumugam
 
Apache Wicket Web Framework
Apache Wicket Web FrameworkApache Wicket Web Framework
Apache Wicket Web FrameworkLuther Baker
 
SharePoint Development with the SharePoint Framework
SharePoint Development with the SharePoint FrameworkSharePoint Development with the SharePoint Framework
SharePoint Development with the SharePoint FrameworkJoAnna Cheshire
 
Asp.Net Ajax Component Development
Asp.Net Ajax Component DevelopmentAsp.Net Ajax Component Development
Asp.Net Ajax Component DevelopmentChui-Wen Chiu
 
Web Components v1
Web Components v1Web Components v1
Web Components v1Mike Wilcox
 
OttawaJS - React
OttawaJS - ReactOttawaJS - React
OttawaJS - Reactrbl002
 
Creating Web Parts New
Creating Web Parts NewCreating Web Parts New
Creating Web Parts NewLiquidHub
 
Creating Web Parts New
Creating Web Parts NewCreating Web Parts New
Creating Web Parts NewLiquidHub
 
Creating Web Parts New
Creating Web Parts NewCreating Web Parts New
Creating Web Parts NewLiquidHub
 
Parallelminds.web partdemo1
Parallelminds.web partdemo1Parallelminds.web partdemo1
Parallelminds.web partdemo1parallelminder
 
Improving Your Selenium WebDriver Tests - Belgium testing days_2016
Improving Your Selenium WebDriver Tests - Belgium testing days_2016Improving Your Selenium WebDriver Tests - Belgium testing days_2016
Improving Your Selenium WebDriver Tests - Belgium testing days_2016Roy de Kleijn
 
Spicing up SharePoint web parts
Spicing up SharePoint web partsSpicing up SharePoint web parts
Spicing up SharePoint web partsRandy Williams
 

Similaire à Advanced SharePoint Web Part Development (20)

Tutorial, Part 4: SharePoint 101: Jump-Starting the Developer by Rob Windsor ...
Tutorial, Part 4: SharePoint 101: Jump-Starting the Developer by Rob Windsor ...Tutorial, Part 4: SharePoint 101: Jump-Starting the Developer by Rob Windsor ...
Tutorial, Part 4: SharePoint 101: Jump-Starting the Developer by Rob Windsor ...
 
Asp.net By Durgesh Singh
Asp.net By Durgesh SinghAsp.net By Durgesh Singh
Asp.net By Durgesh Singh
 
SharePoint Object Model, Web Services and Events
SharePoint Object Model, Web Services and EventsSharePoint Object Model, Web Services and Events
SharePoint Object Model, Web Services and Events
 
Apache Wicket Web Framework
Apache Wicket Web FrameworkApache Wicket Web Framework
Apache Wicket Web Framework
 
SharePoint Development with the SharePoint Framework
SharePoint Development with the SharePoint FrameworkSharePoint Development with the SharePoint Framework
SharePoint Development with the SharePoint Framework
 
Asp.Net Ajax Component Development
Asp.Net Ajax Component DevelopmentAsp.Net Ajax Component Development
Asp.Net Ajax Component Development
 
Intro react js
Intro react jsIntro react js
Intro react js
 
ASP.NET Lecture 1
ASP.NET Lecture 1ASP.NET Lecture 1
ASP.NET Lecture 1
 
Web Components v1
Web Components v1Web Components v1
Web Components v1
 
Web driver training
Web driver trainingWeb driver training
Web driver training
 
OttawaJS - React
OttawaJS - ReactOttawaJS - React
OttawaJS - React
 
Creating Web Parts New
Creating Web Parts NewCreating Web Parts New
Creating Web Parts New
 
Creating Web Parts New
Creating Web Parts NewCreating Web Parts New
Creating Web Parts New
 
Creating Web Parts New
Creating Web Parts NewCreating Web Parts New
Creating Web Parts New
 
Parallelminds.web partdemo1
Parallelminds.web partdemo1Parallelminds.web partdemo1
Parallelminds.web partdemo1
 
Improving Your Selenium WebDriver Tests - Belgium testing days_2016
Improving Your Selenium WebDriver Tests - Belgium testing days_2016Improving Your Selenium WebDriver Tests - Belgium testing days_2016
Improving Your Selenium WebDriver Tests - Belgium testing days_2016
 
Spicing up SharePoint web parts
Spicing up SharePoint web partsSpicing up SharePoint web parts
Spicing up SharePoint web parts
 
Customizing Oracle EBS OA Framework
Customizing Oracle EBS OA FrameworkCustomizing Oracle EBS OA Framework
Customizing Oracle EBS OA Framework
 
ASP.NET Lecture 6
ASP.NET Lecture 6ASP.NET Lecture 6
ASP.NET Lecture 6
 
ASP.NET - Web Programming
ASP.NET - Web ProgrammingASP.NET - Web Programming
ASP.NET - Web Programming
 

Dernier

Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 

Dernier (20)

Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 

Advanced SharePoint Web Part Development

  • 1. Advanced SharePoint Web Part Development Rob Windsor rob@robwindsor.com @robwindsor
  • 2. About Me  Senior SharePoint Consultant  Technical Contributor to the Pluralsight On-Demand Library  Microsoft MVP, MCPD, MCT  Founder and Past-President of the North Toronto .NET UG  Co-author of Prof. Visual Basic 2012 and .NET 4.5 (Wrox)
  • 3. Session Prerequisites  Experience developing for SharePoint  Experience building Web Parts  Experience with JavaScript and jQuery
  • 4. Agenda  Script Parts  Persistent Web Part Properties  Editor Parts  Script Part Properties  Connectable Web Parts  Asynchronous Web Parts  Web Part Gallery  Web Part Pages
  • 6. Script Parts  Web parts implemented using only JavaScript  Why?  Can’t deploy farm solutions to SharePoint Online  Sandbox solutions with managed code are deprecated  Restrictions  Can’t create custom web parts without managed code  Must use OOB web parts to implement script parts  Implementation  Use modules to provision JavaScript/HTML files  Use custom actions to load common JavaScript files  Use Content Editor Web Part to inject HTML and JavaScript into page
  • 8. Web Part Properties  Web Parts support persistent properties  Configure properties via attributes  Personalizable(param)  Directs SharePoint to persist property value  Parameter indicates if property may be personalized  WebBrowsable(true)  Directs SharePoint to generate interface to edit property  WebDisplayName, WebDescription  The prompt and tooltip that accompany the data entry element  Category  The group in which the properties will be shown [Personalizable(PersonalizationScope.Shared)] [WebBrowsable(true)] [WebDisplayName("Year")] [Category("Pluralsight")] public int Year { get; set; }
  • 10. Editor Parts  Editor parts enable user customization  Editor parts contained within an editor zone  ASP.NET supplies standard editor parts  Layout, appearance, etc  Developers can create custom editor parts  Similar development experience to Web Part  Control over interface used to edit properties  Ability to validate user input  In web part  Override CreateEditorParts  In editor part  Override CreateChildControls, SyncChanges and ApplyChanges
  • 12. Script Part Properties  No way to implement real web part properties without managed code  We can emulate the user experience  Property values stored in element attribute  Detect when property editor is open  Add data entry controls into editor using jQuery  Capture submit event and retrieve values  Update attribute containing property values  Use native script editor web part persistence mechanism  Alternative implementation  Build Custom Web Part Properties with JSOM  vxcompany.com/kennis/blog/2014/10/02/build-custom-web-part-properties-jsom/
  • 13. DEMO Script Part Properties IMPORTANT: This demo is a proof of concept only. It is nowhere near production ready!
  • 14. Creating Connectable Web Parts  Pass data from one web part to another  Loosely-coupled connection  Communication managed by WebPartManager  Provider web part supplies data  Consumer web parts retrieve data  Interface used to define data contract  ASP.NET has standard connection contracts  Shown later in this module  Can use custom connection contracts  SharePoint provides user interface elements to establish connections  Not compatible with sandboxed solutions
  • 16. Web Part Connections using Ajax  Communication between web parts requires a postback  Generally, only consumer web part needs to be updated  Can use partial page rendering (UpdatePanel) to only update consumer  Problem:  Event triggered by provider  UpdatePanel in consumer  Solution:  Pass reference to control that triggers update from provider to consumer  Consumer registers control as AsyncPostbackControl with ScriptManager
  • 18. Asynchronous Loading of Web Parts  Long running tasks are blocking calls  One web part can bring a page to a crawl  When on the same page, multiple instances can kill the user experience  Make long running tasks asynchronous  Don’t hold up page processing
  • 19. Asynchronous Loading of Web Parts protected void Page_PreRender(object sender, EventArgs e) { _func = new Func<XDocument>(GetFeed); Page.RegisterAsyncTask( new PageAsyncTask( new BeginEventHandler(BeginFeed), new EndEventHandler(EndFeed), new EndEventHandler(TimoutFeed), null, true)); } public IAsyncResult BeginFeed(object sender, EventArgs e, AsyncCallback cb, object state) { return _func.BeginInvoke(cb, state); } public void EndFeed(IAsyncResult ar) { var feed = _func.EndInvoke(ar); var posts = from item in feed.Descendants("item") select new { Title = item.Element("title").Value, Description = item.Element("description").Value, Published = DateTime.Parse(item.Element("pubDate").Value) }; posts = posts.Skip(_pageNum * PageSize).Take(PageSize); FeedListView.DataSource = posts.ToList(); FeedListView.DataBind(); }
  • 21. Minimal Download Strategy  All controls on a page must be marked as MdsCompliant for page to use Minimal Download Strategy  MdsCompliant Restrictions:  HTML style and script tags are not supported  Use CssRegistration and ScriptLink instead  Using Response object to write to page is not supported  Use SPHttpUtility.Write* instead  Inline code must be wrapped in SharePoint:ScriptBlock element  For more information see Modify SharePoint components for MDS  http://msdn.microsoft.com/library/office/dn456543.aspx
  • 23. Cleaning the Web Part Gallery  Files provisioned into Content DB do not get removed on Feature deactivation  This includes webpart / dwp files added to Web Part Gallery  Deletion of files can be done in Feature receiver  Examine element manifests to find web parts  Remove from web part gallery
  • 24. Cleaning the Web Part Gallery public override void FeatureDeactivating(SPFeatureReceiverProperties properties) { var site = properties.Feature.Parent as SPSite; if (site == null) return; var parts = new List<string>(); var elements = properties.Definition.GetElementDefinitions(CultureInfo.CurrentCulture); foreach (SPElementDefinition element in elements) { if (element.ElementType != "Module") continue; var node = element.XmlDefinition; if (node.Attributes["Url"].Value != "_catalogs/wp") continue; foreach (XmlElement childNode in node.ChildNodes) { if (childNode.Name == "File") { parts.Add(childNode.GetAttribute("Url")); } } } var web = site.RootWeb; var gallery = web.Lists["Web Part Gallery"]; var items = gallery.Items; for (int i = items.Count - 1; i >= 0; i--) { var item = items[i]; if (parts.Contains(item.File.Name)) { item.Delete(); } } }
  • 25. DEMO Cleaning the Web Part Gallery
  • 26. Creating Web Part Page Templates  Create a site page  Set base type to Microsoft.SharePoint.WebPartPages.WebPartPage  Add one or more web part zones to page  Provision page instances using Module <%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %> <!-- Other register directives --> <%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, …" %> <%@ Page Language="C#" Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage" MasterPageFile="~masterurl/default.master" %> <asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server"> <WebPartPages:WebPartZone ID="MainZone" runat="server" FrameType="TitleBarOnly" Title="Main Web Part Zone" /> </asp:Content>
  • 27. Adding Web Parts to Web Part Pages  Use SPLimitedWebPartManager  Get reference from property of Page object  Use SPLimitedWebPartManager.AddWebPart to add var page = web.GetFile("SiteAssets/Test02.aspx"); using (var manager = page.GetLimitedWebPartManager( PersonalizationScope.Shared)) { if (!manager.WebParts.Contains(webPartTitle)) { var part = new MostPopularProducts2.MostPopularProducts2(); part.Title = "Most Popular Products"; part.Category = "Condiments"; part.Year = 1997; manager.AddWebPart(part, "Left", 0); } } Note: Contains method shown in code sample is a custom extension
  • 28. DEMO Creating Web Part Pages and Adding Web Parts
  • 29. Additional Stuff  Closing versus deleting web parts  Closing a web part does not remove it from page  Having many closed web parts on a page can degrade performance  Set AllowClose to false to remove option to close from web part verbs  Versioning  DO NOT change the assembly version of your assemblies  SharePoint stores the full name with version of all web parts in galleries and on pages  Use the AssemblyFileVersion instead
  • 30. Thank You  Big thanks to the organizers, sponsors and you for making this event possible  Please fill out your evaluation  Please keep in touch rob@robwindsor.com @robwindsor msmvps.com/blogs/windsor

Notes de l'éditeur

  1. 2