Ready for Ignite

On my way to Atlanta for what I’m expecting to be an epic event for the SharePoint and Office 365 world.  This past may the future of SharePoint was revealed at a much smaller and intimate event in San Francisco on May 4th.  Over the course of the summer we’ve seen a number of changes hit in rapid succession and many folks have seen only a few of the new innovations.

 

Big Wins to Date

  • The OneDrive for Business mobile app delivered on the ability to access SharePoint libraries on the go
  • Modern Document Libraries improved the efficiency of editing page meta data and refreshed the core user experience for managing files in SharePoint
  • Modern Lists have a slick new ux that makes editing items and meta-data faster
  • Great PowerApp performance against SharePoint lists makes real mobile app experiences a reality for SharePoint, even during Preview
  • Human workflow Exchange Approvals in Flow are fast and perfect.
  • Cross system integration is easy with systems that have flow connectors
  • A common on-premises gateway for PowerBI and PowerApps to integrate corporate data sources
  • External members of office 365 groups are critical for enabling cross company collaboration.  This doesn’t yet support planner and powerbi, but hoping to see it soon.
  • The refreshed SharePoint site contents page starts to give users actionable metrics about site usage

 

Some New Challenges

  • Uploading new versions of files in the Modern Document Library is an unintuitive step backwards
  • Client side customizations to document libraries need to be redesigned as urls instead of JavaScript, reducing functionality
  • Modern Pages and Modern Experiences can’t be extended (think content panda, sharepoint videos, or a number of the analytics tools)
  • Flows are tied to individual users rather than lists introducing complexity trying to manage solutions used by more than one person
  • No good way to extend SharePoint user interface without building a full custom solution.. there’s no current replacement for JSLink and Display Templates that i use every week.
  • For those of us using exchange in hybrid mode, connecting Modern Team Sites to Office 365 Groups is a mixed bag since hybrid users can’t edit group properties and have to use workarounds like using Planner or the Outlook Groups mobile app to managing users.  If groups are going to be central to SharePoint, you MUST enable users to edit them with just a SharePoint license.  We don’t care that the outlook team wrote them.

 

 

Potential for Greatness

  • Modern pages are fast and easy to edit, but not yet viable with a single column layout and no ability to customize look and feel.  I hope to hear more about future publishing and branding plans this week.
  • The SharePoint framework is a real modern development story but is waiting for visual studio support and support for anything other than modern webparts right now.  Want to see some new announcements on timing for GA of webparts and preview of pages and list apps
  • Modern Team Sites with News, Pages, Modern Lists and Libraries tied to Office 365 groups feel like they are almost real.  Would love an update on when we get these
  • Site classifications in SharePoint to let you tag a sites data sensitivity or business impact and reuse hopefully reuse this in future conditional access logic.  Imagine requiring two-factor auth for high business impact sites when not on the network.
  • The SharePoint mobile app finally gives users access to SharePoint sites from a mobile client, but having to switch over to OneDrive to access files feels like a fragments half-hearted effort.  The Outlook Groups app was much a cleaner user experience.  Want to hear about how this is evolving into something businesses will be excited to rollout.
  • Still waiting for the PowerBI content pack for Office 365

 

Overall, I’m incredibly exciting by the pace of innovation and excited to see what the team has been hard at work on over the summer months.  For topics areas that didn’t get much love at the May 4th event such as development, customization, branding, and publishing i’m hoping this is the place where Microsoft takes us all on a deeper dive and hope we start to see some of these items continue to become real this calendar year.  If you’re at ignite, please feel free to reach out @bostonmusicdave on twitter

Wiring up a modern team site / group

Anyone else excited to see modern pages and team sites?  Ever since the May 4th Future of SharePoint event I’ve been super excited to get my hands on it and start to play around.  Since the blog post last week announcing that they were rolling out i’ve been checking my office 365 groups daily to see if anything is new.

 

Noticed today that gear now has “Add a page”

image

 

In fact if you navigate to https://tenant.sharepoint.com/sites/groupname/SitePages/ you’ll find a modern library showing all your modern pages.  It’s simple to go create a few and play around with the webparts that are in there today: Text, image, Document, Video, Embed (script editor?), Highlighted Content (Content Searchish), Quick links, and Activity.  Add a list doesn’t work for me yet on my tenants, but i’m sure that’s coming soon.

 

image

 

The other item worth noticing is that the system account created Home.aspx.  I wonder what that could be…..

image

 

