{"id":1775,"date":"2018-09-18T10:29:36","date_gmt":"2018-09-18T17:29:36","guid":{"rendered":"https:\/\/developer.microsoft.com\/en-us\/office\/blogs\/?p=1775"},"modified":"2021-10-18T11:22:47","modified_gmt":"2021-10-18T18:22:47","slug":"consistently-extend-sharepoint-with-the-sharepoint-framework","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/consistently-extend-sharepoint-with-the-sharepoint-framework\/","title":{"rendered":"Consistently extend SharePoint with the SharePoint Framework"},"content":{"rendered":"<div>\n<div>Using the <a href=\"https:\/\/docs.microsoft.com\/en-us\/sharepoint\/dev\/spfx\/sharepoint-framework-overview\">SharePoint Framework<\/a>, developers can extend SharePoint to their organization&#8217;s specific needs. And with the <a href=\"https:\/\/developer.microsoft.com\/en-us\/sharepoint\/blogs\/announcing-the-release-of-sharepoint-framework-v1-6\/\">latest version<\/a> of the SharePoint Framework, they can do it consistently across all sites in the tenant using tenant wide deployment capability.<\/div>\n<\/div>\n<div>\n<h2>Extending modern SharePoint experiences<\/h2>\n<div>\n<div>SharePoint Framework is a new development model that organizations can use to extend SharePoint to their specific needs. It is the only development model that developers can use to extend modern SharePoint experiences. If your organization is transitioning or planning to transition to modern experiences, you can already prepare, by building your solution using the SharePoint Framework because they work both in classic and modern SharePoint sites.<\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<div><\/div>\n<div><img decoding=\"async\" class=\"alignnone size-full wp-image-1779\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2018\/09\/spfx-graph-fabric.png\" alt=\"\" width=\"600\" height=\"472\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2018\/09\/spfx-graph-fabric.png 600w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2018\/09\/spfx-graph-fabric-300x236.png 300w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/div>\n<div><\/div>\n<div>\n<div>\n<div>Using the SharePoint Framework developers can build <a href=\"https:\/\/docs.microsoft.com\/en-us\/sharepoint\/dev\/spfx\/web-parts\/overview-client-side-web-parts\">client-side web parts<\/a> as well as <a href=\"https:\/\/docs.microsoft.com\/en-us\/sharepoint\/dev\/spfx\/extensions\/overview-extensions\">extensions<\/a> that allow them to add new functionality to SharePoint user interface in a supported and future-proof way. By building extensions, developers can add menu items to list toolbars, control how fields are rendered or present extra information in page header and footer.<\/div>\n<div>Until recently, only web parts could have been deployed to all sites in a tenant. SharePoint Framework extensions had to be activated on each site separately. And while developers and administrators could build scripts to automate the installation, it was still hard for them to ensure that the particular extension was deployed consistently across the whole tenant.<\/div>\n<\/div>\n<div>\n<div>\n<h2>Tenant-wide deployment of SharePoint Framework extensions<\/h2>\n<div>\n<div>In <a href=\"https:\/\/developer.microsoft.com\/en-us\/sharepoint\/blogs\/announcing-the-release-of-sharepoint-framework-v1-6\/\">version 1.6 of the SharePoint Framework<\/a>, we&#8217;ve added support for tenant-wide deployment of SharePoint Framework extensions. When building SharePoint Framework solutions, developers can decide if the particular solution should be deployed globally or not. If so, then when adding the solution package to the app catalog, administrators will be informed that the particular solution package will activate one or more extensions across all sites.<\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div><\/div>\n<div><img decoding=\"async\" class=\"alignnone size-full wp-image-1776\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2018\/09\/01-solution-trust-prompt.png\" alt=\"\" width=\"632\" height=\"432\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2018\/09\/01-solution-trust-prompt.png 632w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2018\/09\/01-solution-trust-prompt-300x205.png 300w\" sizes=\"(max-width: 632px) 100vw, 632px\" \/><\/div>\n<div><\/div>\n<div>\n<div>\n<div>After deploying the solution package, extensions that were chosen to be activated globally, are enabled on all sites.<\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<div><\/div>\n<div><img decoding=\"async\" class=\"alignnone size-full wp-image-1777\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2018\/09\/02-consistent-footer-two-sites.png\" alt=\"\" width=\"2475\" height=\"839\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2018\/09\/02-consistent-footer-two-sites.png 2475w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2018\/09\/02-consistent-footer-two-sites-300x102.png 300w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2018\/09\/02-consistent-footer-two-sites-1024x347.png 1024w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2018\/09\/02-consistent-footer-two-sites-768x260.png 768w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2018\/09\/02-consistent-footer-two-sites-1536x521.png 1536w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2018\/09\/02-consistent-footer-two-sites-2048x694.png 2048w\" sizes=\"(max-width: 2475px) 100vw, 2475px\" \/><\/div>\n<div>\n<div>\n<h2>How it works<\/h2>\n<\/div>\n<\/div>\n<div>\n<div>\n<div>When adding extensions to their SharePoint Framework projects, developers can choose if they should be activated on specific sites or all sites across the tenant. If the particular extension should be added globally, developers need to add an XML file specifying the ID of the extension as well as properties with which it should be activated. Following is an example how that XML looks like:<\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<div><\/div>\n<div><img decoding=\"async\" class=\"alignnone size-full wp-image-1780\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2018\/09\/xmlpic.png\" alt=\"\" width=\"730\" height=\"641\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2018\/09\/xmlpic.png 730w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2018\/09\/xmlpic-300x263.png 300w\" sizes=\"(max-width: 730px) 100vw, 730px\" \/><\/div>\n<div><\/div>\n<div>\n<div>\n<div>When deploying the package to the app catalog, the information from the XML is added to the Tenant Wide Extensions list located in the app catalog site collection. You can access that by clicking Site contents link from the left menu.<\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<div><\/div>\n<div><img decoding=\"async\" class=\"alignnone size-full wp-image-1778\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2018\/09\/03-tenant-wide-extensions-information.png\" alt=\"\" width=\"761\" height=\"421\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2018\/09\/03-tenant-wide-extensions-information.png 761w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2018\/09\/03-tenant-wide-extensions-information-300x166.png 300w\" sizes=\"(max-width: 761px) 100vw, 761px\" \/><\/div>\n<div>When loading sites, SharePoint retrieves the information from the Tenant Wide Extensions list and loads extensions as specified in the list. When you change the properties of the particular extension or on which type of sites it should be activated, it will be reflected consistently across the whole tenant.<\/div>\n<div>\n<h2>Video demonstration<\/h2>\n<div>\n<div>Following video shows the steps on using the custom footer showed in this article, which is available on <a href=\"https:\/\/github.com\/SharePoint\/sp-dev-solutions\/tree\/master\/solutions\/global-footer\">GitHub<\/a> and you can deploy it to your tenant for testing using the included <a href=\"https:\/\/github.com\/SharePoint\/sp-dev-solutions\/blob\/master\/solutions\/global-footer\/sharepoint\/solution\/spfx-global-footer.sppkg\">sppkg file<\/a>. This footer uses <a href=\"https:\/\/developer.microsoft.com\/en-us\/fabric\">Office UI Fabric<\/a> to provide a consistent look and feel aligned with the out-of-the-box SharePoint experience. Feel free to use this solution or the provided source code any way you prefer in your own solutions.<\/div>\n<div><\/div>\n<\/div>\n<div><\/div>\n<div>\n<p><iframe title=\"Tenant wide deployment of SharePoint Framework extensions\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/-TZdLGOemaY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<\/div>\n<\/div>\n<div>\n<div>\n<h2>Summary<\/h2>\n<div>\n<div>Tenant-wide deployment of SharePoint Framework extension is a great addition that helps developers deliver their solution to end-users and administrators to ensure consistency across the whole tenant. It also simplifies deployment and maintenance allowing you to focus on what truly matters: helping your organization get more out of SharePoint.<\/div>\n<\/div>\n<\/div>\n<div>\n<p><span style=\"font-size: large\"><em>\u201cSharing is caring\u201d<\/em><\/span><\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<p><i>SharePoint Team, Microsoft &#8211; 18th of September 2018<\/i><\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Using the SharePoint Framework, developers can extend SharePoint to their organization&#8217;s specific needs. And with the latest version of the SharePoint Framework, they can do it consistently across all sites in the tenant using tenant wide deployment capability.<\/p>\n","protected":false},"author":69078,"featured_media":25159,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[36],"class_list":["post-1775","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-microsoft-365-developer","tag-office-ui-fabric"],"acf":[],"blog_post_summary":"<p>Using the SharePoint Framework, developers can extend SharePoint to their organization&#8217;s specific needs. And with the latest version of the SharePoint Framework, they can do it consistently across all sites in the tenant using tenant wide deployment capability.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/1775","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/users\/69078"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/comments?post=1775"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/1775\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/media\/25159"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/media?parent=1775"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/categories?post=1775"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/tags?post=1775"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}