Skip to content

Using #MicrosoftTeams to Communicate at #MSIgnite: A Case Study

I’ve been a heavy user of Microsoft Teams for several months now. Check out this blog I wrote about how we used Teams to communicate at Microsoft Ignite!


Azure IoT Project from Start to Finish: Blog 1 – The Project

Over the last year I’ve been working with Azure IoT and I’ve watched as Microsoft has really established itself as a major player in the IoT world. Any article you read or podcast you listen to on the topic of IoT platforms will not only mention Azure alongside the major players, but will indeed count them as one of the best choices.

Though I’ve been working with the technology for some time, it’s been in the role of a product manager for a B2B solution rather than as a developer so I haven’t had a good chance to get deep in the weeds on my own. This series of blogs will document my journey through creating an Azure IoT solution from start to finish in the hopes that it will help others who endeavor to do the same. This blog post will set the stage, but I’m going to approach the project in a few phases, writing a blog for each phase.

  1. Create a simulated solution, starting with a pre-configured solution
  2. Add the physical IoT device
  3. Flesh out the logic an UI of the solution


The Project: Smart Shelf

I wanted to create something that could be used in my home. There are certain household items that are a total drag to run out of. Toilet paper and coffee come to mind. Despite our best intentions, my family find ourselves running out of these things from time to time and, while I’ll spare you the details, it’s never fun.

To solve this issue, I want to create a “smart shelf” that will remind us when we need to purchase more of whatever I’m stacking on it. Bear in mind, I recognize that this is not an original idea. Hotels have been using similar devices for ages to charge you exorbitant prices when you remove the M&Ms from the mini fridge, and it’s something we’re seeing more and more as the retail world embraces IoT. But it’s a simple device that I can build myself and should serve as a good project to design and build something from soup to nuts. I’m envisioning something like this.


At the highest level, the solution will require:

  • Weight sensors under the platform that can send weight data at set intervals, or when triggered by a change.
  • The ability to set up the device for a new item by entering the weight of a single item (one roll of toilet paper in this case), and how low the supply can get before triggering an alert.
  • Ability to configure your alert information. Still not sure how far I’ll take this part – whether it will simply be an email or text, or whether I’ll do something more sophisticated, for example finding the best deal on toilet paper on the web and sending a link and fun things like that.


The Logical Design

At this point, we’re ready to start thinking about the logical components that are required to build this solution, so we can finally start digging into the Azure IoT Suite. Sweet!

In terms of the device, obviously we’ll need a platform of some sort and a weight sensor. We’re essentially building a specialized scale.  You can certainly build your own, but I was able to find a food scale that won’t automatically turn itself off, and will do the conversion of weight to number of items for you.

Then we’ll need a wifi enabled processor to send the weight data. I’m using the Adafruit Feather HUZZAH ESP8266.

Once we’ve got all that, we need to send that data to our Azure IoT application for processing, storage and notifications. Here’s where things get fun.

There are a lot of capabilities and services in Azure and Azure IoT and you won’t always need all of them. So it’s helpful to think about the high-level things you’ll need your solution to do, and then select the pieces you’ll need. For an IoT solution like this, we’ll want to:

  1. Connect to and register our IoT device
  2. Receive, analyze and act on data being sent by the device
  3. Integrate that data and those actions into an application of some sort

For my solution, I’ll be using the:

  •  IoT Hub to connect the device and manage the communication.
  • Stream Analytics to analyze the data coming from the scale and decide what the appropriate action is, and
  • Web Apps to handle the logic of sending out alerts and any UI components of the solution


In the next blog, I will walk through creating a simulated solution, starting with a pre-configured solution. Stay tuned!


Presenting at East Bay SharePoint User Group this Thurs 4/23

I’ll be presenting at the East Bay SharePoint User Group this Thrusday, April 23, 2015.

I’ll be giving a crash course on Delve and the Office Graph. Talking about what they are, how they work, how they could fit in your organizations, as well as pitfalls to watch out for. Should be a fun session. Hope to see you there!

Click here to register!

Theater Session at Ignite

I’m pleased to report that I’m going to be delivering a “theater session” at the Ignite Conference in Chicago, IL, May 4-8 2015. The theater sessions are 20 minute sessions that will take place in the Expo Hall during lunchtime Tuesday, Wednesday and Thursday, May 5-7 2015.