So it’s not set as the homepage of the groups team site but i’ll bet we can fix that…

 

image

 

Voilla!  Group HomePage is now a modern team site!   Oh.. one more thing.. i also set up an alert on the homepage.aspx.  Since it’s just a file in the library it makes sense we’d be able to see when Microsoft updates it just by using alerts inside SharePoint.  Let the fun begin!

image

Sandbox Solutions removed from SharePoint Online–Here’s the fix for your Visual Studio developed WSPs to get them to activate

Today, Microsoft removed the ability to activate sandbox solutions with code in them.  That’s cool, we’ve all known for a couple years that coded sandbox solutions were going away and there’s a post on the office dev blog describing the change,  What wasn’t talked about was the fact that any time someone created a no code sandbox solution in visual studio, an assembly was automatically generated which will block it from being deployed as of today! 

This feel like a huge deal when you’re trying to deploy an update and things aren’t working, but the fix is pretty easy.  Lets walk it through:

 

First, you’ll see the issue preventing you from activating your solution. 

image

There are two different ways to solve this problem depending on if you still have access to the source code and visual studio.  If you do, you can update the project property Include Assembly In Package to false as shown in https://support.microsoft.com/en-us/kb/3183084

 

If you don’t want to rebuild your package in visual studio, follow the steps below to remove the assembly from the sandbox solution.

 

Click on the name of the .wsp file to download it to your computer.  We need to open it up and remove the dll from inside.

Once you’ve downloaded it, rename the .wsp to a .cab file. If you double click it now to open it with explorer you’ll see that dll file inside.

image

 

After extracting to the file system we have 2 changes we need to make.

  1. Delete the DLL
  2. Update the manifest

So in windows explorer lets just delete the dll.

image

 

Right click on the manifest.xml file and open it in the editor you love most.  I chose code here.  Then delete the entire Assemblies section of the file and save it.

image

image

 

Next we need to recreate our cab file.  I like using a free app called IZArch that will give you a GUI instead of using makecab.  Just create a new archive and give it a file name ending in .CAB

image

 

Add your files, close IZArch and find the CAB file with windows explorer.  Just rename it back to .WSP and you’re ready to upload it to SharePoint

image

 

As you can see below, the .WSP with no dll activates just fine and everyone is happy.

 

image

 

 

 

 

 

 

 

 

 

 

 

Update Flow passwords easily!

“Passwords are like underwear, don’t show them to strangers and change them regularly.” said an old friend of mine.  Most companies have a standard password change policy where every 60-90 days everyone needs to change their active directory passwords.

Unfortunately inside Microsoft flow, I hadn’t found a super easy way to update the stored token for the services i connect to after changing my password.

image

When you open up the design surface to take a look at your flows, it will show you what service you are connected to, but your only option in the Flow ux is to change the connection.  In fact when things stopped working after a password change, that’s exactly what i did.  I created a new connection which got me up and running and sent a frown that a better story was needed to handle password changes.

image

 

Today, While poking around the web ux for PowerApps i noticed a wonderful Manage Connections tab on the left navigation bar.

In fact I had error messages next to the two connections that still stored my expired credentials.

Super easy to hit the Key icon and walk through your sign-in flow to update the stored tokens and everything is happy.

image

 

Get started automating your world with Microsoft Flow knowing that when your password expires it’s super easy to change it over in PowerApps.

I built out a few PowerApps demos this week as well so expect some more posts on PowerApps shortly.

Using Microsoft Flow to automate things in SharePoint – Part 1, approving stuff

If you haven’t had a chance to play with it yet, Microsoft Flow is one of the most exciting new technologies spinning up in the Office 365 space.  Unlike workflow in SharePoint it’s designed from the ground up for orchestrating things across systems rather than just basic human approvals in SharePoint.   Flow is in preview right now and my guess is that general availability isn’t going to happen till closer to the end of the year, but it’s such an exciting and transformational technology that in some cases i’m using in production right now.

 

 

 

There are many articles about what flow is and really basic intro stuff, so i wanted to instead focus on some usecases and why i really love what i’m seeing so far.  For anyone who has used SharePoint workflow in the past, the idea of assigning a task that a user had to open up, then have them navigate to the related list item or document to see what they are approving was never an outstanding user experiance.  When having users do this from a mobile device, it’s even worse because i need to pop a browser, login, and then hack around on a tiny little screen.

I had a use case where i needed to have users request permission for specific document libraries and couldn’t use the out of the box sharepoint capability because the site owners were not the approvers.  Instead every library had an approver and i needed a way to get those approvals and dynamicly apply the permissions.

