Łączenie funkcji Shift z rozwiązaniem Blue Yonder Workforce Management przy użyciu programu PowerShell
Omówienie
Użyj łącznika Microsoft Teams Shifts for Blue Yonder , aby zintegrować aplikację Shifts w usłudze Microsoft Teams z rozwiązaniem Blue Yonder Workforce Management (Blue Yonder WFM). Twoi pracownicy pierwszej linii mogą bezproblemowo wyświetlać swoje harmonogramy i zarządzać nimi w programie Blue Yonder WFM z poziomu usługi Shifts.
W tym artykule opisano sposób używania programu PowerShell do konfigurowania i konfigurowania łącznika w celu integracji rozwiązania Shifts z programem Blue Yonder WFM.
Aby skonfigurować połączenie, uruchom skrypt programu PowerShell. Skrypt konfiguruje łącznik, stosuje ustawienia synchronizacji, tworzy połączenie i mapuje wystąpienia programu Blue Yonder WFM do zespołów. Ustawienia synchronizacji określają funkcje włączone w usłudze Shifts oraz informacje o harmonogramie synchronizowane między programami Blue Yonder WFM i Shifts. Mapowania definiują relację synchronizacji między wystąpieniami programu Blue Yonder WFM i zespołami w usłudze Teams. Możesz mapować istniejące zespoły i nowe zespoły.
Udostępniamy dwa skrypty. Możesz użyć dowolnego skryptu, w zależności od tego, czy chcesz mapować istniejące zespoły, czy tworzyć nowe zespoły do mapowania.
Możesz skonfigurować wiele połączeń, z których każde ma różne ustawienia synchronizacji. Jeśli na przykład organizacja ma wiele lokalizacji z różnymi wymaganiami dotyczącymi harmonogramu, utwórz połączenie z unikatowymi ustawieniami synchronizacji dla każdej lokalizacji. Należy pamiętać, że wystąpienie programu Blue Yonder WFM można zamapować tylko do jednego zespołu w danym momencie. Jeśli wystąpienie zostało już zamapowane do zespołu, nie można go zamapować na inny zespół.
Dzięki rozwiązaniu Blue Yonder WFM jako systemowi rekordów pracownicy pierwszej linii mogą efektywnie zarządzać swoimi harmonogramami i dostępnością w rozwiązaniach Shift na swoich urządzeniach. Menedżerowie linii frontu mogą nadal używać programu Blue Yonder WFM do konfigurowania harmonogramów.
Uwaga
Możesz również użyć kreatora łącznika Shifts w centrum administracyjnym platformy Microsoft 365, aby połączyć się z usługą Shifts do programu Blue Yonder WFM.
Przed rozpoczęciem
Wymagania wstępne
Przed rozpoczęciem upewnij się, że spełniasz wszystkie następujące wymagania wstępne:
Masz program Blue Yonder WFM w wersji 2020.3, 2021.1 lub 2021.2.
Uwaga
Jeśli masz program Blue Yonder WFM 2020.3 lub 2021.1, zastosuj poprawkę 2020.3.0.4 lub 2021.1.0.3. Ta poprawka rozwiązuje problem polegający na tym, że użytkownicy otrzymują trwały komunikat o błędzie w usłudze Shifts. Rozwiązano również problem uniemożliwiający użytkownikom aktualizowanie ich dostępności w usłudze Shifts.
Znasz nazwę konta usługi Blue Yonder WFM, hasło i adresy URL usługi:
- Adres URL uwierzytelniania federacyjnego
- Adres URL uwierzytelniania plików cookie
- Adres URL samoobsługowego pracownika
- Adres URL internetowego interfejsu API handlu detalicznego
- Adres URL interfejsu API menedżera lokacji
- Adres URL interfejsu API administracji
Jeśli nie masz wszystkich tych informacji, skontaktuj się z pomocą techniczną firmy Blue Yonder. Konto Blue Yonder jest tworzone na głównym poziomie przedsiębiorstwa przez administratora przedsiębiorstwa Blue Yonder. Musi mieć dostęp do interfejsu API, administratora klienta, menedżera sklepu i procesu roboczego. Konto i hasło są wymagane do utworzenia połączenia.
Federacyjne uwierzytelnianie logowania jednokrotnego jest włączone w środowisku blue Yonder WFM. Skontaktuj się z pomocą techniczną aplikacji Blue Yonder, aby upewnić się, że włączono federacyjne logowanie jednokrotne. Będą oni potrzebować następujących informacji:
- federacyjneSSOValidationService:
https://wfmconnector.teams.microsoft.com/api/v1/fedauth/{tenantId}/6A51B888-FF44-4FEA-82E1-839401E9CD74/authorize
gdzie{tenantId}
jest identyfikator dzierżawy - proxyHeader: X-MS-AuthToken
- federacyjneSSOValidationService:
Masz co najmniej jeden zespół skonfigurowany w usłudze Teams.
Dodano konto ogólne, które nazywamy kontem systemowym platformy Microsoft 365, jako właściciela zespołu do wszystkich zespołów, które chcesz zamapować.
Utwórz to konto w centrum administracyjnym platformy Microsoft 365 i przypisz mu licencję platformy Microsoft 365. Następnie dodaj konto jako właściciela zespołu do wszystkich zespołów, które chcesz zamapować. Łącznik Shifts używa tego konta podczas synchronizowania zmian zmian z programu Blue Yonder WFM. Zalecamy utworzenie konta specjalnie do tego celu i nie używanie osobistego konta użytkownika.
Rola administratora do zarządzania łącznikiem przy użyciu programu PowerShell
Aby wykonać kroki opisane w tym artykule, musisz być administratorem globalnym platformy Microsoft 365 lub administratorem łącznika shifts.
Rola administratora łącznika Shifts to rola niestandardowa, którą tworzysz w identyfikatorze Microsoft Entra i przypisujesz do użytkownika. Nazwa roli musi być "Shifts connector admin". Rola nie musi mieć żadnych określonych uprawnień, chociaż podczas jej tworzenia należy ustawić co najmniej jedno uprawnienie. Usługa opiera się na obecności roli na użytkowniku, a nie na jego uprawnieniach.
Aby dowiedzieć się więcej, zobacz Create and assign a custom role in Microsoft Entra ID (Tworzenie i przypisywanie roli niestandardowej w identyfikatorze Microsoft Entra ) oraz Assign Microsoft Entra roles to users (Przypisywanie ról microsoft entra do użytkowników). Pamiętaj, że utworzenie i zastosowanie roli do użytkownika może potrwać do 24 godzin.
Ważna
Firma Microsoft rekomenduje używanie ról z najmniejszą liczbą uprawnień. Pomaga to zwiększyć bezpieczeństwo organizacji. Administrator globalny to rola o wysokim poziomie uprawnień, która powinna być ograniczona do scenariuszy awaryjnych, gdy nie można użyć roli o mniej uprzywilejowanych uprawnieniach.
Konfigurowanie środowiska
Zainstaluj program PowerShell w wersji 7 lub nowszej. Aby uzyskać szczegółowe wskazówki, zobacz Instalowanie programu PowerShell w systemie Windows.
Uruchom program PowerShell w trybie administratora.
Zainstaluj moduł Programu PowerShell programu Microsoft Graph.
Install-Module Microsoft.Graph Import-Module Microsoft.Graph
Sprawdź, czy jest to wersja 1.6.1 lub nowsza.
Get-InstalledModule Microsoft.Graph
Zainstaluj moduł Programu PowerShell w wersji zapoznawczej aplikacji Teams.
Install-Module -Name MicrosoftTeams -AllowPrerelease -Force Import-Module MicrosoftTeams
Sprawdź, czy jest to co najmniej wersja 4.7.0 i czy zawiera polecenia cmdlet łącznika Shifts.
Get-Command -Module MicrosoftTeams -Name *teamsshiftsconnection*
Ustaw program PowerShell, aby zakończyć działanie, jeśli wystąpi błąd podczas uruchamiania skryptu.
$ErrorActionPreference = "Stop"
Włącz uruchamianie skryptów w systemie Windows.
Set-ExecutionPolicy bypass
Łączenie z usługą Teams
Uruchom następujące polecenie, aby nawiązać połączenie z usługą Teams.
Connect-MicrosoftTeams
Po wyświetleniu monitu zaloguj się przy użyciu poświadczeń administratora. Teraz skonfigurowano uruchamianie skryptów w tym artykule i poleceń cmdlet łącznika Shifts.
Identyfikowanie zespołów, które chcesz zamapować
Uwaga
Wykonaj ten krok, jeśli mapujesz wystąpienia programu Blue Yonder WFM na istniejące zespoły. Jeśli tworzysz nowe zespoły do mapowania, możesz pominąć ten krok.
W witrynie Azure Portal przejdź do strony Wszystkie grupy , aby uzyskać listę identyfikatorów TeamId zespołów w organizacji.
Zanotuj identyfikatory teamid zespołów, które chcesz mapować. Skrypt wyświetli monit o wprowadzenie tych informacji.
Uwaga
Jeśli co najmniej jeden zespół ma istniejący harmonogram, skrypt usunie harmonogramy z tych zespołów. W przeciwnym razie zobaczysz zduplikowane zmiany.
Uruchamianie skryptu
Uruchom jeden z następujących skryptów, w zależności od tego, czy tworzysz nowy zespół, czy mapujesz go na istniejący zespół:
- Aby skonfigurować połączenie, utwórz nowy zespół w usłudze Teams i zamapuj wystąpienie programu Blue Yonder WFM na nowy zespół, uruchom nowy skrypt teams.
- Aby skonfigurować połączenie i zamapować wystąpienia programu Blue Yonder WFM na istniejące zespoły w usłudze Teams, uruchom istniejący skrypt zespołów.
Postępuj zgodnie z instrukcjami wyświetlanymi na ekranie podczas uruchamiania skryptu. Skrypt wykonuje następujące akcje:
Przetestuj i sprawdź połączenie z programem Blue Yonder WFM przy użyciu wprowadzonych poświadczeń konta usługi Blue Yonder WFM i adresów URL usługi.
Zastosuj ustawienia synchronizacji. Te ustawienia obejmują częstotliwość synchronizacji (w minutach) i dane harmonogramu synchronizowane między programami Blue Yonder WFM i Shifts. Możesz włączyć dane harmonogramu zdefiniowane przez następujące scenariusze: , , ,
OpenShift
, ,OpenShiftRequest
, , .TimeOffRequest
TimeOff
UserShiftPreferences
SwapRequest
Shift
Aby dowiedzieć się więcej, zobacz New-CsTeamsShiftsConnectionInstance. Aby wyświetlić listę obsługiwanych opcji synchronizacji dla każdego parametru, uruchom polecenie Get-CsTeamsShiftsConnectionConnector.
Uwaga
Skrypt umożliwia synchronizację dla każdej obsługiwanej opcji synchronizacji. Jeśli chcesz zmienić ustawienia synchronizacji, możesz to zrobić po skonfigurowaniu połączenia. Aby dowiedzieć się więcej, zobacz Używanie programu PowerShell do zarządzania połączeniem shifts z rozwiązaniem Blue Yonder Workforce Management.
Mapuj wystąpienia programu Blue Yonder WFM na swoje zespoły w usłudze Teams.
- Jeśli wybrano uruchomienie skryptu nowych zespołów w celu utworzenia nowych zespołów, mapowania są oparte na utworzonych nowych zespołach.
- Jeśli wybrano opcję uruchomienia istniejącego skryptu zespołu w celu mapowania istniejących zespołów, mapowania są oparte na wprowadzonych identyfikatorach wystąpień blue Yonder i identyfikatorach zespołu. Jeśli zespół ma istniejący harmonogram, skrypt usuwa wszystkie dane harmonogramu.
Po uruchomieniu skryptu komunikat o powodzeniu potwierdza, czy połączenie zostało pomyślnie skonfigurowane.
Zarządzanie połączeniem
Po skonfigurowaniu połączenia możesz zarządzać nim i wprowadzać w nim zmiany w centrum administracyjnym platformy Microsoft 365 lub przy użyciu programu PowerShell.
Korzystanie z centrum administracyjnego platformy Microsoft 365
Strona Zarządzanie łącznikami zawiera listę wszystkich skonfigurowanych połączeń wraz z informacjami, takimi jak stan kondycji i szczegóły interwału synchronizacji. Możesz również uzyskać dostęp do kreatora, aby wprowadzić zmiany w dowolnym połączeniu. Można na przykład zaktualizować ustawienia synchronizacji i mapowania zespołów.
Aby dowiedzieć się więcej, zobacz Używanie centrum administracyjnego platformy Microsoft 365 do zarządzania połączeniem shifts z rozwiązaniem Blue Yonder Workforce Management.
Korzystanie z programu PowerShell
Za pomocą programu PowerShell można wyświetlić raport o błędach, zmienić ustawienia połączenia, wyłączyć synchronizację i nie tylko. Aby uzyskać szczegółowe wskazówki, zobacz Używanie programu PowerShell do zarządzania połączeniem shifts z rozwiązaniem Blue Yonder Workforce Management.
Skrypty
Konfigurowanie połączenia i tworzenie nowego zespołu
#Map WFM sites to teams script
Write-Output "Map WFM sites to teams"
Start-Sleep 1
#Ensure Teams module is at least version x
Write-Output "Checking Teams module version"
try {
Get-InstalledModule -Name "MicrosoftTeams" -MinimumVersion 5.2.0
} catch {
throw
}
#Connect to MS Graph
Connect-MgGraph -Scopes "User.Read.All","Group.ReadWrite.All"
#List connector types available (comment out if not implemented for preview)
Write-Output "Listing connector types available"
$BlueYonderId = "6A51B888-FF44-4FEA-82E1-839401E9CD74"
$connectors = Get-CsTeamsShiftsConnectionConnector
Write-Output $connectors
#Prompt for entering of WFM username and password
$WfmUserName = Read-Host -Prompt 'Input your Blue Yonder account username'
$WfmPwd = Read-Host -Prompt 'Input your Blue Yonder account password' -AsSecureString
$plainPwd =[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($WfmPwd))
#Test connection settings
Write-Output "Testing connection settings"
$ConnectionName = Read-Host -Prompt 'Input connection name'
$adminApiUrl = Read-Host -Prompt 'Input admin api url'
$cookieAuthUrl = Read-Host -Prompt 'Input cookie authorization url'
$essApiUrl = Read-Host -Prompt 'Input ess api url'
$federatedAuthUrl = Read-Host -Prompt 'Input federated authorization url'
$retailWebApiUrl = Read-Host -Prompt 'Input retail web api url'
$siteManagerUrl = Read-Host -Prompt 'Input site manager url'
$testResult = Test-CsTeamsShiftsConnectionValidate `
-Name $ConnectionName `
-ConnectorId $BlueYonderId `
-ConnectorSpecificSettings (New-Object Microsoft.Teams.ConfigAPI.Cmdlets.Generated.Models.ConnectorSpecificBlueYonderSettingsRequest `
-Property @{
AdminApiUrl = $adminApiUrl
SiteManagerUrl = $siteManagerUrl
EssApiUrl = $essApiUrl
RetailWebApiUrl = $retailWebApiUrl
CookieAuthUrl = $cookieAuthUrl
FederatedAuthUrl = $federatedAuthUrl
LoginUserName = $WfmUserName
LoginPwd = $plainPwd
})
if ($NULL -ne $testResult.Code) {
Write-Output $testResult
throw "Validation failed, conflict found"
}
Write-Output "Test complete, no conflicts found"
#Create a connection
Write-Output "Creating a connection"
$ConnectionResponse = New-CsTeamsShiftsConnection `
-Name $ConnectionName `
-ConnectorId $BlueYonderId `
-ConnectorSpecificSettings (New-Object Microsoft.Teams.ConfigAPI.Cmdlets.Generated.Models.ConnectorSpecificBlueYonderSettingsRequest `
-Property @{
AdminApiUrl = $adminApiUrl
SiteManagerUrl = $siteManagerUrl
EssApiUrl = $essApiUrl
RetailWebApiUrl = $retailWebApiUrl
CookieAuthUrl = $cookieAuthUrl
FederatedAuthUrl = $federatedAuthUrl
LoginUserName = $WfmUserName
LoginPwd = $plainPwd
})
$ConnectionId = $ConnectionResponse.Id
if ($null -ne $ConnectionId){
Write-Output "Successfully created connection"
} else {
throw "Connection creation failed"
}
#Create a connection instance
Write-Output "Creating a connection instance"
$designatedActorName = Read-Host -Prompt "Input Microsoft 365 System Account (person@contoso.com)"
$designator = Get-MgUser -UserId $designatedActorName
$teamsUserId = $designator.Id
$syncFreq = Read-Host -Prompt "Input sync frequency in minutes"
$InstanceName = Read-Host -Prompt "Input connection instance name"
#Read sync scenarios for connection instance
function GetSyncScenarioSetting {
param (
$SettingName
)
$TwoWay = New-Object System.Management.Automation.Host.ChoiceDescription '&TwoWay', 'TwoWay'
$Disabled = New-Object System.Management.Automation.Host.ChoiceDescription '&Disabled', 'Disabled'
$FromWfmToShifts = New-Object System.Management.Automation.Host.ChoiceDescription '&FromWfmToShifts', 'FromWfmToShifts'
$options = [System.Management.Automation.Host.ChoiceDescription[]]($TwoWay, $Disabled, $FromWfmToShifts)
$result = $host.ui.PromptForChoice("Set sync scenario for $SettingName", "", $options, 0)
switch ($result)
{
0 { return "TwoWay" }
1 { return "Disabled" }
2 { return "FromWfmToShifts" }
}
}
$SyncScenarioOpenShift = GetSyncScenarioSetting "Open Shift"
$SyncScenarioOpenShiftRequest = GetSyncScenarioSetting "Open Shift Request"
$SyncScenarioShift = GetSyncScenarioSetting "Shift"
$SyncScenarioSwapRequest = GetSyncScenarioSetting "Swap Request"
$SyncScenarioTimeCard = GetSyncScenarioSetting "Time Card"
$SyncScenarioTimeOff = GetSyncScenarioSetting "Time Off"
$SyncScenarioTimeOffRequest = GetSyncScenarioSetting "Time Off Request"
$SyncScenarioUserShiftPreference = GetSyncScenarioSetting "User Shift Preferences"
#Read admin email list
[psobject[]]$AdminEmailList = @()
while ($true){
$AdminEmail = Read-Host -Prompt "Enter admin's email to receive error report"
$AdminEmailList += $AdminEmail
$title = 'Adding another email'
$question = 'Would you like to add another admin email?'
$choices = '&Yes', '&No'
$decision = $Host.UI.PromptForChoice($title, $question, $choices, 1)
if ($decision -eq 1) {
break
}
}
$InstanceResponse = New-CsTeamsShiftsConnectionInstance `
-ConnectionId $ConnectionId `
-ConnectorAdminEmail $AdminEmailList `
-DesignatedActorId $teamsUserId `
-Name $InstanceName `
-SyncFrequencyInMin $syncFreq `
-SyncScenarioOpenShift $SyncScenarioOpenShift `
-SyncScenarioOpenShiftRequest $SyncScenarioOpenShiftRequest `
-SyncScenarioShift $SyncScenarioShift `
-SyncScenarioSwapRequest $SyncScenarioSwapRequest `
-SyncScenarioTimeCard $SyncScenarioTimeCard `
-SyncScenarioTimeOff $SyncScenarioTimeOff `
-SyncScenarioTimeOffRequest $SyncScenarioTimeOffRequest `
-SyncScenarioUserShiftPreference $SyncScenarioUserShiftPreference
$InstanceId = $InstanceResponse.id
if ($null -ne $InstanceId){
Write-Output "Success"
} else {
throw "Connector instance creation failed"
}
#Keep mapping teams until user stops it
$mappings=@()
while ($true)
{
#Create a new Teams team with owner set to system account and name set to the site name
Write-Output "Creating a Teams team"
$teamsTeamName = Read-Host -Prompt "Input the Teams team name"
$Team = New-Team -DisplayName $teamsTeamName -Visibility "Public" -Owner $teamsUserId
Write-Output "Successfully created a team"
$TeamsTeamId=$Team.GroupId
#Retrieve the list of wfm locations
Write-Output "Listing the WFM team sites"
$WfmTeamIds = Get-CsTeamsShiftsConnectionWfmTeam -ConnectorInstanceId $InstanceId
Write-Output $WfmTeamIds
if (($NULL -ne $WfmTeamIds) -and ($WfmTeamIds.Count -gt 0)){
[System.String]$WfmTeamId = Read-Host -Prompt "Input the ID of WFM team you want to map"
}
else {
throw "The WfmTeamId list is null or empty"
}
#Retrieve the list of WFM users and their roles
Write-Output "Listing WFM users and roles"
$WFMUsers = Get-CsTeamsShiftsConnectionWfmUser -ConnectorInstanceId $InstanceId -WfmTeamId $WfmTeamId
Write-Output $WFMUsers
#Add users to the Team for Shifts
Write-Output "Adding users to Teams team"
$currentUser = Read-Host -Prompt "Input the current user's user name or AAD ID"
Add-TeamUser -GroupId $TeamsTeamId -User $currentUser -Role Owner
$failedWfmUsers=@()
foreach ($user in $WFMUsers) {
try {
$userEmail = $user.Name + "@" +$domain
Add-TeamUser -GroupId $TeamsTeamId -User $userEmail
} catch {
$failedWfmUsers+=$user
}
}
if($failedWfmUsers.Count -gt 0){
Write-Output "There are WFM users not existed in Teams tenant:"
Write-Output $failedWfmUsers
}
#Enable scheduling in the group
$RequestBody = @{
Enabled = $true
TimeZone = "America/Los_Angeles"
}
$teamUpdateUrl="https://graph.microsoft.com/v1.0/teams/"+$TeamsTeamId+"/schedule"
Invoke-MgGraphRequest -Uri $teamUpdateUrl -Method PUT -Body $RequestBody
#Create a mapping of the new team to the instance
Write-Output "Create a mapping of the new team to the site"
$TimeZone = Read-Host -Prompt "Input the time zone of team mapping"
$mapping = @{
teamId = $TeamsTeamId
wfmTeamId = $WfmTeamId
timeZone = $TimeZone
}
$mappings += , $mapping
$title = 'Connecting another team'
$question = 'Would you like to connect another team?'
$choices = '&Yes', '&No'
$decision = $Host.UI.PromptForChoice($title, $question, $choices, 1)
if ($decision -eq 1) {
break
}
}
$batchMappingResponse = New-CsTeamsShiftsConnectionBatchTeamMap -ConnectorInstanceId $InstanceId -TeamMapping @($mappings)
if ($null -ne $batchMappingResponse.OperationId){
"The mapping has begun asynchronously. To query mapping results run Get-CsTeamsShiftsConnectionOperation with the operation Id."
}
else {
throw "The mapping has failed due to validation errors."
}
Write-Output $batchMappingResponse
Remove-TeamUser -GroupId $TeamsTeamId -User $currentUser -Role Owner
Disconnect-MgGraph
Konfigurowanie połączenia i mapowanie istniejącego zespołu
#Map WFM sites to existing teams script
Write-Output "Map WFM sites to existing teams"
Start-Sleep 1
#Ensure Teams module is at least version x
Write-Output "Checking Teams module version"
try {
Get-InstalledModule -Name "MicrosoftTeams" -MinimumVersion 5.2.0
} catch {
throw
}
#Connect to MS Graph
Connect-MgGraph -Scopes "User.Read.All","Group.ReadWrite.All"
#List connector types available (comment out if not implemented for preview)
Write-Output "Listing connector types available"
$BlueYonderId = "6A51B888-FF44-4FEA-82E1-839401E9CD74"
$connectors = Get-CsTeamsShiftsConnectionConnector
Write-Output $connectors
#Prompt for entering of WFM username and password
$WfmUserName = Read-Host -Prompt 'Input your Blue Yonder account username'
$WfmPwd = Read-Host -Prompt 'Input your Blue Yonder account password' -AsSecureString
$plainPwd =[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($WfmPwd))
#Test connection settings
Write-Output "Testing connection settings"
$ConnectionName = Read-Host -Prompt 'Input connection name'
$adminApiUrl = Read-Host -Prompt 'Input admin api url'
$cookieAuthUrl = Read-Host -Prompt 'Input cookie authorization url'
$essApiUrl = Read-Host -Prompt 'Input ess api url'
$federatedAuthUrl = Read-Host -Prompt 'Input federated authorization url'
$retailWebApiUrl = Read-Host -Prompt 'Input retail web api url'
$siteManagerUrl = Read-Host -Prompt 'Input site manager url'
$testResult = Test-CsTeamsShiftsConnectionValidate `
-Name $ConnectionName `
-ConnectorId $BlueYonderId `
-ConnectorSpecificSettings (New-Object Microsoft.Teams.ConfigAPI.Cmdlets.Generated.Models.ConnectorSpecificBlueYonderSettingsRequest `
-Property @{
AdminApiUrl = $adminApiUrl
SiteManagerUrl = $siteManagerUrl
EssApiUrl = $essApiUrl
RetailWebApiUrl = $retailWebApiUrl
CookieAuthUrl = $cookieAuthUrl
FederatedAuthUrl = $federatedAuthUrl
LoginUserName = $WfmUserName
LoginPwd = $plainPwd
})
if ($NULL -ne $testResult.Code) {
Write-Output $testResult
throw "Validation failed, conflict found"
}
Write-Host "Test complete, no conflicts found"
#Create a connection
Write-Output "Creating a connection"
$ConnectionResponse = New-CsTeamsShiftsConnection `
-Name $ConnectionName `
-ConnectorId $BlueYonderId `
-ConnectorSpecificSettings (New-Object Microsoft.Teams.ConfigAPI.Cmdlets.Generated.Models.ConnectorSpecificBlueYonderSettingsRequest `
-Property @{
AdminApiUrl = $adminApiUrl
SiteManagerUrl = $siteManagerUrl
EssApiUrl = $essApiUrl
RetailWebApiUrl = $retailWebApiUrl
CookieAuthUrl = $cookieAuthUrl
FederatedAuthUrl = $federatedAuthUrl
LoginUserName = $WfmUserName
LoginPwd = $plainPwd
})
$ConnectionId = $ConnectionResponse.Id
if ($null -ne $ConnectionId){
Write-Output "Successfully created connection"
} else {
throw "Connection creation failed"
}
#Create a connection instance
Write-Output "Creating a connection instance"
$designatedActorName = Read-Host -Prompt "Input Microsoft 365 System Account (person@contoso.com)"
$designator = Get-MgUser -UserId $designatedActorName
$teamsUserId = $designator.Id
$syncFreq = Read-Host -Prompt "Input sync frequency in minutes"
$InstanceName = Read-Host -Prompt "Input connection instance name"
#Read sync scenarios for connection instance
function GetSyncScenarioSetting {
param (
$SettingName
)
$TwoWay = New-Object System.Management.Automation.Host.ChoiceDescription '&TwoWay', 'TwoWay'
$Disabled = New-Object System.Management.Automation.Host.ChoiceDescription '&Disabled', 'Disabled'
$FromWfmToShifts = New-Object System.Management.Automation.Host.ChoiceDescription '&FromWfmToShifts', 'FromWfmToShifts'
$options = [System.Management.Automation.Host.ChoiceDescription[]]($TwoWay, $Disabled, $FromWfmToShifts)
$result = $host.ui.PromptForChoice("Set sync scenario for $SettingName", "", $options, 0)
switch ($result)
{
0 { return "TwoWay" }
1 { return "Disabled" }
2 { return "FromWfmToShifts" }
}
}
$SyncScenarioOpenShift = GetSyncScenarioSetting "Open Shift"
$SyncScenarioOpenShiftRequest = GetSyncScenarioSetting "Open Shift Request"
$SyncScenarioShift = GetSyncScenarioSetting "Shift"
$SyncScenarioSwapRequest = GetSyncScenarioSetting "Swap Request"
$SyncScenarioTimeCard = GetSyncScenarioSetting "Time Card"
$SyncScenarioTimeOff = GetSyncScenarioSetting "Time Off"
$SyncScenarioTimeOffRequest = GetSyncScenarioSetting "Time Off Request"
$SyncScenarioUserShiftPreference = GetSyncScenarioSetting "User Shift Preferences"
#Read admin email list
[psobject[]]$AdminEmailList = @()
while ($true){
$AdminEmail = Read-Host -Prompt "Enter admin's email to receive error report"
$AdminEmailList += $AdminEmail
$title = 'Adding another email'
$question = 'Would you like to add another admin email?'
$choices = '&Yes', '&No'
$decision = $Host.UI.PromptForChoice($title, $question, $choices, 1)
if ($decision -eq 1) {
break
}
}
$InstanceResponse = New-CsTeamsShiftsConnectionInstance `
-ConnectionId $ConnectionId `
-ConnectorAdminEmail $AdminEmailList `
-DesignatedActorId $teamsUserId `
-Name $InstanceName `
-SyncFrequencyInMin $syncFreq `
-SyncScenarioOpenShift $SyncScenarioOpenShift `
-SyncScenarioOpenShiftRequest $SyncScenarioOpenShiftRequest `
-SyncScenarioShift $SyncScenarioShift `
-SyncScenarioSwapRequest $SyncScenarioSwapRequest `
-SyncScenarioTimeCard $SyncScenarioTimeCard `
-SyncScenarioTimeOff $SyncScenarioTimeOff `
-SyncScenarioTimeOffRequest $SyncScenarioTimeOffRequest `
-SyncScenarioUserShiftPreference $SyncScenarioUserShiftPreference
$InstanceId = $InstanceResponse.id
if ($null -ne $InstanceId){
Write-Output "Success"
} else {
throw "Connector instance creation failed"
}
#Keep mapping teams until user stops it
$mappings=@()
while ($true)
{
$TeamsTeamId = Read-Host -Prompt "Input the ID of the Teams team to be mapped"
#Clear schedule of the Teams team
Write-Host "Clear schedule of the existing team"
$entityTypeString = Read-Host -Prompt 'Input the entity types of clear schedule'
$Delimiters = ",", ".", ":", ";", " ", "`t"
$entityType = $entityTypeString -Split {$Delimiters -contains $_}
$entityType = $entityType.Trim()
$entityType = $entityType.Split('',[System.StringSplitOptions]::RemoveEmptyEntries)
Remove-CsTeamsShiftsScheduleRecord -TeamId $TeamsTeamId -ClearSchedulingGroup:$True -EntityType $entityType
#Retrieve the list of wfm locations
Write-Output "Listing the WFM team sites"
$WfmTeamIds = Get-CsTeamsShiftsConnectionWfmTeam -ConnectorInstanceId $InstanceId
Write-Output $WfmTeamIds
if (($NULL -ne $WfmTeamIds) -and ($WfmTeamIds.Count -gt 0)){
[System.String]$WfmTeamId = Read-Host -Prompt "Input the ID of WFM team you want to map"
}
else {
throw "The WfmTeamId list is null or empty"
}
#Retrieve the list of WFM users and their roles
Write-Output "Listing WFM users and roles"
$WFMUsers = Get-CsTeamsShiftsConnectionWfmUser -ConnectorInstanceId $InstanceId -WfmTeamId $WfmTeamId
Write-Output $WFMUsers
#Create a mapping of the existing team to the instance
Write-Host "Create a mapping of the existing team to the site"
$TimeZone = Read-Host -Prompt "Input the time zone of team mapping"
$mapping = @{
teamId = $TeamsTeamId
wfmTeamId = $WfmTeamId
timeZone = $TimeZone
}
$mappings += , $mapping
$title = 'Connecting another team'
$question = 'Would you like to connect another team?'
$choices = '&Yes', '&No'
$decision = $Host.UI.PromptForChoice($title, $question, $choices, 1)
if ($decision -eq 1) {
break
}
}
$batchMappingResponse = New-CsTeamsShiftsConnectionBatchTeamMap -ConnectorInstanceId $InstanceId -TeamMapping @($mappings)
if ($null -ne $batchMappingResponse.OperationId){
"The mapping has begun asynchronously. To query mapping results run Get-CsTeamsShiftsConnectionOperation with the operation Id."
}
else {
throw "The mapping has failed due to validation errors."
}
Write-Output $batchMappingResponse
Disconnect-MgGraph
Przesunięcia poleceń cmdlet łącznika
Aby uzyskać pomoc dotyczącą poleceń cmdlet łącznika Shifts, w tym poleceń cmdlet używanych w skryptach, wyszukaj ciąg CsTeamsShiftsConnection w dokumentacji poleceń cmdlet programu Teams programu PowerShell. Poniżej przedstawiono linki do niektórych często używanych poleceń cmdlet pogrupowanych według kategorii:
Połączenia
Poświadczenia systemów programu WFM
Opcje synchronizacji dla obsługiwanych scenariuszy
Usuwanie danych harmonogramu
Wystąpienia połączeń
- New-CsTeamsShiftsConnectionInstance
- Get-CsTeamsShiftsConnectionInstance
- Set-CsTeamsShiftsConnectionInstance
- Update-CsTeamsShiftsConnectionInstance
- Remove-CsTeamsShiftsConnectionInstance
Mapowanie użytkownika i pomyślne synchronizowanie
Mapowanie zespołu
Identyfikator operacji
Raporty o błędach
Artykuły pokrewne
- Łączniki aplikacji Zmiany
- Zarządzanie połączeniem shifts z rozwiązaniem Blue Yonder Workforce Management przy użyciu programu PowerShell
- Zarządzanie połączeniem shifts z usługą Blue Yonder Workforce Management przy użyciu centrum administracyjnego platformy Microsoft 365
- Zarządzanie aplikacją Zmiany
- Omówienie programu PowerShell w usłudze Teams
- Dokumentacja poleceń cmdlet programu PowerShell w usłudze Teams