My session is called “Building an app on top of the Office Graph” and during this session I will share my journey of creating a custom Universal Windows App on the Graph with Cortana integration. I’ll walk you through the process including conception, design, dev and finally publishing the app. Attendees will learn about opportunities, limitations, helpful tools and considerations when working with the Graph.

I’ll follow up with exact date and time when I have it.

If you plan to be at Ignite, I hope I’ll see you there!

Microsoft Confirms SharePoint Server 2016 availability dates

Microsoft has confirmed the general availability and public preview dates of SharePoint Server 2016. This should make all the on-prem and hybrid customers (most of us!) feel a bit more at ease…

From the article:

Today, we are confirming that SharePoint Server 2016 will become generally available in Q2 2016, with a public beta planned for Q4 2015.  We also want to confirm our commitment to delivering on-premises releases of SharePoint for the foreseeable future. We envision a future where we will continue to have customers who choose a combination of on-premises, cloud and hybrid deployments for many years to come.  We’re excited to start sharing information on our SharePoint investments at Microsoft Ignite, so below I’ve highlighted some of the most relevant sessions to attend if you’re interested in learning more about the road ahead.

Read the full article here: SharePoint Server 2016 Update.

Register for the MVP Virtual Conference

In May, I’m going to be participating in a great new event. It’s called the the MVP Virtual Conference (MVP V-Conf) and it’s a virtual, 2-day event that showcases how the best and brightest independent technology experts are using Microsoft technologies today. Tune in and see what the community of power users are saying about the mobile-first, cloud-first world of possibility with Microsoft re-imagined.
It will be broadcast live from 8:00 – 6:00 PM, PST Thursday, May 14, 2015 and Friday, May 15, 2015.
I will be presenting on the 2nd day, May 15th and talking about Delve and the Office Graph.
I hope to (virtually) see you there!

What are Delve and the Office Graph?

I’ve been spending a lot of time lately with Delve and the Office Graph. I share my take on these technologies, how to extend them, compliance and privacy concerns and more in a new blog post for the European SharePoint Community. Read the blog here!

Some Straight Talk about the future of InfoPath and Forms

There’s been a lot of buzz about the future of forms in SharePoint and, frankly little clarity. This is such a contentious topic and social media has been swirling with rumors and misinformation. Sonya Koptyev (Senior Product Marketing Manager on the Office 365 Developer Program) bravely participated in an “ask me anything” session hosted by IT Unity. If you weren’t able to join, here are some of the key points that were made.

Sonya did not make any new announcements, but clarity on recent announcements.

Disclaimer: These are my notes that I managed to scribble down during the session – any inaccuracies are my own. All questions and answers are paraphrased by me. There will be an official FAQ list eventually, and I’ll update this post with that link, but I wanted to share my notes from this event in the meantime for those that couldn’t attend.

SK: First some clarity on terminology:

  • InfoPath Client, InfoPath 2013, InfoPath Client 2013 all refer to the desktop client. Used to create and fill out forms
  • InfoPath Forms Services, IPFS is the service inside of SharePoint Server used to render forms in browser (and other behind the scenes stuff)

Q: Will the InfoPath client be updated for 2016? What is experience if we have to use 2013 client with 2016?

SK: Client is not changing at all. Will not be a new client. 2013 is the last one. If you have it now, that’s the latest and greatest. It will not be in 2016 click-to-run. If you don’t have it already, MSFT is figuring out how to get it to customers.

They’ve extended the IPFS roadmap into 2016 release. No changes in experience.

They’re still working on licensing.

Q: Lots of fears with using different versions of office clients simultaneously. How will this existing client work together with newer versions of office?

SK: MSFT will be testing it heavily to make sure it works.

Q: Will new features be included? Support for enterprise keywords? Support for PDFs? Any new features or just as-is?

SK: Only as-is. No changes to client or IPFS other than bug fixes.

Q: What about support?

SK: Client will be supported until 2023. IPFS support will be dicted by SharePoint 2016 support roadmap.

Q: Why was Forms on SharePoint Lists (FOSL) killed?

SK: It was supposed to replace forms. A way to edit new and edit list forms. They tackled this subset of the forms functionality because it was the easiest to get out of the door. However as they did usability studies it was clear that it  wasn’t as useful as hoped. In grand scheme of things they prefer to work on next gen of forms (not InfoPath, but whatever vNext will be). They’d rather just have one solid approach to all things forms instead of piece meal.

