Finding the Elusive ‘Set Up Groups for this Site’ Page

When you create a new subsite In SharePoint 2013 or SharePoint Online (Office 365), you have the option to use the same permissions as the parent site or use unique permissions.

Use unique permissions

Use unique permissions

If you use unique permissions, you’re taken to a page where you can set up the special groups for the subsite.

Set Up Groups for this Site

Set Up Groups for this Site

Generally, this is a “set it and forget it” page; once you’ve done what you need to do here, you rarely need to go back to the page.

However, sometimes you may decide that you’ve been too granular or not granular enough when you set the groups up. In that case, you may want to go back to the page and change the settings.

Unfortunately, the page is hard to find unless you know exactly where it is. Unless I’m missing it, there’s no navigation option to get back there in the UI. The fact that I can’t find it says that it’s at least too obscure.

If you need to get back to the page, navigate to your subsite and append this to the end of the URL:subs

_layouts/15/permsetup.aspx

So, for example, if your URL is

https://host.sharepoint.com/test99/_layouts/15/start.aspx#/SitePages/Home.aspx

it would become

https://host.sharepoint.com/test99/_layouts/15/permsetup.aspx

This is another one of those posts I’m doing so I can find the answer on my own blog the next time. I hope it helps you, too!

SharePoint: Enabling Knowledge Management

I had the chance recently to have chat with TechnologyAdvice’s Josh Bland (@JoshBlandTA). This interview was a part of the TechnologyAdvice Expert Interview Series. The series explores a variety of business and technology landscapes through conversations with industry leaders.

There’s plenty of great content there, including interviews with some of the speakers for the SharePoint Technology Conference – SPTechCon Austin – coming up February 21-24. If you register with code ANDERSON, you’ll get an extra $200 off any other discounts you might receive.

In this episode we discussed how I see SharePoint fitting into a successful knowledge management strategy, how modern work happens, big things that happened with SharePoint in 2015, and of course, the upcoming SPTechCon. If you enjoy this interview, you might want to check out the one I did with Josh last summer, just before SPTechCon Boston: Software Adoption: A People Problem, or A Technology Problem?

Below is an excerpt from the conversation:

Josh: What would you say, Marc? How would you sort of summarize the year? What sort of big developments occurred and what would you say were some of the highlights from 2015 in SharePoint?

Marc: One of the biggest things is that the hybrid story that Microsoft is just telling is getting richer and richer. We saw some capabilities that are available on Office 365 starting to filter back on Premises, and that’s via hooking up to a SharePoint online instant. So that you can sort of take advantage of the best of the cloud but still keep your content in-house. And of course, we’re seeing tremendous strides forward in Office 365 as well. It’s hard at this time of the year to look back and try to remember, how many of these things actually got stuffed into this one year? And it’s pretty incredible when you look at how many things have changed over the last year in the SharePoint space. We have things like Delve and groups and the video portal, and all these things that have really come into their own this year and shown that Microsoft is not sitting still, that they’re — I’m very bullish on Microsoft in what they’re doing with Office 365. And I’m not an easy one to convince [chuckles]. But I see them doing some very cool things – Planner – just all kinds of new experiences as they say, with fantastic user interfaces that really are bringing the whole platform ahead in leaps and bounds.

Josh: I want to hear what were some of the sort of difficulties that you have experienced, not only with your customers, but just in general that you think the industry has seen from SharePoint?

Marc: An ongoing challenge for anyone using these platforms is that the development story continues to evolve. And that’s not a bad thing, but for your average developer who’s trying to sort of swim with both hands tied behind their back, sometimes, keeping ahead of what the enterprise wants, it’s difficult because we look at the different– historically we’ve had features and solutions, we’ve had the sandbox model now. We have the apps crossed out, add-in model, and we’ll probably see some evolution from here. People are continually having to keep their skills fresh. Now, that to me is a damn good thing. Anybody who stops learning and thinks that what they know now is going to serve them forever is sort of letting themselves die intellectually. The fact that we have to learn new things all the time is a good thing. We’re seeing an evolution from server site code toward JavaScript and client site code to a degree that is really — it’s been a bumpy ride for some people over the last couple of years to make that mental switch. As we’re seeing better experiences coming out of Microsoft, we’re seeing these challenges for the developers inside enterprises who are trying to build bespoke functionality that is unique to that organization, or something that that organization wants that Microsoft does not provide exactly. It’s that 20% that’s actually the hard part. That’s going to be an ongoing set of challenges – understanding how this hybrid model, as you mentioned fits into the organization’s ethos – is going to be a tough one for a lot of people to get to.

