How to submit "form-data" in ADF "Web" activity POST call - azure

I am trying to move data from a RESTFul API running on my on-prem application to ADB with ADF. I have installed self-paced IR in my private network to run the activity/pipeline. Now in one of my
API requires form-data to submit in POST call. Equivalent Postman looks like below
How to perform the same in ADF (As I will be running in self-paced IR dataflow is not applicable)? I am trying with "Web" Activity but dont know how to pass form data in it.

You are unable to pass form data in your ADF's Web Activity as you have selected incorrect method in Web activity:
You can select POST method from the dropdown as such:
After this you will get a place to add request body.
Also to get same effect of selecting form-data in postman, you can set 2 cookies as:
Content-Length: length of your request body in bytes
Content-Type: multipart/form-data; boundary= some value as boundary
Content-Type header reference

Related

Tableau Image Response Into ADF

I'm using the Tableau REST API to get an image of a workbook view.
Testing the endpoint in Postman, I get the image perfectly fine back and the Content-Type is "image/png". Now I want to send that same image to an email with an ADF pipeline, the response I get seems to be binary from the Web activity:
"{ Response": "�PNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0003�\u0000\u0000\u0003 ...})
I've been seeing online that the above response is of : "application/octet-stream". Even though the content-type response is of "image/png" in the response in ADF AND Postman.
So I create another web activity which is a Send Email Web activity. In the body, I send the data in a JSON format to a Logic App Send email task.
I want to embed the image into the email using the "img" HTML tag. I set the response of the Tableau image and send it with basee64 encoding:
#json(concat('{"emailAddress": "myemail#email.com", "subject": "Tableau Data","messageBody":"<img src=\"data:image/png;base64,',base64(activity('Get View').output.Response),'\" >"}'))
Once it sends it, I get no image at all.
What do I need to do in order to get the image on the email? I feel like I'm missing some encoding to the response or do I need to save it first to a storage blob and then send from there?

POST body for Google Cloud Build - Webhook Triggers

The Google Cloud Build - Webhook Trigger create trigger documentation shows the proper URL to POST to invoke the build trigger. However the documentation does not describe the POST body, which seems to be required. I have successfully triggered the cloud build webhooks using content-type: application/json header with a POST body of {}, but it would be nice to know:
What is the POST body supposed to be?
Are we able to pass substitution variables in the POST body?
The Google Cloud Build - REST API documentation provides some additional hints that a HttpBody payload is accepted, but no additional information past that as for as I can tell.
The body is what you want! In fact, in your trigger you customize your substitution variable like this (from the documentation)
--subtitutions=\
_SUB_ONE='$(body.message.test)', _SUB_TWO='$(body.message.output)'
So, your body need to be like that
{
"message": {
"test": "test value",
"ourput": "my output"
}
}
The data are automatically extracted from your body content. So you can add more substitutions or change the format of your JSON and thus of your substitutions value.

How to rename a SharePoint folder using Microsoft Flow

