SharePoint Designer 2013 has a button to publish SharePoint 2010 reusable workflows globally so that they can be used in any library.
This button is greyed out for the SharePoint 2013 workflow platform and so appears to not be supported.
We can, however, get a similar result by saving the SharePoint 2013 reusable workflow as a template and deploying it as a solution to a Site or Farm.
The SharePoint 2013 workflow platform has many great features, including the ‘Call HTTP Web Service’ which you can use to call the SharePoint 2013 REST service to access and update SharePoint data across any site.
My workflow utilises many REST calls and so the 2010 platform was not sufficient.
Deploy reusable workflow globally
1.) Create a reusable workflow with platform type ‘SharePoint 2013 Workflow’.
2.) Once you happy to deploy your workflow; on the workflow settings page, click ‘Save as Template’ button on the ribbon.
4.) To deploy to a Site Collection:
Site Settings > Solutions > Upload Solution > Activate.
5.) To deploy to a Farm
Open SharePoint 2013 Management Shell
Add-SPSolution C:tempworkflowfilename.wsp
Central Administration > System Settings > Manage farm solutions
From here you should now be able to see your workflow listed.
Click on its name and click deploy.
Once deployed the workflow will be available at each site as a feature that needs enabling in order to add it to a library.
Enable the workflow on each site with PowerShell
Get the feature identity
To get the identity of your new workflow feature, deploy it manually on one site and then look it up with PowerShell:
Site Settings > Manage site features > find your workflow feature and enable
Get-SPFeature -web http://site/web | Format-Table DisplayName
Where http://site/web is the URL of your web that you enabled the feature at.
Take note of the correct name of your feature.
Enable feature across sites
I enabled the Publishing feature because I will be deploying the workflow to each library through PowerShell and so will need the Tasks and History lists created at each site. Enabling the Publishing feature creates these lists for you.
The below code only deploys the feature on every sub-site of the 3rd web layer down:
$web = $Web = Get-SPWeb http://Site/Web $Web.webs | ForEach-Object { $_.webs | ForEach-Object { try{ $_.url Enable-SPFeature -URL $_.url -Identity "Inwards Mail ProcessListInstances" write-host "InwardsMail feature added" Enable-SPFeature -URL $_.url -Identity "PublishingWeb" write-host "publishing feature added" } catch{ write-host "Failed to add feature to" $_.url } } }
To enable at every site in the Site Collection, paste the above try catch statement into the Web loop on this post.
Next; Associate the workflow to every library/list using PowerShell