Schaeffler_codebeamer_help._functions.ps1
function ConvertTo-CbField { [CmdletBinding(DefaultParameterSetName = "Field")] param ( [Parameter(ParameterSetName = "Field")] [string[]]$Field, [Parameter(ParameterSetName = "FieldWithValue")] [hashtable]$FieldWithValue, [Parameter(Mandatory, ParameterSetName = "Field")] [Parameter(Mandatory, ParameterSetName = "FieldWithValue")] [int]$TrackerID, [Parameter(ParameterSetName = "Field")] [Parameter(ParameterSetName = "FieldWithValue")] [switch]$DefaultValues, [Parameter(Mandatory, ParameterSetName = "Field")] [Parameter(Mandatory, ParameterSetName = "FieldWithValue")] [Alias("cbs")] [PSCustomObject]$CBSession ) try { $uriConfiguration = "https://{0}/cb/api/v3/tracker/{1}/configuration" -f $CBSession.server, $TrackerID Write-Debug "uri: $uriConfiguration " $result = Invoke-RestMethod -Uri $uriConfiguration -Method Get -Headers $CBSession.headers -ErrorAction Stop $uriSchema = "https://{0}/cb/api/v3/trackers/{1}/schema" -f $CBSession.Server, $TrackerID Write-Debug "uri: $uriSchema" $fieldsSchema = Invoke-RestMethod -Uri $uriSchema -Method Get -Headers $CBSession.headers -errorAction Stop $fieldLabels = switch ($PSCmdlet.ParameterSetName) { "Field" { $field } "FieldWithValue" { $FieldWithValue.Keys } default { "Well something went worng" } } $fieldsResult = foreach ($name in $fieldLabels) { $fieldNames = [ordered]@{} Write-Debug "Field Name: $name" $fieldProperties = $fieldsSchema | Where-Object { $_.name -eq $name } if (-not $fieldProperties) { throw "Field $name does not exist in tracker $trackerID" } Write-Debug "Tracker ID: $TrackerID" $uri = "https://{0}/cb/api/v3/trackers/{1}/fields/{2}" -f $CBSession.Server, $TrackerID, $fieldProperties.id Write-Debug "URI: $uri" $fieldOptions = Invoke-RestMethod -Uri $uri -Method Get -Headers $CBSession.headers -ErrorAction Stop if ($fieldOptions.valueModel -notlike "*ChoiceFieldValue*") { $fieldValue = if ($FieldWithValue) { $FieldWithValue[$fieldProperties.name] } else { "" } $fieldNames["fieldId"] = $fieldProperties.id $fieldNames["name"] = $fieldProperties.name $fieldNames["value"] = $fieldValue $fieldNames["sharedFieldName"] = "" $fieldNames["type"] = $fieldProperties.valueModel Write-Debug "model $($fieldOptions.valueModel)" } if ($fieldOptions.valueModel -like "*ChoiceFieldValue*") { $fieldValue = if ($FieldWithValue) { $FieldWithValue[$fieldProperties.name] } else { -1 } $type = if ($fieldOptions.memberTypes) { "UserReference" } else { $fieldProperties.referenceType } $fieldNames["fieldId"] = $fieldProperties.id $fieldNames["name"] = $fieldProperties.name $fieldNames["values"] = [array]@( [pscustomobject]@{ id = $fieldValue type = $type } ) $fieldNames["sharedFieldName"] = "" $fieldNames["type"] = "ChoiceFieldValue" } if ($DefaultValues.IsPresent) { $date = Get-date -Format 'yyyy-MM-ddThh:mm:ss.fff' switch ($fieldNames.type) { "TextFieldValue" { Write-Debug $_ $fieldNames["value"] = "Default TextFieldValue Generated on: {0}" -f $date } "WikiTextFieldValue" { Write-Debug $_ $fieldNames["value"] = "Default WikiTextFieldValue Generated on: {0}" -f $date } "ChoiceFieldValue" { Write-Debug $_ Write-Debug "fieldOptions.memberTypes: $($fieldOptions.memberTypes)" Write-Debug "fieldProperties.choiceOptionSetting.type: $($fieldProperties.choiceOptionSetting.type)" if ($fieldOptions.memberTypes -or $fieldProperties.referenceType -eq "UserReference") { $uri = "https://{0}/cb/api/v3/projects/{1}/members?page=1&pageSize=500" -f $CBSession.server, $result.basicInformation.projectID Write-Debug "uri: $uri" $project = Invoke-RestMethod -Uri $uri -Method Get -Headers $CBSession.headers -ErrorAction Stop $member = $project.members | Where-Object { $_.type -eq "UserReference" } | Select-Object -First 1 Write-Debug "Member: $($member.id), Member Name:$($member.name)" Write-Debug "fieldnames: $($fieldNames.Values[0])" $fieldNames.Values[0].id = $member.id } if ($fieldOptions.options) { $fieldNames.Values[0].id = $fieldOptions.options | Select-Object -ExpandProperty id -Last 1 } if ($fieldProperties.choiceOptionSetting.type -eq "CHOICE_WORK_CONFIG_ITEMS") { #tracker id from which we need to take Item to set default value $relatedtrackerID = $fieldProperties.choiceOptionSetting.referenceFilters.domainid $uri = "https://{0}/cb/api/v3/trackers/{1}/items?page=1&pageSize=1" -f $CBSession.server, ($relatedtrackerID | Select-Object -First 1) Write-Debug "relatedtrackerID : $relatedtrackerID" Write-Debug "uri: $uri" $reletadID = (Invoke-RestMethod -Uri $uri -Method Get -Headers $CBSession.headers -ErrorAction Stop).itemRefs.id | Select-Object -First 1 Write-Debug "reletadID: $reletadID" $fieldNames.Values[0].id = $reletadID } } "DurationFieldValue" { # range between 1 and 360000 so value should be less then one hour $duration = get-random -Minimum 1 -Maximum 360000 $fieldNames["value"] = $duration } "DateFieldValue" { $fieldNames["value"] = $date } "DecimalFieldValue" { [decimal]$decimalValue = Get-Random -Minimum 0.1 -Maximum 1.1 $decimalValue = "{0:N3}" -f $decimalValue $fieldNames["value"] = $decimalValue } "BoolFieldValue" { $fieldNames["value"] = $true } "IntegerFieldValue" { $fieldNames["value"] = 1 } Default { Write-Warning "Unknown Type $($fieldNames.type)" } } } New-Object -TypeName psobject -Property $fieldNames } $fieldsResult } catch { $fullError = $_ switch ($_.ErrorDetails.Message) { { $_ -like "*Tracker not found*" } { Write-Error "Tracker ID: $TrackerID most likely doesn't exist. Please recheck Tracker ID or Server." } Default { Write-Error $fullError } } } } |