I am running a Microsoft Flow and it says it ran successfully but I am trying to rename a folder and the folder isn't renamed.
I have searched websites for a few days now and there isn't much available for flows that rename folders. All I could find is a flow step 'Send an HTTP request to SharePoint' so I have tried this in various forms.
A folder is copied using a Flow step and named Folder123
Send an HTTP request to SharePoint
Site Address: ............
Method: POST
URI: /_api/web/GetFolderByServerRelativeUrl('............. Name'
Headers
Accept: application/json;odata=verbose
X-HTTP-Method: MERGE
If-Match: *
Body: {'Name' : 'Test123'}
There is no error message, the message is: The flow ran successfully.
The expected result is that the folder that is created should be named 'Test123'.
The actual result is that the folder is still named Folder123, so it wasn't renamed.
You are missing one thing in your body which is OData type value.
Follow below steps, it works.
First, get the folder's OData type with a GET request.
Rest call to get folder oData
Design your rest code as per image
Send HTTP Request to sharepoint - Action
So finally your body call looks like below. Your OData type would be depend on your library configuration.
{ '__metadata': { 'type': 'SP.Data.Shared_x0020_DocumentsItem' },'Title': 'Patel', 'FileLeafRef': 'Patel'}
Reference : https://learn.microsoft.com/en-us/sharepoint/dev/sp-add-ins/working-with-folders-and-files-with-rest

Azure Build Pipeline - Pause and Enable DefinitionQueueStatus change REST API

We have many dozens of build pipelines and we want to pause and resume (re-enable) build pipelines from a simple webapp interface as we are making config changes frequently. Here is the MS doc explaining this API:
https://learn.microsoft.com/en-us/rest/api/azure/devops/build/builds/update%20build?view=azure-devops-rest-5.0#definitionqueuestatus
From this documentation, it appears I need to hit the REST API and change/toggle the DefinitionQueueStatus -- however, this documentation only shows a sample for a build specific operation, whereas I want to pause then re-enable the entire build pipeline. What is the proper way to make this call?
I'm using fetch - and I've tried many dozen formats in the call - the 'ourorg' and 'ourproject' are correct (we use this call structure for many other calls), but all fails for this call below. I grabbed the 'definitionID' from the URL I can visibly see when in the Azure devops portal on the specific build pipeline page, and I'm using it for the {buildID} as I don't know what else to put there. Any guidance to help here is appreciated - I don't need to use fetch btw - any working sample will help here:
fetch(https://dev.azure.com/our_org/our_projectname/_apis/build/builds/definitionId=1593?retry=true&api-version=5.0 {
method: 'PATCH ',
credentials: 'same-origin',
body: 'DefinitionQueueStatus: "Enabled"'
}).then(function(response) {
console.log(response);
})
It seems that the body is incorrect in your post. Here is sample about how to use POSTMAN to access Azure DevOps Services REST APIs.
Generate the PAT, and then record the token, it is important to use to authorization, please see this document.
Create a new request in POSTMAN, it is recommended to put the request in a collection for Azure DevOps Services REST API;
Select the authorization as Basic Auth, you can input the username as any value, and the password as the token which is generated in step1.
Basic Auth
Set the REST API which you want to use,and select the request method type(GET,POST,FETCH ....), here you use https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}?api-version=5.0.
In the Body tab, you can set the request body as raw in json format, and input the value as following:
{
"buildNumber":"#20190607.2",
"buildNumberRevision":1,
"definition":
{
"id":1,
"createdDate":null,
"queueStatus":"paused"
}
}
Everthing is ready now, you can send the request, if sccuess, you will get the response from the REST API.
In your post, the body content is incorrect, the Request Body should meet the format in the REST API document. The DefinitionQueueStatus is a type in definitions. In addition, if you send the request with parameter retry, you will get the message The request body must be empty when the retry parameter is specified..

azure logic app & http step response

I have 2 HTTP actions, one after another in a logic app, how do I read the response from a previous HTTP action in the second HTTP action?
First HTTP call (REST) returns a response in JSON format -
{
"authResult": {
"isPasswordExpired": true,
"authToken": "cxxcxcxc",
"message": "Login Successful"
}
}
I want to send authtoken from the result in second http action as authorization header.
As Derke Li mentioned that we could use exression or Parse Json to do that. I also do a demo about how to use the Parse JSON action.
1.Add the Parse Json action after the first Http action
2.Add the parse content and click on the button "Use sample payload to generate schema" and that will pop a new window. Paste in your "authResult" json. As seen in the below image.
3.Then we could pick the token from the dynamic content.
4.We could check the result.
There are two ways you can do this.
Use expression to directly reference the property. #body('NameOfFirstHTTPAction')?['authResult']?'[authToken]
Add a "Parse JSON" action in between the two HTTP action, and provide a sample response of the first HTTP action to generate a schema. Then, in the second HTTP action, you will see authToken as a token from the dynamic content picker for you to reference.

Resources