One of the new activities you can perform with Flow is called Send Approval Email.  As you can see below, it’s easy to wire up fields from a sharepoint list item when that item is created and combine them with some narative to craft your subject, recipients, body, and your choices that a user will be shown.

image

 

Unlike a traditional task form that forces me to open a browser, this new approval experiance is designed from the ground up to mobile friendly with just an email with the buttons that you design in the user options field.  When a user clicks the button, the response is recorded, the user gets a confirmation page and the flow moves on.  What’s amazing is that when this seems like a really little thing, super simple mobile approval has a huge impact on the user experiance and the rate at which things get approved.

 

image

 

In the next post i’ll dig a little deeper into the rest of the activities i’m using in this flow and the powershell i’m using to actually apply the permissions to sharepoint once the flow is approved.

Storing password information securely in PowerShell Scripts

When folks are getting started with PowerShell logging into Office 365, often one will user Get-Credential to force PowerShell to prompt for a username and password.  That credential is then passed into operations such as logging into Office 365 or using the SharePoint PNP PowerShell modules.

When it comes time to automate these operations, I’ve seen far too many folks just hardcode a username and password in the script.  From my perspective, not the best idea from a security standpoint.  This simple script will allow you to securely capture your password and store it securely in a file on your system.  I would strongly suggest using NTLM permissions to lock access to the password file to only the user account your script will be running as.

 

Hope you find this useful:

 

SetPassword.ps1
$baseFilePath = “e:\PowerShell\”
$filePath =  $baseFilePath + “password.txt”

(Get-Credential).Password | ConvertFrom-SecureString | Out-File $filePath

 

Get Password Function

Function Get-StoredCredential
{
param( [string]$UserName, [string]$BasePath)

 

$File = $baseFilePath + “password.txt”
$FileContent = Get-Content $File
return New-Object -TypeName System.Management.Automation.PSCredential ` -ArgumentList $UserName, ($FileContent | ConvertTo-SecureString)
}

Update site collection quotas in SharePoint Online with PowerShell

Many articles have been posted about how to do this onprem, but i was looking around last week and didn’t see anyone sharing the technique to do this in SharePoint Online.

Every site collection in  SharePoint Online can be configured with a quota, but how do you know which ones are running out of space.  This script will let you automatically resize any that are running out of space by finding all site collections that are using 75% of their quota and doubling the site of the current quota.  This may not be the right numbers for your environment but i hope this sample gets you on off and running quickly.

 

#you’ll need the msonline service module to connecto to spo
import-module MSOnline

Resize.ps1

#import common functions
. “C:\mypath\functions.ps1”
#### configuration information

$baseFilePath = “C:\mypath\”

$tenantName = “mytenant

$userName = “my upn goes here

# this uses a custom function in the functions.ps1 files
$msolcred = Get-StoredCredential -UserName $userName -BasePath $baseFilePath

# this uses a custom function in the functions.ps1 files
$adminSite = Get-AdminSiteUrl $tenantName
Connect-SPOService –Url $adminSite  -credential $msolcred

# this will get all sites and limit to only those that are 75% of the way to their quota
$sites = Microsoft.Online.SharePoint.PowerShell\Get-SPOSite  -Limit ALL -Detailed |Where {($_.StorageUsageCurrent / $_.StorageQuota) -gt .75} |  Select URL, StorageQuota, StorageUsageCurrent, StorageQuotaWarningLevel, StorageQuotaType, Status
foreach($site in $sites){

Write-Output (“Site: ” + $site.Url + ” Usage:” + $site.StorageUsageCurrent + ” Quota:” + $site.StorageQuota + ” Warning Level:” + $site.StorageQuotaWarningLevel)

        # this will set the quota to double it’s current size, feel free to tweak to your needs
Microsoft.Online.SharePoint.PowerShell\Set-SPOSite -Identity $site.Url -StorageQuota ($site.StorageQuota*2)

}

 

Functions.ps1

Function Get-StoredCredential
{
param( [string]$UserName, [string]$BasePath)

 

$File = $baseFilePath + “password.txt”
$FileContent = Get-Content $File
return New-Object -TypeName System.Management.Automation.PSCredential ` -ArgumentList $UserName, ($FileContent | ConvertTo-SecureString)
}
Function Get-AdminSiteUrl
{
param([string]$TenantName)

return “https://” + $tenantName + “-admin.sharepoint.com”
}