Skip to content
/

This will be my second post about Bing for business: “the new intelligent search experience for Office 365 and Microsoft 365, which uses AI and the Microsoft Graph to deliver more relevant search results based on your organizational context”.
In this post, we will be focusing on “People Search”.

This will be my second post about Bing for business, the new intelligent search experience for Office 365 and Microsoft 365, which uses AI and the Microsoft Graph to deliver more relevant search results based on your organizational context.

We covered branding in the first post. In this post, we will be focusing on People Search.

Welcome bar

When a user is logged in, Bing will show a welcome bar with some suggestions for queries.

Let’s use the first query: me.

Searching for me

When searching for me, besides all normal Bing search results, you will get your own profile.

As we can see, the person result page is structured in 3 columns.

Left column, profile

In the left column, the Azure AD profile information is shown.

  • My picture
  • My full name
  • My function title
  • My phone number
  • My e-mail address
  • My Skype for business alias

Center column, organization

In the center column, the organizational position is shown.

  • My manager
  • My peers (sharing the same manager)
    When hovering over a profile image, the name and function are shown
  • My department

Right column, events

In the right column, data from the agenda is shown.

  • My timeline for today
  • My first 2 upcoming events, with the title, time and location

In total, this gives a good overview of my contact details, position in the organization and my schedule.

Searching for sander

Chances are that you won’t be searching for your own profile very often.
So, let’s start looking for the profile of a colleague. For this I entered sander as search query in Bing.

Although there are multiple colleagues working at Winvision with a first name of Sander, the person that is displayed is the one closest in the organizational structure to me.

The contact details are now an ideal way to start a call or chat with your colleague. Or you can send an e-mail, if you prefer that as form of communication.

The agenda now doesn’t show the first 2 events of the person you are looking at, but the first 2 events where you’re both part of! This is where the use of the Graph API really starts to shine.

The other sander’s

As mentioned before, there are multiple colleagues with the first name of Sander. This is also indicated at the bottom of the profile, where the first alternative is displayed.

We can now directly navigate to Sander Hoek's profile if we want, or we can open a list of all people matching the query:

This concludes this post about the people search in Bing for business. The things shown in this post might change in the future, as the product is still under development.

If you are interested in receiving an invitation to participate in the private preview, visit http://aka.ms/b4bprivatepreview.

Filed under Office
Last update:
/

At the Ignite conference keynote Microsoft announced Bing for business. Winvision is one of the partners participating in the current preview.
With the public announcement of Bing for business, I’m now allowed to show you what the service is offering our company.
In the coming days I will be posting about several parts of Bing for business, starting with “branding”.

At the Ignite conference keynote Microsoft announced Bing for business:

A new intelligent search experience for Office 365 and Microsoft 365, which uses AI and the Microsoft Graph to deliver more relevant search results based on your organizational context.

As you might have heard at the end of the demo by Li-Chen Miller, Winvision was mentioned as one of the partners participating in the current preview.

With the public announcement of Bing for business, I’m now allowed to show you what the service is currently offering.
In the coming days I will be posting about several parts of Bing for business, starting today with branding.

Branding

You want the Bing for business search result to feel familiar for everybody in the company. Therefore, you can configure some settings that change the look and feel. Most notable the name and logo of the company and a recognizable color, just like you can in Office 365.

For our company, this it’s something like the following configuration:

This will make the search results in Bing look like this:
The content is stripped to not distract from the branding.

The Bing for business section is recognizable by the gray background bar.

From the settings, we recognize:

  1. The company name
  2. The company color
  3. The logo
  4. The favicon

Even when a Bing for business search result is shown in the sidebar, the company logo and color immediately pop out and make it recognizable as a business result:

If you are interested in receiving an invitation to participate in the private preview, visit http://aka.ms/b4bprivatepreview.

Filed under Office
Last update:
/

The other day I wanted to configure Application Logging on Blob Storage for a Web App Service and found out this needs a SAS URL. And this is something an ARM template can’t provide for you.
In this post, I will walk you through the necessary PowerShell code to run.

These days it’s normal to deploy and configure all aspects of your Azure Resources using the Azure Resource Manager and the accompanying ARM Templates. But sometimes you walk into a missing feature that’s is not (yet) available in the ARM system.
The other day I wanted to configure Application Logging on Blob Storage for a Web App Service and found out this needs a SAS URL. And this is something an ARM template can’t provide for you.

In this post, I will walk you through the necessary PowerShell code to run. For example, after your ARM template has been deployed. At the end of the post you will find the link to the source code.

The ARM template

