Using Call HTTP web service in SPD workflow and using App step:
First we will learn when to use App step – one of the reasons that App step is used is to provide elevated permissions in the workflow.
Example
We want to use HTTP web service and get items from root site collection in a workflow created on a sub site or we want communication across site collection using workflow.
Scenario 1
Getting items from a list at root site collection through a workflow created at a sub site.
Source of the List – http://<siteurl>/sites/sitename
Sub site where workflow is create - http://<siteurl>/sites/sitename/subsitename
Step 1 – Configure App step
Go to site settings of sub site as shown below.
To allow workflow to use app permissions
Click the Settings icon as shown in the figure.
Figure Opening the Site Settings page
1. Go to Site Settings.
2. In the Site Actions section, select Manage site features.
3. Locate the feature called Workflows which can use app permissions, as shown in the figure, and then click Activate.
Note
This feature will not activate unless you have properly configured the SharePoint Workflow platform and also apps for SharePoint.
Figure The site feature, 'Workflows can use app permissions'
1. Click the Settings icon as shown in the figure.
Figure: Opening the Site Settings page
1. Go to Site Settings.
2. In the Users and Permissions section, select Site app permissions.
3. Copy the client section of the App Identifier. This is the identifier between the last "|" and the "@" sign, as shown in the figure.
4. Now navigate to the app page to grant permission to app.
http://<siteurl>/sites/sitename/_layouts/15/appinv.aspx - This is the URL of site collection where list exists which we will access through call http web service.
App Id – It is the workflow app Id of sub site from where our workflow will access SharePoint list at root site collection.
Paste the App Id in the text box and click Lookup, It will get Title, App Domain and Redirect URL – it is the URL of the sub site whose workflow App step will access list at root site collection through Call HTTP web service.
Permission Request XML
Paste this as is in Permission Request XML field, do not change anything, it is not configurable.
“<AppPermissionRequests>
<AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web" Right="FullControl" />
</AppPermissionRequests>”
1. Click Create.
2. You will then be asked to trust the Workflow app, as shown in the figure. Click Trust It.
Use App step in workflow
1. Open SharePoint designer
2. Second step is to Get Form digest value.
3. Build a dictionary and add dictionary item.
4. Name – Content-Type, Value - application/json;odata=verbose
6. Add another dictionary item
7. Name – Accept, Value - application/json;odata=verbose
9. Add App step.
10. Add Call HTTP Web Service Action and paste the site URL as shown below – This is the URL to get context info which in turn will give Form digest value. Form Digest value is needed as we are trying to access a list from a sub site.
12. Add header to Call HTTP Web Service action
14. Select Call Web Service Action and click Advance Properties and add header as a request header
16. Get Form Digest value from dictionary d/GetContextWebInformation/FormDigestValue and store the value in a variable.
17. We will access SharePoint list in next stage
18. Build a dictionary and add X-RequestDigest apart from Accept and Content-Type.
20. In X-RequestDigest add form digest variable value.
21. Add another App step and add Call HTTP web service action.
23. Use Rest services URL to get data from list - [%Workflow Context:Current Site URL%]/_api/web/lists/GetByTitle('Village%20Directory')/items(‘ItemId’)?$select=FacilityName
Scenario 2
Getting items from a list across site collection through a workflow created at another site collection.
Suppose we have two site collections with URL’s
Site1 URL - http://<siteurl>/sites/sitename1
Site2 URL - http://<siteurl>/sites/sitename2
We want to access data from site1 through a workflow created at site2
Then we need to add get App Id from site1 as shown below
And we should grant app permission on site2 with following URL
http://<siteurl>/sites/site2/_layouts/15/appinv.aspx
Follow the same steps as explained above.