Dot Net Mafia

Group site for developer blogs dealing with (usually) .NET, SharePoint 2013, SharePoint 2010, Office 365, SharePoint Online, and other Microsoft products, as well as some discussion of general programming related concepts.

This Blog



Corey Roth [MVP]

A SharePoint MVP bringing you the latest time saving tips for SharePoint 2013, Office 365 / SharePoint Online and Visual Studio 2013.
  • Reading your skin temperature using the Microsoft Band SDK Preview

    Microsoft Band is packed with sensors that let it track your workouts.  However, one sensor you don’t hear about often is the Skin Temperature sensor.  This sensor allows you to read the temperature in Celsius of your skin where your Band is.  There aren’t any apps built-in to Microsoft Band that make use of it directly.  However, as a developer you can take readings from that sensor from an app on your phone using the Microsoft Band SDK Preview.  The SDK is very preliminary and you can only do a handful of functions from a phone including reading the sensors, creating tiles and sending notifications, and changing the theme and background image.  It has a direct dependency on the app you deploy to your phone.  You can’t actually build an app and deploy it so that it runs on Microsoft Band natively.  This limits you quite a bit, but you can still do a few cool things.

    For my example, I worked off the Sensors example project for Windows Phone 8.1 and made some customizations.  The app consist of a simple button that initiates our connection to the Band and starts taking readings.  You can customize the Sensors project as well or you can grab my copy from GitHub.  You can get the SDK from nuget by using the following command.  This will add the necessary project references.

    Install-Package Microsoft.Band -Pre

    Start by editing the XML of the Package.appxmanifest file and add the DeviceCapability section for Microsoft Band inside the Capabilities element.

    <DeviceCapability Name="bluetooth.rfcomm" xmlns="">

      <Device Id="any">

        <!-- Used by the Microsoft Band SDK Preview -->

        <Function Type="serviceId:A502CA9A-2BA5-413C-A4E0-13804E47B38F" />

        <!-- Used by the Microsoft Band SDK Preview -->

        <Function Type="serviceId:C742E1A2-6320-5ABC-9643-D206C677E580" />



    You also need to add the Proximity capability as well but you can do that through the UI.

    Now, we’ll work on adding some functionality to MainPage.xaml.  This consists mainly of a few TextBlocks and a Button.  Clicking the button will invoke our code to connect to Band and take a reading.  Create an event handling method for the button and mark it with async.  Now, we first need to get the paired Bands to the phone.  This assumes you have already paired your Band in the Bluetooth settings of the phone.

    // Get the list of Microsoft Bands paired to the phone.

    IBandInfo[] pairedBands = await BandClientManager.Instance.GetBandsAsync();

    if (pairedBands.Length < 1)


        this.textBlock.Text = "Band not paired.";



    To connect to Band we create an IBandClient in a using block.

    using (IBandClient bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[0]))



    Now we can read from the Skin Temperature sensor.  To do this, we bind an event handling method to the ReadingChanged event of the SkinTemperature class.  We’ll cover the event handling method just below.

    bandClient.SensorManager.SkinTemperature.ReadingChanged += SkinTemperature_ReadingChanged;

    Finally, we call StartReadingsAsync to start taking readings from Band.  We follow it with a delay of a minute before calling StopReadingsAsync to stop taking readings.

    await bandClient.SensorManager.SkinTemperature.StartReadingsAsync();

    await Task.Delay(TimeSpan.FromMinutes(1));

    await bandClient.SensorManager.SkinTemperature.StopReadingsAsync();

    In the event handling method, the value of e has a type of BandSensorReadingEventArgs<IBandSkinTemperatureReading>.  We can get the skin temperature in Celsius by using the SensorReading property.  For us Americans, we can convert that to Fahrenheit.  You know the formula right?  C * (9/5) + 32.  :).  Using the Dispatcher, we then write the value of the reading to the UI.

    private async void SkinTemperature_ReadingChanged(object sender, BandSensorReadingEventArgs<IBandSkinTemperatureReading> e)


        IBandSkinTemperatureReading temperatureReading = e.SensorReading;

        string text = string.Format("Temperature: {0}C", temperatureReading.Temperature);

        await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { this.textBlock.Text = text; }).AsTask(); 


    Now you are ready to run the program on your Windows Phone and see how hot you are!  Plug your Windows Phone into your PC via the USB port and then debug the program and be sure you choose Device in the options.  You can’t do this with the emulator.


    There you have it, my skin temperature was 30.69 Celsius (87.42 Fahrenheit).  Now you might be thinking now, “ok, neat, but how do I see that information on my Band”.  Well, you can push that information to your Band using a Tile.  In fact, I’ve included that code in my repo on GitHub.  However, you can only push information to your Band when the Windows Phone app is running.  That’s not all that useful.  I’ll cover tiles in a future post, but if you want to try it out for yourself, you can grab my code from GitHub.  I would have included it today but I found that adding tiles so far doesn’t always work as expected.  Maybe it will for you.

    This example really has zero practical value but I expect that we’ll see more opened up in the API in future versions.  If you have been interested in seeing what you can do with it as a developer, it’s worth checking out though.  For more examples of working with Band across platforms, be sure and check out the published documentation.

  • Creating an Azure Logic app that connects with SharePoint Online

    Logic apps are a great new feature in Microsoft Azure that lets you connect to a variety of systems and create triggers and events.  This allows you to reproduce some interesting light workflow functionality in an easy manner.  It comes with connectors for common Microsoft products like SharePoint Online, Yammer, and BizTalk.  However, it also includes connects to services like Twitter, SalesForce, SAP, and Dropbox.  It even includes a connector for on-premises SharePoint 2013 servers although it requires some additional configuration.

    As Logic apps are part of Azure, this is definitely a developer focused feature.  I don’t see end users working with these directly.

    Today, we’re going to look at expanding the Twitter / Dropbox example and expand that for use into SharePoint.  That example stopped at only inserting the first tweet into a file on Dropbox.  This example, will insert all tweets that have been returned from a user’s Mention timeline into a list on SharePoint Online. 

    First, I started by creating a simple custom list on my SharePoint Online (Office 365) site.  I am just using the Title column as well as a custom column named TwitterAccount to capture who sent the tweet.


    Like in the Twitter / Dropbox example, we need to create our connectors first.  We’ll create the Twitter Connector first. Start by logging into the new Azure portal at  Then click New, Developer Services, Azure Marketplace, API Apps.


    Select Twitter Service and then click Create.  Here you will be presented with some standard Azure settings that you will need to specify such as the App Service Plan, Resource Group, Subscription, and Location.


    Now, we need to repeat the process for the SharePoint Online connector.  Select the SharePoint Online connector out of the API Services list.  Here you need to also specify the URL to your site as well as the relative URL to the list.  For example, for my Tweets list I created, I specified a relative URL of Lists/Tweets.


    Now that we have created our connectors, we can get started with our Logic apps.  Create a new one by choosing Logic app under the API Services list.  If you can’t find any of these connectors or apps you can always just search for them.  After you click Create, you will be prompted for some settings.


    Give your app a name and then click Triggers and Actions to begin designing your app.  The canvas will appear and you can begin designing your app.


    To get started you simply click on the connectors you want to use.  The Twitter / Dropbox example starts with a recurrence connector to execute the task once an hour.  I didn’t want to accidently leave this app running so I checked the box Run this logic manually

    Now we’ll click on the Twitter connector to pull data out of Twitter.  The first time you do this you will be prompted for authentication by Twitter.  Once you login, it will show a list of common actions.  However, you can click the “…” to see more.


    In our case, we want to select Get Mentions Timeline.


    Now, we need to add our SharePoint Online Connector by clicking on it.  It will also prompt you for authentication as well.  It will then present you with common actions that you can preform on your list.  It will mention your list directly by name.  Choose Insert into <listname> to continue.


    We’ll be able to start mapping our data to the columns in the SharePoint list.  You can find the other fields by clicking on the “…” button.


    Don’t do the mapping yet though.  In the online example, it only inserted the first list item.  We’re going to implement repeating functionality to insert all of the list items.  Click on the cogwheel and choose Repeat over a list.


    You can also specify conditions from this menu but we’ll cover that in the future.  Now we want to specify the fields to use in our repeater.  In the Repeat Field click the … icon next to it and choose Get Mentions Timeline.  This will add the text @body(‘twitterconnector’) which is an internal syntax used by Logic apps.  Now we want to write the Tweet Text to the Title field and the Tweeted By field to the TwitterAccount field.  You can look at the options specified in the “…” menu but they don’t quite work right for repeaters.  You can start by picking This Action but we still have a bit of work to do.  It will add @repeatItem() to the box when you click it.


    Now we need to specify the field name.  We can actually infer this by looking at the Twitter Connector or by looking at the syntax it uses when we select a field from the “…” icon.  Since this is a preview release, the selectors for these fields don’t always give the same results.  Sometime if you select a field name it will do it correctly.  Other times it gives us the syntax that only returns the value from the first item returned.  Ultimately, I want to end up with a value of @repeatItem().TweetText for the Title field and a value of @repeatItem().Tweeted_By for the TwitterAccount field.  Here’s what the final settings look like.


    Click the checkbox to accept the values and then click Save at the top.  Finally you want to click Create to begin creation of your Logic app.  If you are going to make a lot of triggers and actions, I recommend you click Create first before you create them.  This will allow you save your progress as you work on things.  Nothing will be saved until you have created the Logic app itself first.

    Now are ready to manually run the Logic app manually.  Click the Run Now button at the top to begin.  You’ll see the progress in the Operations section at the bottom.


    Go back to the list on your SharePoint site to verify that the functionality worked.  You can see the list of tweets that mentioned me have been populated. 


    I noticed they didn’t necessarily come in the right order so it might be a good idea to bring in the date column as well.  When I made a schema change to my list earlier I had to recreate the SharePoint Online Connector for it to show up.  There might be a way to refresh it though.

    Logic Apps are an interesting technology with a lot of promise.  It makes some scenarios rather easy to implement in a short time.  I’ll continue to work with the technology to get a feel for what it can do and what the limitations are.  Try it out for yourself and see what you can do.

  • Troubleshooting errors with the client-side People Picker (SPClientPeoplePicker)

    I’ve done quite a bit of work with the client-side People Picker in SharePoint-hosted apps lately.  I find that while it is relatively easy to get set up, I found it was quite easy to break.  I have found that it tended to work better in Office 365 than it does in on-premises SharePoint 2013.  I ran into two common issues. First, I found that after you did a query for users, you could not actually select the user.  The second related issue is that you could select the user, but the textbox would remain empty and not show the user’s name.

    In my troubleshooting of the issue, I found that the behavior differed based on a variety of things including what user was using the page, how you authenticated, and which browser you were using.  When I was experiencing issues, I found that administrator users never had a problem.  That figures.  Low-privilege users would not be able to get the control to work.  Then I discovered that it would work for these users if they were not auto logged into the site with Internet Explorer.  Here, I am referring to the setting Automatic logon with current user name and password.  If the user typed in their credentials manually, it would actually work.  Quite strange.

    After further investigation, I discovered that access to the spMgr object deep in clientpeoplepicker.js was coming back as undefined.  This turns out to be in a block of code that shows presence information for the user.  I found that if I disabled presence, it fixed the issue for users in Internet Explorer.  To disable presence, set ShowUserPresence to false on the SPClientPeoplePicker object.  Do this right before your call to SPClientPeoplePicker_InitStandaloneControlWrapper.

    SPClientPeoplePicker.ShowUserPresence = false;

    This resolved my issues in Internet Explorer.  However, Chrome was displaying some erratic behavior.  Sometimes the People Picker would work, but most of the time it still wouldn’t.  Although this technique worked for some browsers, I don’t think it was the final solution.  I found the final solution also in the debugger.  I reported the following error in clienttemplates.js:

    Strings is not defined.

    The odd thing is that the minified version of strings.js was actually included on the page automatically but it didn’t work for some reason.  Strings.js is the JavaScript file that contains all of the multilingual string resources for your current culture.  I included a hard reference to the US English version of the strings.js file in the 1033 folder. 

    <script type="text/javascript" src="/_layouts/15/1033/strings.js"></script>

    Once I did that, all of my People Picker issues were resolved.  You may want to correct culture code for the languages you use.

  • Using Office Preview for Windows 10 with Office 365

    The new touch-friendly Office Preview apps for Windows 10 (aka Office Universal Apps for Windows 10) have native support for connecting to your personal OneDrive as well as Office 365.  When you first install the apps, they will take over your file associations.  When opening any of the desktop applications in Office 2013, you’ll see this right away as it prompts you to restore file associations.


    Since you can associate Office documents with the new Word Preview, Excel Preview, and PowerPoint Preview apps, that means we can use them to open documents in Office 365.  That means if you choose the option “Edit in PowerPoint” like in the example below, it will open with PowerPoint Preview.


    Windows 10 will open PowerPoint Preview for you and start opening the document from Office 365.


    Be warned, that opening documents from Office 365 takes a considerable amount of time.  This issue could be isolated to the tenant I was using though.


    If you haven’t added your Office 365 account to the Office Preview Apps for Windows 10 yet, you will be prompted for credentials when you first connect.


    Now you can edit your document as normal.  Remember, that the Save button is gone now and your changes will be updated automatically as you type.

    One thing I discovered in this process is that the apps do not support SharePoint 2007 (don’t ask me why I know).  I haven’t tried SharePoint 2010 yet, but I suspect it will work.  If you do try it, leave a comment and let us know how it went.

  • Office Universal Apps for Windows 10 - Who needs a Save button?

    Today, Microsoft released their Office Universal apps for Windows 10 Technical Preview.  That’s a long way of saying that touch-friendly Modern Applications (formerly known as Metro and Windows Store apps) finally exist for Windows tablets.  I’ve had the pleasure of using the apps throughout the day.  I wrote an entire technical specification in Word Preview today and things worked well.  However, the biggest change for me is the lack of the “Save” button.  It simply isn’t there. 


    For those of you familiar with Office Online (formerly known as Office Web Apps), this paradigm is nothing new.  Saves just happen auto-magically.


    I’ve found myself really having trouble adjusting to it.  I am used to typing a sentence or two and reaching for Ctrl+S to save my document.  That simply isn’t necessary any more.  Your changes will automatically be saved as you type.  Where you need to be careful is if you are editing a document directly from OneDrive and you are on a slow or latent connection.  Sometimes it takes a while for those updates to be pushed up to OneDrive.  This makes me fearful on what happens when you are offline or if you have network connectivity issues while you are working on a document.  This will require more testing on my part.

    Another aspect I find a little bit difficult for the consumer to master is when creating new files.  Whenever you create a new document in Word, it will automatically name the document Document (1).  It automatically creates this file in your default save location.  It will increment the document number if you have already created a document already too.  That means whenever you start a new document, it creates a physical file somewhere even before you save.  This is different than Office for the desktop where the copy is held in a temporary location until you hit save for the first time.  To choose a filename for the document, you either need to choose Save as or you can click on the filename at the top of the app.


    I guess this works, but it’s definitely different than what we are used to.  If you are going to try out these preview Office apps, be sure and proceed with caution.  The last thing you want to do is lose half a document just because of some pre-release issue.

  • A quick look at Universal Office Apps for Windows 10 (Touch)

    Since the release of Windows 8, we have all ben wondering when we would see a touch-optimized Office experience.  We saw apps delivered to both iOS and Android first, but still nothing for Windows other than Office 2013 for desktop.  All of that changes today as Microsoft has release previews of Word, Excel, and PowerPoint as Universal Apps for Windows 10.  If you are not familiar with the term Universal app yet, this is a single app that can run on Windows 10 desktops, tablets, and phones.  Support for Xbox One has even been pledged but there hasn’t been any updates on that in quite some time.  These look just like existing apps for Windows 8.1 formerly known as Metro, Windows Store, and now Modern Applications in Windows 10.

    You’ll need to be running the latest public build (9926) of Windows 10 to try these preview out.  The original blog post had links to Word, Excel, and PowerPoint.  However, they have been removed for the moment.  However, I still have the links to Word and Excel handy.  These links only worked for me in Internet Explorer.  If you try them on a Windows 8.1 computer, you won’t see the “Get” button nor will you be redirected to the Windows Store to download the app.  The blog posts says you can do a search from the new Windows Store (Beta) app, but I haven’t had it work yet.  This is typical though when a new app is released to the store.

    After you have installed the apps, launch them from your start menu or by asking Cortana.  We’ll start with Excel Preview.  Notice, Excel Preview listed as a Modern Application where Excel 2013 is a Desktop Application.


    When each Office Preview app starts, it will show you a quick three-step tutorial on how to get started specifically highlighting touch features.  Here, you learn how to move columns by touch.


    You can add rows and columns with a tap.


    Here, you have the option to join the customer experience improvement program.


    Once you start the app, you’ll see a familiar screen with templates that you can use to get started.  It will automatically pull in your recent files that you have used on OneDrive.


    Be sure and click on the Accounts button to add your Office 365 account if you have one.  Unfortunately, you have to do this in each app separately.


    You’ll then be able to see a list of all your apps across OneDrive for Personal and Business use like you see in this example from Word Preview


    If we create a new document, we’ll see a new touch friendly Excel.  The buttons and icons are spaced a part to make them each to touch with your finger.


    One feature I really like is the light bulb icon.  Clicking this will allow you to search for functionality that you can’t find in the ribbon.  For example, if I wanted to insert a chart, it gives me the options right there by typing the word “Chart”.


    Excel should be able to open many of your existing spreadsheets as well.  Although, I found that Excel Preview crashes quite a bit more than the other Office Preview apps.  Some of my spreadsheets it just refused to open.  That’s to be expected though.  Excel spreadsheets can get complicated quickly and this is a preview product.


    Some spreadsheets are out-right not supported.  If you are pulling data from a SharePoint list or using PowerView, it will display an error message telling you why.  I’m not surprised this doesn’t work but maybe it will some day in the future.


    For desktop users of Office 2013, the biggest change you will have to adjust to is that you can only have one file open at a time.  Now before you start bashing Universal apps on Windows 10, keep in mind that the Office apps on iOS and Android have this same restriction.

    I’ve been pretty excited to see the launch of Office for Windows 10.  We’ll cover Word Preview and PowerPoint Preview in an upcoming article.  While you may not use these apps on your Surface Pro 3 in desktop mode.   I think these apps will do great when the device is running in Tablet mode.  If you have been thinking about running Windows 10 on your device, be sure and check out my review on IT Unity.

  • Configuring Information Rights Management (IRM) on a document library in Office 365

    Last year, I wrote a post on how to get started using Information Rights Management in Office 365.  That post covered what you need to get started as well as how to enable IRM at an individual file level.  This post is a follow-up to that one and covers how to configure IRM on a document library.

    If you haven’t enabled Rights Management in your Office 365 subscription, you’ll need to do that first.  My previous post can walk you through the steps.  You’ll find Rights Management under Service Settings now on the administration site.  Once IRM is configured on you subscription, go to the document library and view the Library Settings.  From there, click the Information Rights Management link.  When you configure IRM for the first time on a library, it will prompt you for a policy name and description.  This message here will be visible to users when viewing the document.


    Click the SHOW OPTIONS link to view the settings we can configure on the document library.


    You have quite a bit of flexibility to configure what users can do to your files from here.  However, you don’t quite have the level of granularity on permissions that you do when configuring Rights Management from within Office.  In the first section, you can prevent users from allowing documents that don’t support IRM.  For example, if you upload an XML file (at least I am pretty sure you can’t do IRM on that), the file upload will be blocked. 

    You can also turn IRM after a period of time.  This setting is good if you know that the documents are only sensitive for a period of time.  For example, maybe an acquisition is occurring on a certain date and then the documents are no longer sensitive.

    You can also prevent users from viewing the documents in the browser.  You may have various reasons for why you would want to do this.  It’s not enabled by default, but you can turn it on.  When you do have it enabled, the Document Preview panel will not show in the document library and clicking on the document opens it directly in Office.


    If you do allow your users to view documents in the browser, they will get an error message when using the document preview functionality.  However, they can still view the document in the browser using Office Online (formerly Office Web Apps) when clicking on the OPEN link.


    In the Configure document access rights section you can prevent users from printing the document.  This simply disables the print dialog inside Office.  Users could still find ways to get around this if they tried hard enough.  Remember that the settings in this section affect viewers and not users with full control permissions.

    You can also set how long the user’s rights are valid before they expire on the document.  This setting is important.  If a user downloads the document and copies it to a flash drive, he or she will be prompted once to get rights to the document.  Now, if the user left the company but still had the file they won’t be able to open it once the rights expire.  You just need to pick the number of days before the license expires.  The higher the value, the less often the user has to login to get rights again.  However, if the value is too small, you may annoy the user by prompting them more often to get rights.

    In the set group protection and credentials settings, you can specify how often users must verify their credentials.  You can also specify a security group where users are allowed to share the documents with other members of the group.  This is completely different from the security settings on the document library.  For example, a user might not have access to the document library, but they received a file from it on a flash drive.  If the user is in the security group you specify here, he or she will be able to open the file.

    Once you have configured, IRM on your document library you can test it.  Clicking on the document will show it in Office Online.  The message you configured for the policy at the top.


    When you click on OPEN IN WORD, we’ll see the document with additional settings in the tool tip.  Since I have full control of the document library, I have permissions to edit the rights management policy from within Word using the Change Settings button.


    To really verify functionality, we will want to login with another user account.  In my example, I logged in with a user that has Viewer permissions.


    Clicking View Permissions, I can see what permissions the user has exactly.  It also tells you when your permissions expire.


    When you look at the back stage in Office, you’ll see that many of the links are disabled such as Print


    If your expiration date is getting near, you’ll see a message inside Office notifying you.


    The settings for Information Rights Management have matured quite a bit since SharePoint 2010.  You have a lot more control of what you can specify as defaults in your document library.


    Information Rights Management is a great feature in Office 365 and easy to set up.  I find it is still highly under utilized by most organizations.

  • Querying Office Delve Boards with JavaScript and REST

    The new functionality of Office Delve, Boards, just came out recently.  As a developer, you might be thinking how can I access this data in my own applications.  This post will help you get started.  These queries use the new Graph Query Language (GQL) syntax of Office Graph.  As the GQL reference link points out you should be warned that these APIs are highly subject to change and should not be used in production applications.  The queries we are using today were determined by examining the REST API calls from the pages inside Delve.  They may work now, but they may not work in the future.

    Querying the boards a user is following

    First, we want to determine which boards a user is following.  We want to return the same data that we see in the left navigation of Delve.


    It appears Delve makes use of a new “protocol handler” like technology that has it’s own URL syntax.  These URLs look like TAG://PUBLIC.  To get the list of boards a user is following, we issue the following query:


    However, we also have to include some Properties in our REST query to get the data we need.  In particular interest is the new GQL action number 1050 that you use on the me actor.  Here is what the entire REST query looks like.   I recommend limiting the SelectProperties that you returnThe important ones are Title, Path, and DocId.


    Try typing it in the browser of your tenant. 


    Looking at the individual results, you’ll see the name of the board, it’s path and the DocId.   The Title contains the name of the board in all caps.  The Path we can use to query items that have been tagged. The DocId actually refers to an ActorId that we’ll use later.

    Querying the items tagged to a board

    When you visit a board’s page in Delve, it actually issues two queries to get the items that have been tagged to the board.  First, it issues a query using the path we saw above.  It does this to get the ActorId which is stored in the DocId property.  It then uses that ActorId in a second query to get the actual items that have been tagged to the board.  If you already know the ActorId, you can obviously skip the first step to retrieve it.

    To get the ActorId, we issue a query using the path on the TAG URL with the name in all caps following the NAME parameter.  This is just like what we saw in the results above.  Here is what the REST query looks like.  We are only interested in the DocId property so we specify that in the SelectProperties.

    https://<tenant>'Path="TAG://PUBLIC/?NAME=<board name>"'&Properties='IncludeExternalContent:true'&SelectProperties='DocId'

    Now let’s write some JavaScript code to retrieve this value.  In my example, we’re going to retrieve the ActorId for the Marketing board in a SharePoint-hosted app.  Make sure you request the Search permission in your AppManifest.xml.  I have URL encoded the URL.  This just uses a simple call with $.ajax.  I’ve left out the use of deferreds to keep it simple. 

    $(document).ready(function () {

        var queryUrl = _spPageContextInfo.webAbsoluteUrl + '/_api/search/query?' +




        $.ajax({ url: queryUrl, method: "GET", headers: { "Accept": "application/json; odata=verbose" }, success: onQuerySuccess, error: onQueryError });



    In our onQuerySuccess function, we will retrieve the value of the ActorId.  Remember it is stored in the DocId managed property.  The data of search results is buried in multiple objects, so you have to go through quite a bit to get to it.  For more information on querying search with JavaScript and REST, see this code sample on MSDN Code.

    function onQuerySuccess(data) {

        var results = data.d.query.PrimaryQueryResult.RelevantResults.Table.Rows.results;


        var actorId;

        $.each(results[0].Cells.results, function () {

            if (this.Key == 'DocId')

                actorId = this.Value;





    Now, that we have the ActorId, we can issue the query to get the item associated with the board.  In the simplest form, you issue a query with QueryText of * (everything).  You then issue a GraphQuery using the ActorId and the undocumented ActionId of 1045.  However, if you want the query to match exactly what is on the Board page, you need a few additional exclusions.  These exclusions specifically remove content hidden from Delve as well as only show specific file extensions.  Here is what the REST URL looks like.

    https://<tenant>'* AND ((NOT HideFromDelve:True) AND (FileExtension:doc OR FileExtension:docx OR FileExtension:ppt OR FileExtension:pptx OR FileExtension:xls OR FileExtension:xlsx OR FileExtension:pdf OR ContentTypeId:0x010100F3754F12A9B6490D9622A01FE9D8F012*))'&Properties='GraphQuery:actor(<actorId>\,action\:1045),GraphRankingModel:action\:1045\,weight\:1\,edgeFunc\:time\,mergeFunc\:max,IncludeExternalContent:true'

    When it comes to the JavaScript, we simply replace out the ActorId  Again we encode the URL.

    var boardQueryUrl = _spPageContextInfo.webAbsoluteUrl + '/_api/search/query?' +

        "QueryText='* AND ((NOT HideFromDelve:True) AND " +

        "(FileExtension:doc OR FileExtension:docx OR FileExtension:ppt OR FileExtension:pptx OR FileExtension:xls OR FileExtension:xlsx OR FileExtension:pdf OR ContentTypeId:0x010100F3754F12A9B6490D9622A01FE9D8F012*))'" +

        "&Properties='GraphQuery:actor(" + actorId + "%5C%2Caction%5C%3A1045),GraphRankingModel%3Aaction%5C%3A1045%5C%2Cweight%5C%3A1%5C%2CedgeFunc%5C%3Atime%5C%2CmergeFunc%5C%3Amax,IncludeExternalContent:true'";


    $.ajax({ url: boardQueryUrl, method: "GET", headers: { "Accept": "application/json; odata=verbose" }, success: onQuerySuccess2, error: onQueryError });

    Now, in our success function, I simply return the results as a table by iterating through all of the rows and cells of the results.  The first loop prints out the column names and the second one writes out each row.

    function onQuerySuccess2(data) {

        var results = data.d.query.PrimaryQueryResult.RelevantResults.Table.Rows.results;





        $.each(results[0].Cells.results, function () {

            $("#results").append('<th>' + this.Key + '</th>');




        $.each(results, function () {


            $.each(this.Cells.results, function () {

                $("#results").append('<td>' + this.Value + '</td>');







    Here’s what my results look like in my SharePoint-hosted app.


    Comparing it to the original page in Delve for the boards, you will notice the results are the same.


    If you are interested in developing with Boards in Office Delve, I hope you have found this post helpful.  This information hasn’t really been documented so it’s highly subject to change.  Try it out and let me know what you come up with.

    Follow me on twitter: @coreyroth

  • A quick look at Boards in Office Delve

    Updated: January 9th, 2015

    You might have heard today that the new Boards (aka Pinterest) feature for Office Delve was released to First Release customers of Office 365.  I was lucky enough to have it show up already in a few of my tenants, so I thought I would share my initial experience. 

    When you open Delve now, you’ll notice a new icon that says Add to board


    Clicking on the icon will allow you to type the name of a new board or select an existing one. 


    Once you have tagged your document, it will show underneath the document for all users.  Items tagged to boards are visible to all users.  However, the results are still security trimmed like everything else.  That means if Sara pins something to Acquisitions, but Alex doesn’t have permission to it, Alex won’t see it.


    Clicking on the tag will take you a page with other items tagged.  When you first visit any board’s page, you will automatically be “following” it.  I suspect this makes the board show up in your list of boards in the navigation of Office Delve. 


    When you click the Send a link button, it will open your mail client with a link to the board’s page in Delve.


    If you look at the URL, you will notice a new query string parameter, b, with the board’s name.


    Items can also belong to multiple boards.


    After we have added some items to boards, here is what a typical page might look like.


    You can remove an item from a board by right-clicking on the tag and choosing Remove from boards.


    New features tend to roll out over time in First Release, so one feature that is notably missing is the list of boards I am following.  It should be above the People list.  I suspect this will show up soon, and I’ll update my post with details when it arrives.


    My understanding is that your list of boards updates every two hours or so.  After checking Delve later, the list of boards I am following now shows up.  If you unfollow a board, it will still show in this list until the cache clears.  If you create a new board, it won’t show up in this list until then either.


    The concept of removing and managing boards has been a hot topic on Yammer this week.  If you are interested in the topic be sure and follow this thread.

    Delve Boards are an interesting new way of tagging documents.  It lets users organize things in logical buckets that make sense to them.  Now you might be wondering if this ties into anything like Managed Metadata Enterprise Keywords and unfortunately the answer is no.  The new system is disconnected from that.  I think users will like it though.  As an administrator though, it might be a while before you can do any maintenance of the boards.  I don’t think you need to worry about that too much though yet.  The whole purpose of this is that the tagging is end user driven and easy for the users.

  • Is Sling TV a good choice for cord-cutters?

    Updated 2/4/2015: Read my full Sling TV product review on IT Unity.

    Dish Network announced at CES this week a new Internet-based TV service called Sling TV for $20 / month.  This new service, scheduled to launch in the first quarter of 2015, will allow those without a traditional cable / satellite TV package to get the following 12 cable TV channels:

    • ESPN
    • ESPN2
    • TNT
    • TBS
    • Food Network
    • HGTV
    • Travel Channel
    • Adult Swim
    • Cartoon Network
    • Disney Channel
    • ABC Family
    • CNN

    Most specifically in this list are ESPN and TNT.  As an avid NBA fan, watching primetime games can’t be done without a traditional cable package.  With NBA League Pass these games are blacked out during primetime.  This is a great option for college sports as well.  I’ll be curious to see if your Sling TV subscription includes rights with  As someone who watches sports, this offering looks appealing.

    Sling TV will be available on most of the popular streaming devices such as Amazon Fire TV, Google, Roku, and the Xbox One.  Most notably missing from this list if the Apple TV.

    Is this a step in the right direction though?

    Absolutely not.  This is more of the same from TV providers just a new medium.  It still doesn’t give us the a la carte pricing that we want.  It just gives us smaller and more manageable packages (not a bad thing for sure).  I’m still happy to see more options out there for those who don’t want a traditional TV package. 

    I also think the pricing is a little high for what a cord-cutter is willing to spend.  Part of what is driving that cost up is the including of ESPN which costs a provider more than $6 a user in fees.  Keep in mind, our bill is already starting to add back up with our multitude of services we have such as Netflix, Hulu Plus and CBS All Access.

    Even though it’s a small bundle, it still suffers from the same problem as the larger bundles.  I personally only need sports programming.  While some other people may only need kids programming.  Don’t make me get both.

    If you don’t watch sports, I would say there is no reason to ever pick this package up as a cord-cutter unless you just want programming from the Food Network or the Disney Channel.  Those with younger kids, I could certainly see the appeal though.  Until the content offering for sports improves online, I could see myself subscribing to this for a few months during the year.  The nice thing is there isn’t a contract to lock you in.

    The TV industry is having to shift this year thanks to the large number of streaming services coming to market.  Already we have seen CBS and HBO offering an online-only offering and I suspect a few more networks will have offering by the end of the year.  I think 2015 will be a good year for cord-cutters.

    Read more about Sling TV on their site.

    Follow me on twitter: @coreyroth

  • MVP Award Program Blog Cross Post: Cord-Cutting with the Xbox One


    Originally posted on the MVP Award Program Blog on December 8th, 2014.

    In the last year or so I have proudly referred to myself as a “cord-cutter”. I’ve dropped my cable / satellite subscription in favor of streaming services and an over-the-air antenna. When it comes to streaming, of course the XBOX ONE excels with services such as Xbox Video, Netflix, Hulu, Vudu, NBA TV and Amazon. How is that any different than any of the many streaming devices out there such as Roku, Amazon FireTV, Chromecast and more though? From a standpoint of streaming alone, there really isn’t much difference. One place that really sets Xbox One apart though is its TV functionality via HDMI pass-through and OneGuide. This allows you to watch TV while still using other Xbox One apps at the same time with Snap mode. A great feature when you want to play a game but still keep an eye on the score of the game. I wanted to make use of with over-the-air TV, but I found that there wasn’t a lot of information out there on it to date.


    Setting up over-the-air TV

    When first looking at this feature, it is 100% clear that this feature is designed for those with a cable or satellite box. That’s not me. When setting up Xbox One, it allows you to set up the device relatively easily to control your cable or satellite box. To do this though you will either need an Xbox with a Kinect sensor or an inexpensive IR transmitter cable. Personally I went with the IR transmitter cable because using a Kinect in my media room would be quite difficult because I keep all of my electronics in a closet. Shop around for these cables because they tend to range in price quite a bit.

    Using this IR transmitter, you simply run a cable from your XBOX to the location of the IR receiver port on your various electronics. They make transmitters with multiple emitters so you can control your TV, tuners, and even your receiver all from one able.

    Now you might be wondering, how to use the Xbox One with an over-the-air antenna since you aren’t using a cable box? The answer is actually to acquire a simple over-the-air antenna tuner box. These run in price between $30 and $50 USD and can usually be found at your local electronics retailer or Amazon. I personally went with the HomeWorx HW-150PVR and recommend it because it actually works with the Xbox One. The box has an HDMI out which you can plug into the A/V HDMI input port of your Xbox One.

    My first over-the-air tuner box was not supported. The Xbox One supports many brands, but be warned that some of the tuners are from brands you have never heard of. The Xbox One simply doesn’t support them all. I’ve looked for a supported list on the Internet but I haven’t seen one to date.

    When you find a tuner you like, you will plug in an over-the-air antenna into the RF IN port. I have a few indoor antennas, but I’ve had pretty good success with this RCA Amplified TV Antenna. Where you live and various other factors will affect the number of channels you receive. I happen to live within line of sight of a number of broadcast TV towers so I can receive more than 60 channels. Most you likely won’t care about. The important thing for me was to get the major networks so I could watch live events like football and basketball.

    When you first launch OneGuide, it will walk you through setting up the device with your electronics. Part of the process is to find you TV, tuner, and audio receiver and test whether or not the Xbox One can control them. If your Kinect can broadcast the IR signals to your devices or if you have positioned your IR transmitter in the right place on your devices, it should be able to successfully power them off, change the volume, and change the channel. If it doesn’t work, you likely don’t have the transmitter or Kinect positioned right.

    Watching over-the-air TV

    Once everything is configured, you can tell Xbox One that you are using over-the-air TV. It does a pretty good job of pulling down all of the channels in your area. However, you may find that things are missing or it shows you channels you can’t receive. The listing probably won’t match up perfectly but it will probably cover the core network channels which are probably the ones you are looking for anyways. When you select a channel through the OneGuide, it will send the remote control commands to choose that channel. I find it to be a bit slow mainly because of how fast the tuner responds. It’s slightly annoying but no fault of the Xbox One. You can flip quickly through channels using the up and down buttons on the remote. If you don’t have a remote yet, don’t worry. You can use your Xbox One Controller. Just press the X button to launch OneGuide and press the A button to select a channel.


    Many of the over-the-air tuners also support plugging in USB flash drives and hard drives. These can be used to add DVR-like functionality allowing you to record shows and pause live TV. If you select a show in OneGuide, it will even set up a recording for you but your mileage may vary. If you expect the experience to be as streamlined as what you get with a cable or satellite DVR, you may be disappointed. The recordings have cryptic filenames on the DVR and pausing live TV actually takes 10 – 15 seconds for it to pause it. There’s no way to get to the DVR functionality using the Xbox One controller or remote either. It’s better than nothing though.

    For those of you in Europe, you may have already heard about the Xbox One Digital TV Tuner. This simple USB device takes the signal from an over-the-air antenna and allows you to use the storage on your Xbox One as a DVR. I’d love to see this make its way to the United States.

    I’ve cut the cord and I haven’t looked back for a second. It used to be hard being a cord cutter, but it’s getting easier every year. Just recently, CBS announced an online service to watch live TV. They don’t have an Xbox One app yet, but I hope we see it soon along with other broadcasters. Occasionally, I wish I had a way to watch ESPN, but I have been able to get by without so far. As a recap, if you are a cord cutter and are considering the Xbox One, remember:

    · You need a Kinect or an IR transmitter cable

    · You need a supported over-the-air HD tuner with HDMI output

    · You need an over-the-air antenna

    · Apps aren’t available for some streaming services yet

    If you are thinking about cutting the cord and using your Xbox One, I hope this guide was useful. Be sure and refer to Set up live TV with your Xbox One for more details on getting started.

    Although, Corey Roth has mentioned products in this article, they are not an endorsement by him or Microsoft. They are simply products he has experience with and they have worked for him. Your experience may vary.

    Posted Dec 30 2014, 02:55 PM by CoreyRoth with no comments
    Filed under:
  • Adding a domain registered through GoDaddy to Office 365

    In working on one of my upcoming articles, I captured the steps to activate a domain registered through to your Office 365 subscription.  This will serve as a reference to that article when it comes out.  Since Microsoft and GoDaddy have a partnership, adding a domain is incredibly simple.  A wizard walks you through the process of confirming that you own the domain name.  It will even update DNS records for you automatically.

    Start by going to your Office 365 admin center and click on the DOMAINS link.  Click the Add domain link to get started.


    When you click Add domain, it takes you to a screen that explains the steps to you.  Click Start step 1 to get started.


    Next, we need to enter the name of our domain. 


    Office 365 will detect that your domain has been registered through GoDaddy.  When you click Confim ownership, it will then prompt you to sign in with your GoDaddy account.  Enter your credentials to continue.


    As an alternative you can always perform the steps manually but it may take several days to complete as you wait for DNS entries to propagate.

    Next, you will need to grant Office 365 permission to modify your domain.  Click the Accept button.


    Finally Office 365 will confirm that you own the domain name.


    When you finish, Office 365 will prompt you about how you want to add users from this domain.  For today’s article, we’ll just skip this step.


    This will then mark off Step 2 as complete.  Click Start step 3 to specify its purpose and configure DNS entries.


    On this screen, you’ll choose whether you want to use this domain with Exchange and Lync.  Select the appropriate checkboxes and click Next.


    Normally this would mean creating DNS entries manually for things like your MX record, but Office 365 will configure all of your DNS entries at GoDaddy for you.  Click Set up records to proceed.


    When it completes, you will get a confirmation screen with the records it configured for you.


    At this point you are done.  You may need to wait for some DNS entries to propagate but you can soon use all that Office 365 has to provide with your newly added domain.

  • A quick way to get to list settings in SharePoint-hosted apps

    If you are a developer working with the SharePoint app model and have deployed a list, you might have noticed that the list settings button is missing from the ribbon.


    Now, you typically probably don’t want to adjust list settings inside an app through the UI.  However, it’s not uncommon that you want to look at your list settings in the development process to confirm you did everything right.  For example, maybe you want to check the permissions on the list. 

    If you know the List Id, you can always just go directly to ListEdit.aspx, but I find that’s a lot of work.  Instead, I found the easiest way is go to active the LIST ribbon and then click Modify View.


    That will take you to a page where you can edit a view.  However, it also gives you a breadcrumb back to Settings.


    You’ll now be on your list settings page.


    This is a great way to manually set permissions on your list when needed.  You can also adjust a number of other settings.  Just be warned that some settings don’t work such as Information Management Policy Settings.  You will get a 500 error when you do that.

    This is a simple tip but maybe some of you developers out there will find it useful.

  • Windows 10 Technical Preview on the Surface Pro 3: two months later

    I’ve been running Windows 10 Technical Preview since it came out on October 1st.  We’re now on our third build (Build 9879) so I thought I would share my experience so far on my Surface Pro 3.  With Windows 10, they have given us access to builds earlier than we used to get in the past.  As a result, you are going to get to deal with different challenges with each build.  That’s just what you get when installing on an early release.  We expect that though.

    Dealing with issues (bugs)

    When you decide to run any beta operating system, you need to decide if the potential issues are too much of an annoyance for you to get work done.  I am running this on my primary device (my Surface Pro 3).  Sometimes the issues can be a pain, but nothing has been a showstopper yet.

    In the first build, we had to deal with issues such as mouse wheel scrolling not working on external monitors.  That’s been fixed.  Now the most common issue is explorer.exe crashes.  When this happens, applications in the task bar may not show an icon properly.  Be warned, it will also cause the clock to get “stuck in time”.  I found myself being late once or twice because of that.  KB3020114 is supposed to fix this issue though.  If you haven’t installed it yet, you can also mitigate this issue some by reverting back to the Start screen instead of the Start menu.  You can do this by right-clicking on the taskbar and choosing Properties.  Then click on the Start Menu tab and uncheck Use the Start menu instead of the Start screen.


    If you use any Windows Store (metro) apps, you will notice a few issues as well.  In build 9879, any time an app gets minimized (or you lock your device), it will stop running.  This causes streaming apps such as Xbox Music or iHeartRADIO to stop streaming. 

    Another issue with Windows Store apps is that they will all crash at once.  You’ll find that all of them simply have stopped running.  There is a process named Application Frame Host which powers all of your Windows Store apps to run in windowed mode.  When this process dies, so does your Windows Store apps.  When this happens you simply restart the application.

    Windows 10 Features to adjust to

    Windows 10 adds the ability to runs Windows Store apps in windowed mode.  This sounds great in theory, but I find myself constantly adjusting the windows sizes as they are never right.  This especially applies when you drag them onto secondary monitors.  When you drag them over, display scaling messes it up when you try to snap them in one continuous action from the primary monitor to the secondary.  This means you’ll have to snap the application again.  I then often find myself resizing the application two or three more times to get it to snap just right. 

    I am not a fan of the new Start menu at all.  The titles have no sense of arrangement and they are just all jumbled together.  This leads me to go back to the original Windows 8.1 style Start screen.  I know I am probably one of the few people on the planet though that prefer it though.

    Selecting a WiFi network has a new touch friendly menu.  This allows you to connect but getting to advanced network settings from here is tough.


    OneDrive (consumer) has also changed as I mentioned in my last article.  It changes the way synchronization happens.  For the most part I think it probably works better now but occasionally I still have issues.

    Surface Pro 3 specific issues

    The Surface Pen works in Windows 10 just fine.  However, the ability to wake the device up while it is sleeping by pressing the button currently does not.  I didn’t find myself using that feature very often though as cool as it is.

    I have had a lot of issues with the device waking up and running instead of going into connected standby mode with Build 9879.  I have pulled my Surface out of my bag to find it running hot more than once.  I honestly don’t think connected standby works at all right now so I have started shutting the device down when I want to make sure it doesn’t come on.

    Battery life is also considerably less with Windows 10.  I’ve found that this happens every time I run a beta operating system though. 

    Should you install it?

    Unless you are just dying to see the new features, I would probably not install Build 9879 on your Surface Pro 3.  None of the issues are absolute deal breakers, but they can be annoying at times.  However, they aren’t so bad that I am considering going back to Windows 8.1.  I am just going to hold out until the next build.  Microsoft has announced a Windows 10 event on January 21st, so I would guess we’ll see something around then.

    If you do decide to proceed with the install you can get it by joining the Windows Insider Program.  Be sure to read the Before you Install link and have backed up your data or have it in the cloud somewhere.

    - @coreyroth on twitter

  • Querying Office 365 Groups with Search

    I have been working with the new Office 365 Groups feature a little bit and I wanted to see how I could surface them from a regular SharePoint Online site.  In my example today, I have created two public groups and three private groups.


    My first thought was to use Search.  Ultimately, I knew the file storage behind groups was powered by a site collection.  I just need to figure out which WebTemplate was being used.  You can see the name of the site collection fairly easily by looking at one of the documents in search.  It’s simply stored at /sites/<GroupID>.  You can see your Group ID when creating the group initially.


    Using the REST API, we can then just assemble the URL with /_api/web onto the existing URL such as  Looking through these results I found out that the WebTemplate for the site is simply named GROUP.  Now that we have this, we can query search using the WebTemplate managed property.  The query we want is simply:


    You can type this directly into the keyword textbox in your Search Center.


    Now wait a minute.  I am in five groups but it’s only showing me two.  After doing some research and some additional queries, I discovered that no matter what I did, search could never find private groups or the documents within them.  I am not sure if this is a bug or it is intentional, but as of right now you can only see public Groups with search.  Still this might be valuable to you, so you could always use this query inside the Content Search web part.


    I am hoping that we can query private groups as well in the future, but it’s still nice to be able to query your groups if you use a lot of public ones.

More Posts Next page »
2012 dotnetmafia.
Powered by Community Server (Non-Commercial Edition), by Telligent Systems