In the ARM template, we deploy a Storage Account and a Web App Service.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources": [
        {
            "type": "Microsoft.Storage/storageAccounts",
            "kind": "Storage",
            "name": "loremipsumstore",
            "apiVersion": "2016-01-01",
            "sku": {
                "name": "Standard_LRS"
            },
            "location": "[resourceGroup().location]"
        },
        {
            "type": "Microsoft.Web/serverfarms",
            "kind": "app",
            "name": "LoremIpsumAppService",
            "sku": {
                "name": "B1"
            },
            "apiVersion": "2015-08-01",
            "location": "[resourceGroup().location]",
            "properties": {
            "name": "LoremIpsumAppService",
                "numberOfWorkers": 1
            },
            "resources": [
                {
                    "type": "Microsoft.Web/sites",
                    "kind": "app",
                    "name": "LoremIpsumWebApp",
                    "apiVersion": "2015-08-01",
                    "location": "[resourceGroup().location]",
                    "properties": {
                        "name": "LoremIpsumWebApp"
                    },
                    "dependsOn": [
                        "[resourceId('Microsoft.Web/serverfarms', 'LoremIpsumAppService')]"
                    ]
                }
            ]
        }
    ]
}

The problem

When we configure the Application Logging to Blob Storage using the Azure Portal we see the following properties in the JSON of the Web App Service using the Azure Resource Explorer.

"applicationLogs": {
  "azureBlobStorage": {
    "level": "Verbose",
    "sasUrl": "https://loremipsumstore.blob.core.windows.net/webapp-logs?sv=2015-04-05&sr=c&sig=XXX...XXX&st=2017-05-29T22:00:00Z&se=2217-05-29T22:00:00Z&sp=rwdl",
    "retentionInDays": 30
  }
}

But secretly, the last two properties are stored in the AppSettings. When we look there we see the following 2 keys:

DIAGNOSTICS_AZUREBLOBCONTAINERSASURL    https://loremipsumstore.blob.core.windows.net/webapp-logs?sv=2015-04-05&sr=c&sig=XXX...XXX&st=2017-05-29T22:00:00Z&se=2217-05-29T22:00:00Z&sp=rwdl
DIAGNOSTICS_AZUREBLOBRETENTIONINDAYS    30

Setting AppSettings with an ARM template isn’t that hard. But the URL we need to set can’t be predefined and ARM templates don’t have support for the generation of a SAS URL.

Many ARM template samples do use SAS URLs, but always as a parameter. But how can you supply a parameter to a resource that might not yet exist? That’s the whole point of using the template.

So, the only option is to configure the Web App Service after running the deployment.

The solution

For this solution, we use PowerShell. This makes it easy for running this code in a VSTS or TFS release pipeline. But it can be used in any way you want to configure your environments.

Depending on how you run this script you might need to login first using Login-AzureRmAccount and select the Azure Subscription you want to use using Select-AzureRmSubscription.

The configuration is done in 6 steps.

  1. We get the Storage Account where we want to store the Application Logs.
    $sa = Get-AzureRmStorageAccount -ResourceGroupName "loremipsumresourcegroup"
                                    -Name "loremipsumstore"

  2. We make sure there is a container to store the logs. Because we can run the script multiple times, we ignore the error if the container already exists.
    New-AzureStorageContainer -Context $sa.Context
                              -Name "webapp-logs"
                              -ErrorAction Ignore

  3. Next, we generate the SAS token for the container. We use the same settings Microsoft uses when creating the link using the Azure Portal.
    $sasToken = New-AzureStorageContainerSASToken -Context $sa.Context
                                                  -Name "webapp-logs"
                                                  -FullUri
                                                  -Permission rwdl
                                                  -StartTime (Get-Date).Date
                                                  -ExpiryTime (Get-Date).Date.AddYears(200)

  4. We want to update the AppSettings as the configuration is stored there. But when you update the AppSettings, any setting not present in the update will be removed. Therefore, we first want to get all the existing AppSettings.
    $webApp = Get-AzureRmWebApp -ResourceGroupName "loremipsumresourcegroup"
                                -Name "LoremIpsumWebApp"

  5. Strangely the Set-AzureRmWebApp command does not accept the SiteConfig.AppSettings we got from the Get-AzureRmWebApp command. We need to create a Hash Table for this.
    To make sure the Application Settings keep the same order, we define the Hash Table as Ordered.

    $appSettings = [ordered]@{}
    $webapp.SiteConfig.AppSettings | % { $appSettings[$_.Name] = $_.Value }
    $appSettings.DIAGNOSTICS_AZUREBLOBCONTAINERSASURL = [string]$sasToken
  6. Now we can update the App Service using the Set-AzureRmWebApp command.
    Set-AzureRmWebApp -ResourceGroupName "loremipsumresourcegroup"
                      -Name "LoremIpsumWebApp"
                      -AppSettings $appSettings

Source code

The complete source code is available as GitHub Gist: Configure­AppService­ApplicationLog­To­BlobStorage.ps1 for reference.