How to revive your IT investments with Teams
Published Jul 22 2019 09:23 AM 30.7K Views

Customer: The Marketing Store, a subsidiary of HAVI
Business challenge: Time-consuming & manual (read: prone to errors) hiring and on-boarding process
Integrations used: Microsoft PowerApps, Flow, HAVI line-of-business solutions


Hear it from HAVI:



HAVI is a global logistics organization focused on innovating, optimizing, and managing the supply chains of some of the world’s largest brands. HAVI’s UK subsidiary and marketing agency, The Marketing Store (TMS), needed a better way to onboard new employees across the world. So, HAVI and TMS turned to Microsoft PowerApps and Teams to make it happen.

The cost of human error

The HR department at HAVI has their (paper)work cut out for them. With nearly 10,000 employees worldwide, many of whom are freelancers, HAVI has dozens of contracts starting and ending on any given day. To register new hires in their database, HAVI largely relied on email and manual entry, which was tedious and prone to human error. Small mistakes like a misspelled name could create big delays in onboarding, sometimes taking weeks to remediate.

“Onboarding was an extremely slow, tedious task. Just the registration process alone could take hours. We needed a better way.”
Thomas Pagnoux, Head of End User Services


From weeks to minutes

To speed up onboarding while improving accuracy for TMS, HAVI used PowerApps to build an app that automates the entire registration process. They loaded the app into Microsoft Teams, where it allows new hires to complete paperwork online and automatically upload it to HAVI’s backend HR system. The app then automatically assigns action items to the other departments involved with onboarding—like Payroll and IT—all coordinated through Teams. Not only has this slashed HAVI’s document processing times it helps ensure that every new employee has what they need on their first day of work, from access badges to software licenses to compensation.


“It used to take 4-5 hours to get new employees in our system. And if there was a mistake, that could jump to 1-2 weeks. Now it takes us under 40 minutes.”
Thomas Pagnoux, Head of End User Services


The road ahead

Thrilled with how PowerApps allows them to maximize their investment in Office 365, HAVI plans to cut the cost of using external solutions to update employee information by building a custom-made profile manager that will save HAVI hundreds of thousands of dollars per year.

Other customer superpower stories:
Microsoft Teams superpowers series (pt. 1)
Microsoft Teams superpowers series (pt. 2)

Super Contributor

Stop renaming post title every few hours. It makes it pop again in rss feed.

Senior Member

Is there a more tangible example of this in action? It all sounds great, but this video or post don't actually get into the how. I think most people keeping up with this blog know that Teams and PowerApps exist and can work together, but it would be helpful to see an actual workflow of how the customer set this up. Is that something that is available somewhere?


@elilongwell absolutely, we are working on that process flow as we speak, as well as others. 

Senior Member

@Jace Moreno Thanks! That's great to hear.

Occasional Contributor

+1. We all have similar use cases but implementation is the issue. Would appreciate an elaborate video or post on the 'how'. 

Senior Member

Since one of the biggest draw backs to PowerApps is the fact that external users cannot access them, I'd be very curious to see how they handle this process with their new hires.  We were looking to do something very similar, but our new hires wouldn't get their AD accounts, thus access to O365 and PowerApps until the day they start.  All the paperwork they fill out must be done before that day.  If HAVI operates similarly, wondering what exactly those new hires are interfacing with.


@Tokin Blackford  - access to PowerApps externally can be done through PowerApp Portals just released.

New Contributor

@Jace Moreno do you have some more concrete examples of onboarding process flows that you can share?  That would be extremely helpful.  Thanks!


@Tate_Forgey @Steve Goodman @Tokin Blackford apologies on the delay. Below are some more details around how this runbook would work:

1.Human Resources enter details of the new employee using the on-boarding form (PowerApp)

2.On submission the specified Manager receives an approval request with the submitted details (Flow Approval)

3.The Manager adds any notes, such as additional equipment required, desk location, etc. and approves the request 

4.Once approved the Flow (Flow + Azure AD)

a)Flow submits the details to Azure Automation runbooks that orchestrate on-premise hybrid worker servers to create Active Directory accounts

b)Synchronizes those accounts to Azure AAD

c)Create mailboxes

d)License the account as required including unified communications licenses and automatic assignment of Teams telephone numbers

e)The new account is configured with extended attributes based on service line, location, employee type, etc.

f)Dynamic AAD security groups add relevant accounts as members based on the extended attribute values automatically adding new employees to the correct distribution lists, Teams and Enterprise Applications configured in Azure.

g)The account is also enabled for Azure Multi Factor Authentication and Self-Service Password Reset - autopilot 

5.The runbook returns a success result back to the Flow which then adds the account to any statically assigned AAD / O365 groups. 

6.Notifications are sent by email to relevant parties and Microsoft Planner tasks are automatically assigned to Plans hosted in departmental Teams channels enabling a coordinated experience for the staff managing the employee on-boarding from reception to desk 

7.Planner tasks are assigned to IT staff to supply requested equipment for the new employee including Intune managed devices that use Windows Autopilot for zero touch configuration of the device further enhancing the new employees on-boarding experience 

Senior Member

d)License the account as required including unified communications licenses and automatic assignment of Teams telephone numbers

@Jace Moreno I've been looking for a lead on how to do this all over the place, but I just can't find anything. Can you confirm that automatically assigning a teams number is possible through a flow (or another method)? If so... could you explain how to do that?

Regular Visitor

@elilongwell, yes this is possible from PowerShell and hence can be automated and potentially be triggered by Power Automate or from another runbook as a child runbook.

There are a few requirements though. Unfortunately it appears that the Teams PowerShell module for this doesn't exist for Azure Automation, yet. So you need to install this module on a on-prem server (Hybrid worker potentially).

In addition to that you need free licenses and phone numbers in your tenant.

With this you would then have to assign the license to the user in question, wait some time for the license to apply and provision the user as voice user and then finally find a free phone number from the users side and assign it to the user.


From PowerShell this would look similar to this:


#Assign the license
$Cred = Get-AutomationPSCredential -Name ‘YOURADMINACCOUNT’
Import-Module MSOnline
Connect-MsolService -Credential $Cred

$License = “YOUR LICENSE IDs”

Set-MsoluserLicense -UserPrincipalName $UPN -AddLicenses $License
"License assigned: $License"

#Waiting for Voice account provisioning
Start-sleep -Seconds 3600

#Assign the phone number
#Import required module
Import-Module SkypeOnlineConnector -Global
#"Module imported. Creating new PSSession now"
$sfboSession = New-CsOnlineSession -Credential $Cred
#"PSSession created. Importing it now"
Import-Module (Import-PSSession $sfboSession -AllowClobber) -Global
#"PSSession imported"

#Find free phone number
$PhoneNumber = get-CSOnlineTelephoneNumber -CityCode $SiteCode -IsNotAssigned | Select ID | Select-Object -First 1
"Phone number $PhoneNumber selected"
#Assign phone number to user
Set-CSOnlineVoiceUser -Identity $UPN -TelephoneNumber $PhoneNumber
"Phone number $PhoneNumber assigned to user $UPN"

You can find the citycodes for your cloud PBX locations from PowerShell as well.

You can then either hand over the UPN and city code to the Runbook manually or further automate that as required.

Version history
Last update:
‎Jul 23 2019 02:42 PM
Updated by: