Im a really big fan of building blocks within your integration platform which allow you to build reusable blocks which can easily be reused across the different interfaces you build in your organisation and they will also make it easier to build new interfaces which extend stuff you have already done rather than having to build the entire interface from scratch each time.
One of the cool building blocks we have is an SAP RFC trigger building block which allows the SAP team to build processes where a user wants to trigger an interface manually from SAP.
The use case would be something like the following:
Scenario: Manually triggered interface by SAP user
When the user clicks in SAP
Then SAP will trigger an RFC
Then the Logic App will trigger via the RFC connector
Then the Logic App will publish a message to Service Bus Topic
Then another Logic App will trigger from service bus to do some interface
In this scenario the building block sends a message to service bus and triggers other Logic App. These other logic apps may then query data from other systems and load it to SAP or alternatively they may query data from SAP via something like an OData query then transform the data and send it to other systems.
There are loads of opportunities for these user triggered background processes. A diagram of what our approach would look like is below:
The key thing is how to trigger them, the SAP team can create ways to trigger the SAP RFC multiple times with different data but it will hit the same Logic App so that the connectivity and receiver is reused and then pub/sub will trigger different interfaces.
In a logic app we use the SAP RFC when a message is received trigger
The SAP team created an RFC which can trigger with a fairly simple message with a key/name for the automated process to trigger like shown below.
{
"body": {
"ActionUri": "http://Microsoft.LobServices.Sap/2007/03/Rfc/Z_EAI_EXECUTE_PROCESS",
"Content": "<Z_EAI_EXECUTE_PROCESS xmlns=\"http://Microsoft.LobServices.Sap/2007/03/Rfc/\"><PROCESS_KEY>ProcessA_KEY</PROCESS_KEY><PROCESS_NAME>ProcessA</PROCESS_NAME></Z_EAI_EXECUTE_PROCESS>"
}
}
In the building block we then parse out the process key and process name and set them as service bus properties so we can use pub/sub to trigger other interfaces.
There are a couple of other ways you could implement a similar pattern for SAP but hopefully this building block gives integration teams a few ideas on how to have manually triggered background processes to support SAP.