Two years ago we would have been talking about the tremendous fear about security and, “Does the cloud make sense?” And, now we always talk about it as, “Which part of the cloud makes sense to me? Which parts should I take advantage of? Where am I going to get the bang for my buck?” So, we’re on a different part of the learning curve for all of that. But the development story is tough. And that hybrid aspect just adds a little bit of complexity to the whole thing.

Josh: One final question here on SPTechCon 2016. Do you see a lot of differences between Boston and Austin? All that to say, what do you think will be different about this year, Austin 2016 vs. Austin 2015 or Boston 2015?

Marc: The obvious difference is that we’ve got SharePoint 2016 coming up. So — Yeah, new software smell. There are a couple things there. One is obviously there is some new software out there; new bits. So, people will be able to hear some good information about what’s there, why would you be interested in it, how does it work and that sort of thing. One of the best things though about SPTechCon is that they’re very careful to manage the mix between: here’s the shiny new stuff and here’s that stuff that you are actually still stuck working with [chuckles]. There are still a lot of people in the crowd who use SharePoint 2010, there’s still a lot of people who are using 2013 obviously. There’s a great mix of content across that spectrum as opposed to just going for the new stuff. Go to the Microsoft conference for that. They’ll only talk about the new things. But SPTechCon has been traditionally very good about having that balance, so that everybody who comes to the conference gets a lot of depth out of it.

This podcast was created and published by TechnologyAdvice, an Inc. 5000 company looking to help buyers find the best cloud storage, payroll systems, and more. Interview conducted by Josh Bland.

CollabTalk Episode 12: Top 10 2015 News and 2016 Predictions

CollabTalk Episode 12 - December 2015We wrapped up our twelfth episode of CollabTalk for ITUnity yesterday, which means we’ve been at it for a full year now. Boy, how time flies! When I say we, I of course mean my illustrious friends Christian Buckley (@buckleyplanet), Naomi Moneypenny (@nmoneypenny), and Benjamin Niaulin (@bniaulin). Oh, and me.

In this episode, we did something a little different than in the prior eleven. Since it’s the end of the year – the time when everyone takes the time to look back on a year (hopefully well-lived) and look forward to what might come – we went through what we considered the big Office 365 news from 2015 and then gave a few predictions for 2016.

I proved in this exercise at least one of the following things: I am bad at making lists, I’m not highly motivated to do things that are important, I’m way too busy, I can’t count, and/or I’m lazy. You decide. Whichever it is, I came nowhere close to 10 items per list.

Big News from 2015

I think Office Graph was a 2014 thing, but people are really starting to see how cool it is

Modern organization dynamicsLast year at this time, we knew what the Office Graph was, but most people weren’t convinced of its importance. Over the course of 2015, we saw tremendous advances with Delve and the available analytics on Office 365, all driven by Office Graph data. I’m convinced that the Office Graph is one of the most important tools in the Microsoft toolbox.

People seem to be seeing this promise more and more now. Part of this is that some of the sharpest tacks in the drawer, like Waldek Mastykarz (@waldekm) with posts like these and Mikael Svenson (@mikaelsvenson) with posts like these have made the concepts more accessible. We’re also seeing Microsoft building more capabilities on top of the Office Graph to show its importance. In a larger organization, those “edges” of connection that live outside the normal organizational hierarchy are the ones where Things Get Done.

News of the next gen Office 365 dashboard to make admin tasks simpler

office-365-admin-center-preview-tour-3To me, one of the weak points of SharePoint has always been the back end management tools. In the old days, then mindset was “It’s for IT Pros and they don’t care how it works.” Well, on Office 365, many admins are people inside small or medium sized businesses (SMB) who don’t want to have to work to understand the admin tools – they want them to work and be easy to use. The SMB market is a sweeter spot for Office 365 then the enterprise market to me. If Microsoft can make it work well for the “IT not-Pro” [I’ll keep my editorial comments about the “Pro” moniker for professions out of this post. Sort of.], then they will clobber that part of the market. That’s the very market that Google has been creeping on on them through with their far-better admin tools.

We’ve seen a preview of the new admin dashboard in First Release tenants. I’m looking forward to seeing it fleshed out to cover more and replace the gobbledy-gook that has been SharePoint administration in the past. We can only hope that those improved tools com back to on premises in SharePoint 2016 as well. As much as IT Pros like to say they’d rather us e a command line, it’s far cheaper and reliable to just give the damn simple tools.

Platform independent apps – we now can do Outlook, and all the other Office things on iOS and Android(?)

