Я пытаюсь экспортировать определенные свойства запроса из системы CRM для создания пользовательских отчетов в Excel.Поскольку у меня нет прямого доступа к серверу sql, я использую API.Ответ API может быть XML или JSON.
Мой первый запрос возвращает около 13 запросов и их базовые данные, основанные на представлении, которое я настроил в CRM, затем мне нужно использовать второй запрос, чтобы получить дополнительные поля длякаждый запрос.Поэтому я попытался создать массив, в котором я мог бы хранить все необходимые поля, а затем экспортировать его в один CSV-файл.
Однако, когда я пытаюсь добавить новые элементы в мой массив с помощью ForEach-Object, он просто перезаписываетодин и тот же элемент снова и снова.
Также на моем втором Invoke-RestMethod для -Uri я должен использовать «текущий» номер запроса, но я не уверен, как правильно ссылаться на него.
$inputdata = @"
{
"operation": {
"details": {
"from": "0",
"limit": "200",
"filterby": "9304_MyView"
}
}
}
"@
$Params = @{OPERATION_NAME='GET_REQUESTS';INPUT_DATA=$inputdata;TECHNICIAN_KEY='mykey';format='json'}
$Response = Invoke-RestMethod -Uri http://myserver/request -Method Post -Body $Params
$RequestNumber = $Response.operation.details.WORKORDERID
$current = $RequestNumber[0]
$array = @()
ForEach-Object -InputObject $RequestNumber {
$Parameter = @{OPERATION_NAME='GET_REQUEST';TECHNICIAN_KEY='mykey'}
$data = Invoke-RestMethod -Uri http://myserver/request/$current -Method GET -Body $Parameter
$object = New-Object -TypeName PSObject
$object | Add-Member -Name 'RequestNumber' -MemberType NoteProperty -Value $data.API.response.operation.Details.parameter.value[0]
$object | Add-Member -Name 'Subject' -MemberType NoteProperty -Value $data.API.response.operation.Details.parameter.value[12]
$array += @($object)
}
Может кто-нибудь объяснить, что я делаю не так?* Извините, английский не мой родной язык, но я надеюсь, что он имеет некоторый смысл.
Решение, основанное на предложении Мервальда
Я узнал, что с помощью параметра -InputObject обработал мой $RequestNumber как один объект и передал весь «номер билета», поэтому я переместил создание массива над $ RequestNumber, а затем передал $ RequestNumber в ForEach-Object.
$inputdata = @"
{
"operation": {
"details": {
"from": "0",
"limit": "200",
"filterby": "9304_MyView"
}
}
}
"@
$Params = @{OPERATION_NAME='GET_REQUESTS';INPUT_DATA=$inputdata;TECHNICIAN_KEY='mykey';format='json'}
$Response = Invoke-RestMethod -Uri http://myserver/request -Method Post -Body $Params
$array = @()
$RequestNumber = $Response.operation.details.WORKORDERID |
ForEach-Object {
$Parameter = @{OPERATION_NAME='GET_REQUEST';TECHNICIAN_KEY='mykey'}
$data = Invoke-RestMethod -Uri http://myserver/request/$_ -Method GET -Body $Parameter
$object = New-Object -TypeName PSObject
$object | Add-Member -Name 'RequestNumber' -MemberType NoteProperty -Value $data.API.response.operation.Details.parameter.value[0]
$object | Add-Member -Name 'Subject' -MemberType NoteProperty -Value $data.API.response.operation.Details.parameter.value[12]
$array += $object
}