Hi Wonderful Team,
We are trying to build an automated workflow promotion process to Alteryx Server using Powershell.
We referred to the below posts:
https://community.alteryx.com/t5/Alteryx-Server-Knowledge-Base/Migrating-Workflows/ta-p/335774
and various other places to build our solution(in PowerShell). Currently we were able to authenticate, get migratable objects from one server, download the workflow as .yxzp package. However when we tried to POST the package to production we were facing troubles.
API Body Code attached below:
$boundary = [System.Guid]::NewGuid().ToString()
$file = "<file full path>\file.yxzp" #change it
$name = "Success_File"
$owner = "<valid mail id>" #change it
$validate = "True"
$isPublic = "True"
$sourceId = "<Source ID of the workflow>" #change it
$workerTag = ""
$canDownload = "True"
$comments = ""
$LF = "`r`n"
$bodyLines = (
"--$boundary",
"Content-Disposition: form-data; name=`"file`"; filename=`"file.yxzp`"Content-Type: {contentType}$LF",
"$file",
"--$boundary",
"Content-Disposition: form-data; name=`"name`"$LF",
"$name",
"--$boundary",
"Content-Disposition: form-data; name=`"owner`"$LF",
"$owner",
"--$boundary",
"Content-Disposition: form-data; name=`"validate`"$LF",
"$validate",
"--$boundary",
"Content-Disposition: form-data; name=`"isPublic`"$LF",
"$isPublic",
"--$boundary",
"Content-Disposition: form-data; name=`"sourceId`"$LF",
"$sourceId",
"--$boundary",
"Content-Disposition: form-data; name=`"workerTag`"$LF",
"$workerTag",
"--$boundary",
"Content-Disposition: form-data; name=`"canDownload`"$LF",
"$canDownload",
"--$boundary",
"Content-Disposition: form-data; name=`"comments`"$LF",
"$comments",
"--$boundary--$LF"
) -join $LF
$bodyLines
We are calling the API using :
Invoke-RestMethod $finalUri -Method POST -ContentType "multipart/form-data; boundary=`"$boundary`"" -Body $bodyLines
When we run this we are getting the following error:
HTTP Error 404. The requested resource is not found.
Please guide us through this problem.
Thanks,
Arun
Solved! Go to Solution.
I cannot read PowerShell, but what is the endpoint you are trying to reach? Based on the error (404) it seems that the endpoint does not exist. I also encourage you to test the API in swagger.
Thanks gabriel for your time and effort.
I have planning to use the same Auth mechanism as shown in the "Legacy OAuth 1 API documentation".
I reckon in this case I have to pass the parameters as forms data.
I had created the form in the same way as shown in the example. (written in previous post).
May I know what information should go in high lighted text?
Content-Disposition: form-data; name="file"; filename="{fileName}"Content-Type: {contentType}
{fileContents}
Is it: filename = name of the file/name with complete path.
contextType = multipart/form-data?
fileContents = get-content from the file?
Sorry for being naive. I am new to the world of APIs.
Arun,
Please see the topic I opened here (one of the topics you linked above): https://community.alteryx.com/t5/Alteryx-Server-Discussions/Migrate-Workflows-via-Admin-API-Powershe...
While I upgraded my server version to a version that uses the oauth 2.0 endpoints, you should be able to successfully create the post request using cURL. Note that my example uses oauth 2.0 authentication and not 1.0, so you will have to make changes around that, but the body should get you on the right path. I believe this is now installed with Windows by default, but I'd highly recommend using cURL over invoke-restmethod in this case. I was never able to correctly format the request using invoke-restmethod. Here's the snippet from the article linked above:
Thanks @igallion . Both Invoke-restmethod and invoke-webrequest are so painful to format when it comes to "formData"
For anyone who is working on powershell API calls to Alteryx Server - the above code works and the cleanest way to call! just replace .\curl.exe to path where curl is installed ( C:\Windows\System32\curl.exe) in my case.
Heard that post powershell 6, curl is not shipped with windows. But I would say it is worth to install it :-)
Thanks
Arun