Q: Is the same team that was working on FOSL working on this or a different one?

SK: There have been changes across the board.

Q: Office 365 vs. on-prem? How does story change?

SK: MSFT will maintain forms services for SPO for at least a year (maybe more) after next on prem release. Functionality should be identical.

Q: Is it still going to allow same functionality? Lists and form libraries? Or restricted to just form libraries in 2016?

SK: Same functionality will still work in 2016.

Q: What’s roadmap for structured document forms? Does that fall into roadmap still? Or new roadmap?

SK: It hasn’t fallen off the roadmap – still something that’s top-of–mind when considering the overall forms story. Hasn’t seen it come up too much.

SK: Infopath was interesting in that it straddles info workers and devs. Form futures may have to split that. No-code, in-browser, mobile friendly vs. a more dev focused version. But not sorted out yet.

SK: Product will probably come in waves. Minimally viable product (MVP) will get out the door first. No longer the 3-year cycles. Interested users should add suggestions to User Voice ( The team is very heavily relying on that to gather requirements and prioritize features.

Q: In design for vNext, will there be an upgrade path?

SK: It depends. If you really have complex forms with code-behind, there’s no migration path (as with other products). For less complex (no-code-behind), they hope to have a migration path. But they don’t have the “target” yet so don’t know what that will look like.

Q: Is MSFT Looking at combining products? Pulling forms into SPD? And will features be added back?

SK: She doesn’t know. Wouldn’t think so.

Q: Will there be a design tool as part of the solution?

SK: Yes, for sure.

Q: Will submit to REST service be available?

SK: Add things like this to user voice. Then people can vote and influence priority.

Q: Access Services – is this part of the story?

SK: They are part of the same team. So trying to rationalize what will happen there.

Q: If doing a green-field project, should we look at other tools?

SK: Need to assess the requirements. If they know there’s going to be custom-code and custom biz processes, look at ASP.NET, AZURE, partner solutions (Nintex, K2, etc.).

Q: For orgs that want to stay codeless – what’s their best bet?

SK: They should look at partner products. K2, Nintex, etc. If it’s something small that needs to be implemented quickly, no reason not to use InfoPath to get it out the door quickly if it’s a no-code form.

Q: Concept of Infopath with XML base. Sticking with that or moving to different model?

SK: Looking at multiple back-ends. Don’t know yet.

Q: Seems like timing has been off with the announcement. When did you know it wasn’t going to happen? Can you be transparent?

SK: At SPC got up on stage and said “we’re killing infopath and client. Won’t have another version. Working on FOSL.”

As they continued to work thru kinks, bugs they did usability testing and throughout sets of feedback that said it wasn’t ready. Pushed out a few times by a month each. Got into fall and larger convos about larger forms strategy began. It was more reasonable to include this in larger set of features. In Jan, she was working on an update – feeling pressure. Trying to get something out the door. Power of social media took over. Someone posted that they were at an event and mistakenly said client 2016 was going to be released. Perfect storm. They said there’s enough swirl in the community – need to put an end to the speculation and rumors. Not helping anything on this contentious topic. That’s what precipitated the latest update and ultimately this talk.

Q: What has MSFT learned thru InfoPath process. It’s a new world where MSFT is more open and transparent. Did it backfire?

SK: If you’ve been following along, opening up layers of transparency. What she hopes we’ve seen are frequent blog posts (2 a day) way more active on social. Updating the roadmap as quickly as possible. What we’ve learned is that if we’re completely committed to level of transparency, need to communicate changes to the plan as soon as they’re confident they’ll stick. Not feasible to provide updates for every engineering change, but when there are significant changes to the plan of record, need to communicate those quickly.

Q: How has handover to Satya impacting your work?

SK: Really inspiring and motivating to see someone who wants us to be front-and-center. Wants us to be relevant to folks again and have our hands in latest/greatest. Seen lots of red-tape and obstacles fall away. Letting folks do what they think is right and innovate. Change has been massive and positive.

Many thanks to Sonya for participating in the session and to IT Unity for hosting it!

Add a link to a list item in a SharePoint Designer Workflow Email

Something that seems like it would be easy and obvious is, in a SharePoint Designer Workflow, adding a link to a list item in an email. Turns out that it’s not immediately obvious . There are a couple of places this info can be found on the internet, but not very easily, so I’m posting this in case it helps others and definitely so that I can find it again 😉

First off, if you’re adding a link to the current workflow item, then the answer is actually easy as long as you know to look for it.  From inside the Email builder, click “Add or Change Lookup”, select “Workflow Context” and “Current Item URL”. This link will work assuming that you want to link to the current item.


However if you’re creating a link to a list item other than the current workflow item then there are a number of fields that *look* like they would provide a link to the list item, but actually don’t. I’ve added a bunch of them to the email builder below, and notice, none of them actually return what we need.



The actual URL to my list item is http://myportal/Lists/test/DispForm.aspx?ID=1 so none of these will actually get you there.

In this scenario one method to get your url is to use the Current Site URL field from the Workflow Context data source then type the list name and finally add the list ID at the end. Depending on the logic of your workflow there are many different ways you could determine the correct list ID. For this example, I just have a variable that stores the ID called MyListID.



And that gets me the URL I need in my email


Getting a list of all Promoted Results (best bets) in a SharePoint 2013 site collection

I had a business user ask me the other day if they could see a list of all the best bets in their new 2013 SharePoint portal so that they could validate the terms and links. First off, we know in 2013 that best bets have evolved into Promoted Results. But beyond that, for a business user that does not have access to view the search configuration pages, this was unfortunately not a simple request.

I could give them access to the Query Rule configuration page, and they could scan the query rule table, looking for those items identified as Promoted Results amongst the other types of query rules, however they still can’t see the links to the best bets.


Doing a Bing search will return some scripts that may help you. But many of them only return promoted results from the Search SSA (not from a site collection). I thought I would share what I used in  case it helps someone else. Note, I named all my Query Rules that have promoted results with the prefix “PR:” and that’s how I filter, but of course you can change it to add your own criteria, or none at all.

This script will both list the Promoted Results in the PowerShell Window as well as output the values to a file. Hope it can help you!


$SearchServiceName = “Search Service Application”

$sspApp = Get-SPEnterpriseSearchServiceApplication $SearchServiceName

$siteUrl = “http://myportal/search

$site = get-spsite $siteUrl -WarningAction SilentlyContinue

$web = $site.rootweb

$fedManager = New-Object Microsoft.Office.Server.Search.Administration.Query.FederationManager($sspApp)

$SearchOwner = New-Object Microsoft.Office.Server.Search.Administration.SearchObjectOwner([Microsoft.Office.Server.Search.Administration.SearchObjectLevel]::SPWeb, $web)

$SearchObjectFilter =  New-Object Microsoft.Office.Server.Search.Administration.SearchObjectFilter($SearchOwner)

$queryRuleManager = New-Object Microsoft.Office.Server.Search.Query.Rules.QueryRuleManager($sspApp)

$queryRules = $queryRuleManager.GetQueryRules($searchObjectFilter)

$bestbets = $queryRuleManager.GetBestBets($SearchObjectFilter)

$promotedResults = $queryrules | Where-Object{$_.DisplayName -match “PR”}

$promotedResults | ForEach {

Write-Host “Query Rule Title:  ” -ForegroundColor “Yellow” –NoNewLine

Write-Host   $_.DisplayName -ForegroundColor “White”

Write-Host “Terms: ” -ForegroundColor “Yellow”  –NoNewLine

Write-Host $_.QueryConditions.Terms -ForegroundColor “White”

Write-Host “Best Bet Title(s):” -ForegroundColor “Yellow”   –NoNewLine

Write-Host -ForegroundColor “White”   $_.AssignBestBetsAction.BestBetIds.GetBestBetsFromIds().Title

Write-Host “Best Bet URL(s):”  -ForegroundColor “Yellow” –NoNewLine

Write-Host -ForegroundColor “White”   $_.AssignBestBetsAction.BestBetIds.GetBestBetsFromIds().URL

Write-Output “Query Rule Title: ”   $_.DisplayName

Write-Output “Terms: ”  $_.QueryConditions.Terms

Write-Output “Best Bet Info: ” $_.AssignBestBetsAction.BestBetIds.GetBestBetsFromIds()} >>  c:\output.txt