Vardiyaları Blue Yonder Workforce Management'a bağlamak için PowerShell kullanma
Genel bakış
Microsoft Teams'deki Vardiyalar uygulamasını Blue Yonder Workforce Management (Blue Yonder WFM) ile tümleştirmek için Blue Yonder için Microsoft Teams Vardiyaları bağlayıcısını kullanın. Ön cephe çalışanlarınız Vardiyalar'ın içinden Blue Yonder WFM'de zamanlamalarını sorunsuz bir şekilde görüntüleyebilir ve yönetebilir.
Bu makalede, Bağlayıcıyı Ayarlama ve Yapılandırma için PowerShell'i kullanma konusunda size yol gösteririz.
Bağlantıyı kurmak için bir PowerShell betiği çalıştırırsınız. Betik bağlayıcıyı yapılandırıyor, eşitleme ayarlarını uyguluyor, bağlantıyı oluşturuyor ve Blue Yonder WFM örneklerini ekiplere eşler. Eşitleme ayarları, Vardiyalar'da etkinleştirilen özellikleri ve Blue Yonder WFM ile Vardiyalar arasında eşitlenen zamanlama bilgilerini belirler. Eşlemeler, Teams'deki Blue Yonder WFM örnekleriniz ve ekipleriniz arasındaki eşitleme ilişkisini tanımlar. Mevcut ekiplere ve yeni ekiplere eşleyebilirsiniz.
İki betik sağlıyoruz. Mevcut ekiplere eşlemek veya eşlemek için yeni ekipler oluşturmak istediğinize bağlı olarak betiklerden birini kullanabilirsiniz.
Her birinde farklı eşitleme ayarları olan birden çok bağlantı ayarlayabilirsiniz. Örneğin, kuruluşunuzun farklı zamanlama gereksinimlerine sahip birden çok konumu varsa, her konum için benzersiz eşitleme ayarlarıyla bir bağlantı oluşturun. Blue Yonder WFM örneğinin herhangi bir anda yalnızca bir ekiple eşlenebileceğini unutmayın. Bir örnek zaten bir takımla eşlenmişse, başka bir takımla eşlenemez.
Kayıt sistemi olarak Blue Yonder WFM ile ön cephe çalışanlarınız, cihazlarında Vardiyalar'da zamanlamalarını ve kullanılabilirliklerini verimli bir şekilde yönetebilir. Ön cephe yöneticileri, zamanlamaları ayarlamak için Blue Yonder WFM kullanmaya devam edebilir.
Not
Shift'leri Blue Yonder WFM'ye bağlamak için Microsoft 365 yönetim merkezindeki Vardiyalar bağlayıcısı sihirbazını da kullanabilirsiniz.
Başlamadan önce
Önkoşullar
Başlamadan önce aşağıdaki tüm önkoşulları karşıladığınızdan emin olun:
Blue Yonder WFM sürüm 2020.3, 2021.1 veya 2021.2'ye sahipsiniz.
Not
Blue Yonder WFM 2020.3 veya 2021.1'iniz varsa, 2020.3.0.4 veya 2021.1.0.3 düzeltme ekini uygulayın. Bu düzeltme eki, kullanıcıların Vardiyalar'da kalıcı bir hata iletisi alması sorununu düzeltir. Ayrıca, kullanıcıların Vardiyalar'da kullanılabilirliklerini güncelleştirmelerini engelleyen bir sorunu da düzeltir.
Blue Yonder WFM hizmet hesabı adınızı, parolanızı ve hizmet URL'lerinizi biliyorsunuz:
- Federasyon kimlik doğrulaması URL'si
- Tanımlama bilgisi kimlik doğrulaması URL'si
- Çalışan self servis URL'si
- Perakende web API'si URL'si
- Site yöneticisi API'si URL'si
- Yönetim API'si URL'si
Tüm bu bilgilere sahip değilseniz Blue Yonder desteğine başvurun. Blue Yonder kuruluş yöneticisi tarafından kök kuruluş düzeyinde bir Mavi Yonder hesabı oluşturulur. API Erişimi, İstemci Yöneticisi, Mağaza Yöneticisi ve Çalışan erişimi olmalıdır. Bağlantı oluşturmak için hesap ve parola gereklidir.
Federasyon SSO kimlik doğrulaması, Blue Yonder WFM ortamınızda etkinleştirilir. Federasyon SSO'nun etkinleştirildiğinden emin olmak için Mavi Yonder desteğine başvurun. Aşağıdaki bilgilere ihtiyaçları olacaktır:
- federatedSSOValidationService:
https://wfmconnector.teams.microsoft.com/api/v1/fedauth/{tenantId}/6A51B888-FF44-4FEA-82E1-839401E9CD74/authorize
tenantId değeriniz nerede{tenantId}
? - proxyHeader: X-MS-AuthToken
- federatedSSOValidationService:
Teams'de en az bir ekibiniz ayarlanmıştır.
Microsoft 365 sistem hesabı olarak adlandırdığımız genel bir hesabı eşlemek istediğiniz tüm takımlara ekip sahibi olarak eklediniz.
Bu hesabı Microsoft 365 yönetim merkezinde oluşturun ve bir Microsoft 365 lisansı atayın. Ardından hesabı eşlemek istediğiniz tüm ekiplere ekip sahibi olarak ekleyin. Shifts bağlayıcısı, Shifts değişiklikleri Blue Yonder WFM'den eşitlenirken bu hesabı kullanır. Özel olarak bu amaçla bir hesap oluşturmanızı ve kişisel kullanıcı hesabınızı kullanmamanızı öneririz.
PowerShell kullanarak bağlayıcıyı yönetmek için yönetici rolü
Bu makaledeki adımları tamamlamak için Microsoft 365 Genel Yöneticisi veya Shifts bağlayıcı yöneticisi olmanız gerekir.
Vardiyalar bağlayıcısı yönetici rolü, Microsoft Entra Kimliği'nde oluşturduğunuz ve bir kullanıcıya atadığınız özel bir roldür. Rolün adı "Shifts bağlayıcı yöneticisi" olmalıdır. Rolün belirli izinlere sahip olması gerekmez, ancak oluşturduğunuzda en az bir izin ayarlanmalıdır. Hizmet, izinlerine değil, rolün kullanıcı üzerinde varlığına bağlıdır.
Daha fazla bilgi edinmek için bkz. Microsoft Entra Id'de özel rol oluşturma ve atama ve Kullanıcılara Microsoft Entra rolleri atama. Rolün oluşturulmasının ve kullanıcıya uygulanmasının 24 saat kadar sürebileceğini unutmayın.
Önemli
Microsoft, rolleri en az izinle kullanmanızı önerir. Bu, kuruluşunuzun güvenliğini artırmaya yardımcı olur. Genel Yönetici, daha az ayrıcalıklı bir rol kullanamıyorsanız acil durum senaryolarıyla sınırlı olması gereken yüksek ayrıcalıklı bir roldür.
Ortamınızı ayarlama
PowerShell sürüm 7 veya üzerini yükleyin. Adım adım yönergeler için bkz . PowerShell'i Windows'a yükleme.
PowerShell'i yönetici modunda çalıştırın.
Microsoft Graph PowerShell modülünü yükleyin.
Install-Module Microsoft.Graph Import-Module Microsoft.Graph
Sürüm 1.6.1 veya üzeri olduğunu doğrulayın.
Get-InstalledModule Microsoft.Graph
Teams Preview PowerShell modülünü yükleyin.
Install-Module -Name MicrosoftTeams -AllowPrerelease -Force Import-Module MicrosoftTeams
En az sürüm 4.7.0 olduğunu ve Shifts bağlayıcı cmdlet'lerini içerdiğini doğrulayın.
Get-Command -Module MicrosoftTeams -Name *teamsshiftsconnection*
Betik çalıştırılırken bir hata oluşursa PowerShell'i çıkış olarak ayarlayın.
$ErrorActionPreference = "Stop"
Betiklerin Windows'ta çalıştırılmasını etkinleştirin.
Set-ExecutionPolicy bypass
Teams'e bağlanma
Teams'e bağlanmak için aşağıdakileri çalıştırın.
Connect-MicrosoftTeams
İstendiğinde yönetici kimlik bilgilerinizi kullanarak oturum açın. Artık bu makaledeki betikleri ve Shifts bağlayıcısı cmdlet'lerini çalıştıracak şekilde ayarlandınız.
Eşlemek istediğiniz ekipleri belirleme
Not
Blue Yonder WFM örneklerini mevcut ekiplere eşlerken bu adımı tamamlayın. Eşleme için yeni ekipler oluşturuyorsanız bu adımı atlayabilirsiniz.
Azure portalında Tüm gruplar sayfasına giderek kuruluşunuzdaki ekiplerin TeamId'lerinin listesini alın.
Eşlemek istediğiniz ekiplerin TeamId değerlerini not alın. Betik bu bilgileri girmenizi ister.
Not
Bir veya daha fazla ekibin mevcut bir zamanlaması varsa, betik bu ekiplerden zamanlamaları kaldırır. Aksi takdirde yinelenen vardiyalar görürsünüz.
Betiği çalıştırma
Yeni bir ekip oluşturup oluşturmadığınıza veya mevcut bir ekiple eşleme yaptığınıza bağlı olarak aşağıdaki betiklerden birini çalıştırın:
- Bağlantı kurmak, Teams'de yeni bir ekip oluşturmak ve bir Blue Yonder WFM örneğini yeni ekiple eşlemek için yeni teams betiğini çalıştırın.
- Bir bağlantı kurmak ve Blue Yonder WFM örneklerini Teams'deki mevcut ekiplerle eşlemek için mevcut ekipler betiğini çalıştırın.
Betiği çalıştırırken ekrandaki yönergeleri izleyin. Betik aşağıdaki eylemleri tamamlar:
Girdiğiniz Blue Yonder WFM hizmet hesabı kimlik bilgilerini ve hizmet URL'lerini kullanarak Blue Yonder WFM bağlantısını test edin ve doğrulayın.
Eşitleme ayarlarını uygulama. Bu ayarlar arasında eşitleme sıklığı (dakika cinsinden) ve Blue Yonder WFM ile Vardiyalar arasında eşitlenen zamanlama verileri bulunur. Şu senaryolar tarafından tanımlanan zamanlama verilerini etkinleştirebilirsiniz:
Shift
,SwapRequest
,UserShiftPreferences
,OpenShift
,OpenShiftRequest
, ,TimeOff
.TimeOffRequest
Daha fazla bilgi için bkz. New-CsTeamsShiftsConnectionInstance. Her parametre için desteklenen eşitleme seçeneklerinin listesini görmek için Get-CsTeamsShiftsConnectionConnector komutunu çalıştırın.
Not
Betik, desteklenen her eşitleme seçeneği için eşitlemeyi etkinleştirir. Eşitleme ayarlarını değiştirmek istiyorsanız, bağlantı kurulduktan sonra bunu yapabilirsiniz. Daha fazla bilgi edinmek için bkz. PowerShell kullanarak Blue Yonder Workforce Management'a vardiyalar bağlantınızı yönetme.
Teams'de Mavi Yonder WFM örneklerini ekiplerinize eşleyin.
- Yeni ekipler oluşturmak için yeni teams betiğini çalıştırmayı seçtiyseniz eşlemeler, oluşturduğunuz yeni ekipleri temel alır.
- Mevcut ekipleri eşlemek için mevcut ekip betiğini çalıştırmayı seçtiyseniz eşlemeler, girdiğiniz Mavi Yonder örnek kimliklerini ve TeamId'leri temel alır. Bir ekibin mevcut bir zamanlaması varsa betik tüm zamanlama verilerini kaldırır.
Betiği çalıştırdıktan sonra, bağlantınızın başarıyla ayarlandığını onaylayan bir Başarı iletisi görüntülenir.
Bağlantınızı yönetme
Bağlantı kurulduktan sonra, Microsoft 365 yönetim merkezinde veya PowerShell kullanarak bu bağlantıyı yönetebilir ve bu bağlantıda değişiklik yapabilirsiniz.
Microsoft 365 yönetim merkezini kullanma
Bağlayıcı Yönetimi sayfasında, ayarladığınız her bağlantının yanı sıra sistem durumu ve eşitleme aralığı ayrıntıları gibi bilgiler listelenir. Bağlantılarınızdan herhangi birinde değişiklik yapmak için sihirbaza da erişebilirsiniz. Örneğin, eşitleme ayarlarını ve ekip eşlemelerini güncelleştirebilirsiniz.
Daha fazla bilgi edinmek için bkz. Microsoft 365 yönetim merkezini kullanarak Blue Yonder Workforce Management ile Vardiyalar bağlantınızı yönetme.
PowerShell kullanma
PowerShell'i kullanarak hata raporunu görüntüleyebilir, bağlantı ayarlarını değiştirebilir, eşitlemeyi devre dışı bırakabilir ve daha fazlasını yapabilirsiniz. Adım adım yönergeler için bkz. Blue Yonder Workforce Management ile Vardiyalar bağlantınızı yönetmek için PowerShell kullanma.
Komut dosyaları
Bağlantı kurma ve yeni bir ekip oluşturma
#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
Bağlantı kurma ve mevcut bir ekibi eşleme
#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
Shifts bağlayıcı cmdlet'leri
Betiklerde kullanılan cmdlet'ler de dahil olmak üzere Shifts bağlayıcı cmdlet'leri ile ilgili yardım için Teams PowerShell cmdlet başvurusundaCsTeamsShiftsConnection araması yapın. Yaygın olarak kullanılan bazı cmdlet'lerin kategoriye göre gruplandırılmış bağlantıları şunlardır:
Bağlantı
WFM sistemleri kimlik bilgileri
Desteklenen senaryolar için eşitleme seçenekleri
Zamanlama verilerini kaldırma
Bağlantı örnekleri
- New-CsTeamsShiftsConnectionInstance
- Get-CsTeamsShiftsConnectionInstance
- Set-CsTeamsShiftsConnectionInstance
- Update-CsTeamsShiftsConnectionInstance
- Remove-CsTeamsShiftsConnectionInstance
Kullanıcı eşlemesi ve başarılı eşitleme
Ekip eşlemesi
İşlem Kimliği
Hata raporları
İlgili makaleler
- Vardiya bağlayıcıları
- PowerShell kullanarak Blue Yonder Workforce Management ile Vardiyalar bağlantınızı yönetme
- Blue Yonder Workforce Management ile Vardiyalar bağlantınızı yönetmek için Microsoft 365 yönetim merkezini kullanın
- Vardiyalar uygulamasını yönetme
- Teams PowerShell'e genel bakış
- Teams PowerShell cmdlet başvurusu