Microsoft Apps on iOSThis move has been brilliant. Microsoft has realized that they shouldn’t try to drag the people back to the desktop; they should take their productivity tools where the people are. And the people are on their mobile devices. Microsoft decided it doesn’t matter who made the device – they want to own the productivity software business regardless what the hardware is.

Now on iOS we have better tools from Microsoft than we do from Apple. Not only that, but they are all backed by the data store that is OneDrive – in this case, two of the three OneDrives. Say what you want about OneDrive sync – this content integration on mobile is killer . (And besides, the sync client on iOS seems to work flawlessly – it’s Microsoft’s home turf of the desktop where the problems seem to be the biggest.)

Purchases of Accompli, [that task thing]

Microsoft hasn’t been on an acquisition tear, but they have made some important purchases to get their foot in the door on the iOS platform. Accompli and Wunderlist (that’s the one I couldn’t remember!) are two examples of this. Sure, Microsoft could have just built their own versions of these two products, but instead, they bought a *very* loyal and hip user base. In the case of Accompli, it meant they could launch a new app – re-branded as Outlook – in a very short time. (I’m an iPhone guy, so I can’t speak to other phone OSes. YMMV.)

Microsoft won’t be able to buy its way into the hearts and minds of the average consumer, but by starting with these two apps and keeping them hip they made big strides forward in the app wars.

And finally…what Ben said

Ben had a really good list. Unfortunately, I saw it before I wrote mine. That’s a motivation killer – at least to me.

Predictions for 2016

Microsoft will be seen as cool again

Is Microsoft cool now?Most people know that Microsoft really lost its mojo in the decade or so that Steve Ballmer was in charge. The products were ho-hum, and the attitude was very much “You’ll buy what we tell you to buy.” It was a sales-driven organization and it showed.

In the last year (or a bit more), Microsoft has found better mojo than it has had for years. When has anyone thought of Microsoft as hip? I’ve been around for the entire lifespan of the company, and I can’t recall that time. With the things they are doing now on Office 365, in mobile, and in hardware, even some of the stalwart cynics are sitting up and taking a good, hard look. I’ve even heard a few Apple fanboys say they have considered jumping over to Microsoft – either again or for the first time. This is almost unheard of.

Office 365 will become a $7B businessOffice 365 Logo

I’m not a financial guy and you should never take my investment advice. That said, I see Office 365 growth rates heading north; the integral of that curve is going to grow. As I said above, to me the sweet spot of the market for Office 365 is the SMB market. With the improvements to user experience Microsoft is putting in place, more and more small business are going to trust them to take a lot of the headache of IT off their plate for them. Whatever the numbers turn out to be, revenue is going to climb significantly in 2016.

Microsoft will write off a significant part of its Yammer investment

Yammer LogoYammer is a dog. I’ve been saying it for a long while now. There are members of the CollabTalk panel who disagree with me vehemently, but I’m sticking to my guns. I know it doesn’t make me a popular guy with the political people in Redmond either, but many Redmond-ites have to feel this, too. Microsoft bought Yammer for some of the technology it had, IMO, and even that technology hasn’t proven to be all that stellar. Add to that a “we know better then you” attitude in Yammer organization, and it’s a dog that don’t hunt. Things that virtually every user struggles with and wants fixed (unread counts, anyone?) are still a problem. Yammer doesn’t fit into the portfolio as it is. Perhaps it has some value if it’s cut up for parts, but even that seems like a stretch to me. Again, I’m not a finance guy, but I see some sort of write off or write down or whatever on Yammer. At the very least, we should see it slink away and hide under the barn.

Conclusion

So there you have it. My big news for 2015 and predictions for 2016. You probably don’t agree with everything I have on these lists or what I’ve said. I welcome your thoughts and feedback in the comments.

If you’d like to watch the entire CollabTalk episode, you can do so here. If you register, the good folks at IT Unity will let you know about upcoming episodes and maybe send you some other goodies via email as well.

Moving from SPServices to REST, Part 6: Converting UpdateListItems to REST

This entry is part 6 of 6 in the series Moving from SPServices to REST

While the majority of calls using SOAP with SPServices use GetListItems to get items from lists, changing data with UpdateListItems is probably a close second. In this case, we’re altering data based on some user action. In a way, it’s like repainting your car (which I’ve never done). The shape and structure of the car stays the same, but you make it look better with new paint. New data can be like that – after all, the list or library itself doesn’t change.

Image source: http://www.internetbillboards.net/2015/03/27/a-step-by-step-diy-guide-to-give-your-car-a-new-paint-job/

Image source: http://www.internetbillboards.net/2015/03/27/a-step-by-step-diy-guide-to-give-your-car-a-new-paint-job/

Let’s look at a simple example of an update: deleting a list item. This is probably the simplest update because all we have to pass in is the ID of the list item and ask for a delete.

var itemID = 1;
var p = $().SPServices({
  operation: "UpdateListItems",
  listName: "Tasks",
  updates: "<Batch OnError='Continue'> " +
    "<Method ID='1' Cmd='Delete'>" +
    "<Field Name='ID'>" + itemID + "</Field>" +
    "</Method>" +
    "</Batch>"
});
p.done({
  // Manage success or failure here
});

To delete a document in a library, it’s just a little bit harder. We need to pass in the FileRef (where the file lives) in addition to the ID.

var itemID = 1;
var fileRef = "http://mydomain/libName/fileName";
var p = $().SPServices({
  operation: "UpdateListItems",
  listName: "Tasks",
  updates: "<Batch OnError='Continue'> " +
    "<Method ID='1' Cmd='Delete'>" +
    "<Field Name='ID'>" + itemID + "</Field>" +
    "<Field Name='FileRef'>" + fileRef + "</Field>" +
    "</Method>" +
    "</Batch>"
});
p.done({
  // Manage success or failure here
});

In both cases, we pass in what’s called an update, which contains a batch. We can request multiple actions in the batch, but in this case, I’m keeping it very simple and just requesting one action: deleting the item with ID = itemID (and FileRef = fileRef for the library). As you can see, I also need to pass in the Cmd = “Delete” to tell the server what I want it to do. My other options are “New” and “Update”.

If our delete is successful, we simply get a result that tells us the error code was 0x00000000. If there was an issue, we’ll get something else (usually 0x81020016) which may not be all that descriptive of the error.

The call to delete a list item looks like this in REST:

var itemID = 1;
var p = $.ajax({
  url: _spPageContextInfo.webAbsoluteUrl +
    "/_api/web/lists/GetByTitle('Tasks')/items(" + itemID + ")",
  method: "POST",
  headers: {
    "X-RequestDigest": document.getElementById("__REQUESTDIGEST").value,
    "X-HTTP-Method": "DELETE",
    "IF-MATCH": "*",
    success: successFunction,
    error: errorFunction
  }
});

We can check what’s happened one of two ways. You can see above that I’ve set a variable called p to the results of the REST call. I’m also doing something with success and failure within the call. This is redundant, but I’m showing here to demonstrate the two methods (which I probably should have covered in my previous article Part 5: Using Promises with SOAP and REST, as several people have pointed out).

Examining p and acting on it is working with a promise; acting based on the success or failure inside the call is called a callback. You’ll find no end of arguing about which of the two is more “correct”, but it’s really a stylistic choice. Usually if you have lots going on and need to manage it all together, people will agree that working with promises can be easier to follow. There’s nothing wrong with using callbacks as long as you can follow your program logic.

If there’s an issue in the call (regardless which approach you take), you may an error back that looks something like this:

{"error":{"code":"-2130575338, System.ArgumentException","message":{"lang":"en-US","value":"Item does not exist. It may have been deleted by another user."}}}

In this case, I’ve tried to delete an item which doesn’t exist. Note that with REST, unlike with SOAP, no response on an update or delete is good news – you only get a response if something’s gone wrong.

Because I’m changing some data on the server, the request has to be a POST rather than a GET. POSTs are a little harder to set up than GETs because we have to demonstrate to the server that we aren’t bad guys by passing a little more information about who we are and where we are coming from.

Keep in mind that these examples don’t reflect what you would need to do in Apps Add-Ins; that authorization flow has been written about in many other places. These examples show what you would do if you are loading your JavaScript directly in the page, perhaps by including it in a Content Editor Web Part (CEWP) using the Content Link or in a Script Editor Web Part (SEWP).

We pass this extra authorization information in the request header:

"X-RequestDigest": document.getElementById("__REQUESTDIGEST").value

In every SharePoint page in SharePoint 2010 and above, there is a request digest value stored in the page in a hidden element with the id of “__REQUESTDIGEST”. Note that’s two underscores up front, not just one. In the line above I’m using simple JavaScript (no real need for jQuery here) to grab that value.

In both REST examples above I’m doing what I think of as a “selfish delete”. By specifying

"IF-MATCH": "*"

I’m telling the server that I don’t care if anyone else has changed the item or document – I just want it gone. Check out my post on using Etags if you’re interested in how to avoid collisions in requests.

To delete a document in a library, I do basically the same thing:

var itemID = 1;
var p = $.ajax({
  url: _spPageContextInfo.webAbsoluteUrl +
    "/_api/web/lists/GetByTitle('Documents')/items(" + itemID + ")",
  method: "POST",
  headers: {
    "X-RequestDigest": document.getElementById("__REQUESTDIGEST").value,
    "X-HTTP-Method": "DELETE"
    "IF-MATCH": "*",
  }
});
p.then({});
p.fail({});

Now let’s look at something a little harder. We’ll update a field (column) in a list item instead. I’ll keep it simple, but we’ll change the item’s Title.

Here’s how we’d do in in SOAP:

var itemID = 1;
var p = $().SPServices({ 
  operation: "UpdateListItems", 
  listName: "Tasks", 
  updates: "<Batch OnError='Continue'> " +
      "<Method ID='1' Cmd='Update'>" +
      "<Field Name='ID'>" + itemID + "</Field>" + 
      "<Field Name='Title'>This is the new title text</Field>" + 
      "</Method>" + 
      "</Batch>"
});
p.then({});
p.fail({});

As before, I need to pass in the batch, but this time the Cmd is “Update”, meaning that I want to change something about the list item. As you can see, I’m just changing the Title to some arbitrary text.

This SOAP request return us the item or document as it looks after the write. We can inspect that result if we want to update an array or something else we’re maintaining client side.

In REST we need to pass in the data we want the server to use in the update a little differently – no surprise, probably. We still pass the itemID on the url, but the data we want to write goes into a data element. We also need to “stringify” the data because it’s usually represented in our code as a JavaScript object. When we look at JSON data in the developer tools of our favorite browser, it looks like strings, but it’s actually stored as binary content. Since we can only pass text to the server, we need to do this stringify conversion.

var itemID = 1;
var payload = {
    "Title": "This is the new title text"
  };

var p = $.ajax({
  url: _spPageContextInfo.webAbsoluteUrl +
      "/_api/web/lists/GetByTitle('Tasks')/items(" +
        itemID +
      ")",
  method: "POST",
  data: JSON.stringify(payload),
  contentType: "application/json;odata=nometadata",
  headers: {
    "X-RequestDigest": document.getElementById("__REQUESTDIGEST").value,
    "X-HTTP-Method":"MERGE",
    "IF-MATCH": "*"
  }
});

In this example, I’m choosing to pass the data using the contentType with odata=nometadata set. You may see other examples with odata=verbose, and in that case, we must pass a metadata value in the payload, like this:

var payload = {
    "__metadata": {
      "type": "SP.Data.SurveysListItem"
    },
    "Title": "This is the new title text"
  };

Passing the metadata basically adds additional checks to the veracity of our data, and can be a good idea.

I’m still doing a selfish write here (“IF-MATCH”: “*”), not caring whether anyone else has made changes. As with SOAP this means that the last person in wins.

Here’s a table that gives an overview of how REST and SOAP compare when you want to do updates to your SharePoint content.

  SOAP REST
Authorization None needed; our request is made using the current user’s permissions X-RequestDigest

document.getElementById(“__REQUESTDIGEST”).value

Actions Passed in the Cmd element of the update CAML

[New, Update, Delete]

X-HTTP-Method

[PUT, MERGE, PATCH, DELETE]

Data Contained in the updates as strings using CAML notation Contained in the data element and the content must must be “stringified”
Collision Control None – last person wins Using ETags, we can learn of collisions, but we must manage those collisions in our code.

 

References:

This article was also published on IT Unity on 12/7/2015. Visit the post there to read additional comments.

The ‘MVP Thoughts’ Series – Live from Sharegate World Headquarters

2015-11-18_17-30-46Last month a handful of SharePoint and Office 365 MVPs (now Office Servers and Services MVPs, but who’s counting?) gathered at Sharegate‘s offices in Montreal to help them with their next series of Damn Simple videos. Stay tuned for those.

After all the silliness – I mean serious cinematography – Jennifer Roth (@jennifermason), Corey Roth (@coreyroth), Fabian Williams (@fabianwilliams), and I sat down with the great Benjamin Niaulin (@bniaulin) to talk about Office 365 and SharePoint. You know – the usual. Each time a bunch of us gets together, though, the conversations tend to go in different directions. It’s even interesting for me to watch these, as our opinions often change over time.

I’m not sure how many segments we ended up with, but I’ll keep adding them here as they come out. If you’d like to read the transcripts instead, follow the title links.

MVP Thoughts: What to Expect From SharePoint 2016


MVP Thoughts: SharePoint Workflows & Forms in Today’s Environment

MVP Thoughts: What Should SharePoint Developers Focus On?

SharePoint and Office 365 in the Modern Workplace

Office Graph API & Groups Seen By Developers

Coming soon:

Today’s SharePoint Developers’ Challenges