J'essaie d'utiliser PowerShell et l'API pour mettre à jour une cellule, mais j'obtiens une erreur: 1004 Vous n'êtes pas autorisé à effectuer cette action. J'ai élidé les identifiants. . .
J'ai un essai de 30 jours. Dois-je souscrire à un certain niveau de support avant de pouvoir utiliser l'API pour effectuer des mises à jour ou quoi? La feuille est sur mon compte et je suis le propriétaire. Le rôle Write Sheets n'est-il pas inclus dans Owner?
J'utilise PowerShell 5.1 pour faire la requête http - voici mon script. Il obtient d'abord l'ID de feuille correct, puis met les lignes et les colonnes qui m'intéressent dans des hachages, puis essaie de mettre à jour la feuille, mais bien que je sois le propriétaire, je ne suis pas autorisé.
# access account of [email protected]
$apiKey = "3ccfgk..."
$url = "https://api.smartsheet.com/2.0/sheets/"
$get_headers = @{"Authorization" = "Bearer " + $apiKey}
$put_headers = @{"Authorization" = "Bearer " + $apiKey, "Content-Type: application/json" }
# get all the sheets
$response = Invoke-RestMethod -Uri $url -Headers $get_headers
$rd = $response.data
$json = ConvertTo-Json $rd
# find the Forecast sheet
$sheet_id = $rd | Where {$_.name -eq "Forecast Intermediary Sheet"} | Select -ExpandProperty id
"Sheet ID: $sheet_id"
#get the Forecast sheet
$surl = "$url$sheet_id"
$surl
$response = Invoke-RestMethod -Uri $surl -Headers $get_headers
$response | Format-List
# iterate over the rows and get the active ones
$active_rows = @{}
foreach ($row in $response.rows) {
if ($row.rowNumber -ge 14) {
if ($row.cells[2].value -Match "Active") {
$active_rows.Add($row.cells[2].value, $row.id)
}
}
}
# get the col_ids by date
$date_cols = @{}
foreach ($c in $response.columns) {
if ($c.title -as [datetime]) {
$d = $c.title -replace "/20", "/"
$ds = [datetime]::parseexact($d, 'mm/dd/yy', $null)
$date_cols.Add($ds.Tostring("yyyy-mm-dd"), $c.id)
}
}
"UPDATE:"
$rowid = $active_rows["SSL PS Active"]
$colid = $date_cols["2017-11-01"]
"row: $rowid, col: $colid"
$json = '[{ "id": "'+$rowid+'", "cells": [{"columnId": "'+$colid+'","value": "23"} }]'
"JSON: $json"
$purl = "$surl/rows"
"PUT URL: $purl"
$r = Invoke-RestMethod -Method "PUT" -uri $purl -Headers $put_headers -Body $json
$r
Vous trouverez ci-dessous la sortie du script. L'erreur semble indiquer que la syntaxe est correcte, mais que OWNER dispose d'autorisations insuffisantes.
Sheet ID: 5724...
https://api.smartsheet.com/2.0/sheets/5724....
UPDATE:
row: 5668..., col: 5118...
JSON: [{ "id": "5668...", "cells": [{"columnId": "5118...","value": "23"} }]
PUT URL: https://api.smartsheet.com/2.0/sheets/5724.../rows
Invoke-RestMethod : {
"errorCode" : 1004,
"message" : "You are not authorized to perform this action.",
"refId" : "14a7o8lu9sfyj"
}
At \\winfiles\jmoore\powershell\ss_api.ps1:58 char:6
+ $r = Invoke-RestMethod -Method "PUT" -uri $purl -Headers $put_headers ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod],
WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodComand
Voici les méta données de ma fiche
Sheet ID: 5724...
https://api.smartsheet.com/2.0/sheets/5724....
id : 5724...
name : Forecast Intermediary Sheet
version : 2
totalRowCount : 37
accessLevel : OWNER
effectiveAttachmentOptions : {GOOGLE_DRIVE, DROPBOX, ONEDRIVE, EGNYTE...}
ganttEnabled : False
dependenciesEnabled : False
resourceManagementEnabled : False
cellImageUploadEnabled : True
userSettings : @{criticalPathEnabled=False; displaySummaryTasks=True}
permalink : https://app.smartsheet.com/b/home?lx=LCTEj6F0xWNKWWxFUuLH0w
createdAt : 2017-11-22T22:34:51Z
modifiedAt : 2017-11-22T22:34:51Z
columns : {@{id=6985...; index=0; title=Column1; type=TEXT_NUMBER; primary=True;
validation=False; width=64}, @{id=1356...; index=1; title=Column2;
type=PICKLIST; options=System.Object[]; validation=False; width=64},
@{id=5859...; index=2; title=Column3; type=TEXT_NUMBER; validation=False;
....
Vous devriez pouvoir passer des appels API à l'aide d'un jeton d'accès API appartenant à un compte Smartsheet d'essai, et vous pouvez très certainement mettre à jour une feuille que vous possédez à l'aide d'un jeton d'accès API que vous possédez.
Je soupçonne que la 1004
réponse d'erreur est causée par le fait que le contenu de $put_headers
n'est pas formaté correctement. c'est-à-dire que Smartsheet n'est pas capable d'analyser avec précision les en-têtes que vous essayez de spécifier $put_headers
afin d'identifier l'en- tête d' autorisation et de lire sa valeur. Lorsque Smartsheet ne voit pas l'en- tête d' autorisation dans une requête API entrante, il répondra avec la 1004 You are not authorized to perform this action.
réponse d'erreur.
Pour résoudre ce problème, je vous suggère d'utiliser un outil comme Fiddler pour examiner la demande sortante «Mettre à jour les lignes», en accordant une attention particulière aux en-têtes présents dans la demande. Ensuite, si vous découvrez que l'en- tête Authorization est absent de la demande, vous devrez déterminer comment spécifier plusieurs en-têtes de demande dans PowerShell et mettre à jour votre code en conséquence sur la façon dont vous définissez la valeur de $put_headers
.
Mise à jour (ajout du code PowerShell):
Je ne suis pas un expert PowerShell, mais vous pouvez essayer de remplacer cette ligne:
$put_headers = @{"Authorization" = "Bearer " + $apiKey, "Content-Type: application/json"}
Avec ces lignes à la place:
$put_headers = @{}
$put_headers.Add("Authorization", "Bearer " + $apiKey)
$put_headers.Add("Content-Type", "application/json")
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots