Skip to content

Commit 8dafd95

Browse files
committed
Updates per feedback
1 parent ce9541b commit 8dafd95

File tree

2 files changed

+110
-74
lines changed

2 files changed

+110
-74
lines changed

articles/logic-apps/logic-apps-using-sap-connector.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,8 @@ For a Standard workflow in single-tenant Azure Logic Apps, use the preview SAP *
253253
254254
#### Upload assemblies to Azure portal
255255
256+
1. [Download the latest SAP client library](#sap-client-library-prerequisites).
257+
256258
1. In the [Azure portal](https://portal.azure.com), open your Standard logic app resource.
257259
258260
1. On the logic app menu, under **Workflows**, select **Assemblies**.
@@ -391,6 +393,8 @@ The following list describes the prerequisites for the SAP client library that y
391393
392394
* For a Consumption workflow in an ISE, follow the [ISE prerequisites](#ise-prerequisites) instead.
393395
396+
* For Standard workflows, copy the assembly (.dll) files to a location from where you can upload them to location where you're building your workflow, either in the Azure portal or locally in Visual Studio Code.
397+
394398
The following relationships exist between the SAP client library, the .NET Framework, the .NET runtime, and the data gateway:
395399
396400
* The Microsoft SAP Adapter and the gateway host service both use .NET Framework 4.7.2.

articles/logic-apps/sap-create-example-scenario-workflows.md

Lines changed: 106 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -105,12 +105,21 @@ Based on whether you have a Consumption workflow in multi-tenant Azure Logic App
105105

106106
The preview SAP built-in connector trigger named **Register SAP RFC server for trigger** is available in the Azure portal, but the trigger currently can't receive calls from SAP when deployed in Azure. To fire the trigger, you can run the workflow locally in Visual Studio Code. For Visual Studio Code setup requirements and more information, see [Create a Standard logic app workflow in single-tenant Azure Logic Apps using Visual Studio Code](create-single-tenant-workflows-visual-studio-code.md).
107107

108+
> [!NOTE]
109+
>
110+
> The SAP built-in trigger is a non-polling, Azure Functions-based trigger, not a SOAP-based,
111+
> webhook trigger like the SAP managed trigger. So, the trigger doesn't include options to specify
112+
> a polling schedule. The trigger is called only when a message arrives, so no polling is necessary.
113+
>
114+
> To send a response following the SAP built-in trigger, make sure to add the
115+
> [**Respond to SAP server** action](/azure/logic-apps/connectors/built-in/reference/sap/#respond-to-sap-server.-(preview))
116+
> to your workflow, rather than use the **Response** action, which applies only to workflows that start with the **Request**
117+
> trigger named **When a HTTP request is received** and follow the Request-Response pattern.
118+
108119
1. In Visual Studio Code, open your Standard logic app and a blank workflow in the designer.
109120

110121
1. In the designer, [follow these general steps to find and add the SAP built-in trigger named **Register SAP RFC server for trigger**](create-workflow-with-trigger-or-action.md?tabs=standard#add-trigger).
111122

112-
The preview SAP built-in trigger, **Register SAP RFC server for trigger**, is an Azure Functions-based trigger, not a polling trigger, and doesn't include options to specify a polling schedule. The trigger is called only when a message arrives, so no polling is necessary.
113-
114123
1. If prompted, provide the following connection information for your on-premises SAP server. When you're done, select **Create**. Otherwise, continue with the next step to set up your SAP trigger.
115124

116125
| Parameter | Required | Description |
@@ -157,15 +166,23 @@ The following example workflow shows how to extract individual IDocs from a pack
157166

158167
1. Before you start, you need a Consumption or Standard logic app workflow with an SAP trigger. If your workflow doesn't already start with this trigger, follow the previous steps in this guide to [add the SAP trigger that can receive messages to your workflow](#receive-messages-sap).
159168

160-
1. To immediately reply to your SAP server with the SAP request status, [add a Response action to your workflow](../connectors/connectors-native-reqres.md#add-a-response-action).
169+
1. To immediately reply to your SAP server with the SAP request status, add the following response action, based on whether you use an SAP managed trigger or SAP built-in trigger:
161170

162-
As a best practice, add this Response action immediately after the trigger to free up the communication channel with your SAP server. In the Response action, use one of the following status codes (`statusCode`):
171+
- SAP managed trigger: For this trigger, [add a Response action to your workflow](../connectors/connectors-native-reqres.md#add-a-response-action).
163172

164-
| Status code | Description |
165-
|-------------|-------------|
166-
| **202 Accepted** | The request was accepted for processing, but processing isn't complete yet. |
167-
| **204 No Content** | The server successfully fulfilled the request, and there's no additional content to send in the response payload body. |
168-
| **200 OK** | This status code always contains a payload, even if the server generates a payload body of zero length. |
173+
In the Response action, use one of the following status codes (`statusCode`):
174+
175+
| Status code | Description |
176+
|-------------|-------------|
177+
| **202 Accepted** | The request was accepted for processing, but processing isn't complete yet. |
178+
| **204 No Content** | The server successfully fulfilled the request, and there's no additional content to send in the response payload body. |
179+
| **200 OK** | This status code always contains a payload, even if the server generates a payload body of zero length. |
180+
181+
- SAP built-in trigger: For this trigger, add the [**Respond to SAP server** action](/azure/logic-apps/connectors/built-in/reference/sap/#respond-to-sap-server.-(preview)) to your workflow.
182+
183+
> [!NOTE]
184+
>
185+
> As a best practice, add the response action immediately after the trigger to free up the communication channel with your SAP server.
169186
170187
1. Get the root namespace from the XML IDoc that your workflow receives from SAP.
171188

@@ -238,67 +255,6 @@ The following example workflow shows how to extract individual IDocs from a pack
238255

239256
If you use the SAP managed connector or ISE-versioned SAP connector, under the trigger in your workflow, set up a way to explicitly filter out any unwanted actions from your SAP server, based on the root node namespace in the received XML payload. You can provide a list (array) with a single or multiple SAP actions. By default, this array is empty, which means that your workflow receives all the messages from your SAP server without filtering. When you set up the array filter, the trigger receives messages only from the specified SAP action types and rejects all other messages from your SAP server. However, this filter doesn't affect whether the typing of the received payload is weak or strong. Any SAP action filtering happens at the level of the SAP Adapter for your on-premises data gateway. For more information, review [how to test sending IDocs to Azure Logic Apps from SAP](logic-apps-using-sap-connector.md#test-sending-idocs-from-sap).
240257

241-
If you can't send IDoc packets from SAP to your trigger, review the Transactional RFC (tRFC) call rejection message in the SAP tRFC (T-Code SM58) dialog box. In the SAP interface, you might get the following error messages, which are clipped due to the substring limits on the **Status Text** field.
242-
243-
### The RequestContext on the IReplyChannel was closed without a reply being sent
244-
245-
This error message means unexpected failures happen when the catch-all handler for the channel terminates the channel due to an error, and rebuilds the channel to process other messages.
246-
247-
To acknowledge that your workflow received the IDoc, [add a Response action](../connectors/connectors-native-reqres.md#add-a-response-action) that returns a **200 OK** status code. Leave the body empty and don't change or add to the headers. The IDoc is transported through tRFC, which doesn't allow for a response payload.
248-
249-
To reject the IDoc instead, respond with any HTTP status code other than **200 OK**. The SAP Adapter then returns an exception back to SAP on your behalf. You should only reject the IDoc to signal transport errors back to SAP, such as a misrouted IDoc that your application can't process. You shouldn't reject an IDoc for application-level errors, such as issues with the data contained in the IDoc. If you delay transport acceptance for application-level validation, you might experience negative performance due to blocking your connection from transporting other IDocs.
250-
251-
If you're receiving this error message and experience systemic failures calling Azure Logic Apps, check that you've configured the network settings for your on-premises data gateway service for your specific environment. For example, if your network environment requires the use of a proxy to call Azure endpoints, you need to configure your on-premises data gateway service to use your proxy. For more information, review [Proxy Configuration](/dotnet/framework/network-programming/proxy-configuration).
252-
253-
If you're receiving this error message and experience intermittent failures calling Azure Logic Apps, you might need to increase your retry count or also retry interval.
254-
255-
1. Check the SAP settings in your on-premises data gateway service configuration file named **Microsoft.PowerBI.EnterpriseGateway.exe.config**.
256-
257-
1. Under the `configuration` root node, add a `configSections` element, if none exist.
258-
259-
1. Under the `configSections` node, add a `section` element with the following attributes, if none exist: `name="SapAdapterSection" type="Microsoft.Adapters.SAP.Common.SapAdapterSection, Microsoft.Adapters.SAP.Common"`
260-
261-
> [!IMPORTANT]
262-
>
263-
> Don't change the attributes in existing `section` elements, if such elements already exist.
264-
265-
Your `configSections` element looks like the following version, if no other section or section group is declared in the gateway service configuration:
266-
267-
```xml
268-
<configSections>
269-
<section name="SapAdapterSection" type="Microsoft.Adapters.SAP.Common.SapAdapterSection, Microsoft.Adapters.SAP.Common"/>
270-
</configSections>
271-
```
272-
273-
1. Under the `configuration` root node, add an `SapAdapterSection` element, if none exists.
274-
275-
1. Under the `SapAdapterSection` node, add a `Broker` element with the following attributes, if none exist: `WebhookRetryDefaultDelay="00:00:00.10" WebhookRetryMaximumCount="2"`
276-
277-
> [!IMPORTANT]
278-
> Change the attributes for the `Broker` element, even if the element already exists.
279-
280-
The `SapAdapterSection` element looks like the following version, if no other element or attribute is declared in the SAP adapter configuration:
281-
282-
```xml
283-
<SapAdapterSection>
284-
<Broker WebhookRetryDefaultDelay="00:00:00.10" WebhookRetryMaximumCount="2" />
285-
</SapAdapterSection>
286-
```
287-
288-
The retry count setting looks like `WebhookRetryMaximumCount="2"`. The retry interval setting looks like `WebhookRetryDefaultDelay="00:00:00.10"` where the timespan format is `HH:mm:ss.ff`.
289-
290-
> [!NOTE]
291-
> For more information about the configuration file,
292-
> review [Configuration file schema for .NET Framework](/dotnet/framework/configure-apps/file-schema/).
293-
294-
1. Save your changes. Restart your on-premises data gateway.
295-
296-
### The segment or group definition E2EDK36001 was not found in the IDoc meta
297-
298-
This error message means expected failures happen with other errors. For example, the failure to generate an IDoc XML payload because its segments aren't released by SAP. As a result, the segment type metadata required for conversion is missing.
299-
300-
To have these segments released by SAP, contact the ABAP engineer for your SAP system.
301-
302258
## Set up asynchronous request-reply pattern for triggers
303259

304260
The SAP managed connector supports Azure's [asynchronous request-reply pattern](/azure/architecture/patterns/async-request-reply) for Azure Logic Apps triggers. You can use this pattern to create successful requests that would otherwise fail with the default synchronous request-reply pattern.
@@ -332,7 +288,7 @@ To create a logic app workflow that sends an IDoc to an SAP server and returns a
332288

333289
1. [Create a logic app workflow that's triggered by an HTTP request.](#add-request-trigger)
334290
1. [Add an SAP action to your workflow for sending an IDoc to SAP.](#add-sap-action-send-idoc)
335-
1. [Add a Response action to your workflow.](#add-response-action)
291+
1. [Add a response action to your workflow.](#add-response-action)
336292
1. [Create a remote function call (RFC) request-response pattern, if you're using an RFC to receive replies from SAP ABAP.](#create-rfc-request-response-pattern)
337293
1. [Test your workflow.](#test-workflow)
338294

@@ -380,7 +336,7 @@ Based on whether you have a Consumption workflow in multi-tenant Azure Logic App
380336

381337
### Add an SAP action to send an IDoc
382338

383-
Next, create an action to send your IDoc to SAP when the workflow's Request trigger fires. Based on whether you have a Consumption workflow in multi-tenant Azure Logic Apps or a Standard workflow in single-tenant Azure Logic Apps, follow the corresponding steps:
339+
Next, create an action to send your IDoc to SAP when the workflow's request trigger fires. Based on whether you have a Consumption workflow in multi-tenant Azure Logic Apps or a Standard workflow in single-tenant Azure Logic Apps, follow the corresponding steps:
384340

385341
### [Consumption](#tab/consumption)
386342

@@ -634,9 +590,9 @@ Z2XSK010003000000001017945375000110Z2XSK01000000108030 XR1 13.000 6795.00 CX
634590

635591
<a name="add-response-action"></a>
636592

637-
### Add a Response action
593+
### Add a response action
638594

639-
Now, set up your workflow to return the results from your SAP server to the original requestor. For this task, add the [Request built-in action named **Response**](../connectors/connectors-native-reqres.md#add-response) to your workflow and include the output from the SAP action.
595+
Now, set up your workflow to return the results from your SAP server to the original requestor. For this task, follow these steps:
640596

641597
### [Consumption](#tab/consumption)
642598

@@ -658,6 +614,12 @@ Now, set up your workflow to return the results from your SAP server to the orig
658614

659615
1. In the designer, [follow these general steps to find and add the Request built-in action named **Response**](create-workflow-with-trigger-or-action.md?tabs=standard#add-action).
660616

617+
> [!NOTE]
618+
>
619+
> If you use the SAP built-in trigger, which is an Azure Functions-based trigger, not a webhook trigger, add the
620+
> [**Respond to SAP server** action](/azure/logic-apps/connectors/built-in/reference/sap/#respond-to-sap-server.-(preview))
621+
> to your workflow and include the output from the SAP action.
622+
661623
1. In the **Response** action, for the **Body** parameter, select inside the edit box to open the dynamic content list appears.
662624

663625
1. From the dynamic content list, under **[IDoc] Send document to SAP**, find and select **Body**. The **Body** field contains the body output from the SAP action.
@@ -1010,6 +972,76 @@ You might get a similar error when SAP Application server or Message server name
1010972
10.0.1.9 SAPDBSERVER01.someguid.xx.xxxxxxx.cloudapp.net # SAP System Server VPN IP by fully qualified computer name
1011973
```
1012974

975+
<a name="errors-sending-idoc-packets"></a>
976+
977+
## Errors sending IDoc packets from SAP to your trigger
978+
979+
If you can't send IDoc packets from SAP to your trigger, review the Transactional RFC (tRFC) call rejection message in the SAP tRFC (T-Code SM58) dialog box. In the SAP interface, you might get the following error messages, which are clipped due to the substring limits on the **Status Text** field.
980+
981+
### The segment or group definition E2EDK36001 was not found in the IDoc meta
982+
983+
This error message means expected failures happen with other errors. For example, the failure to generate an IDoc XML payload because its segments aren't released by SAP. As a result, the segment type metadata required for conversion is missing.
984+
985+
To have these segments released by SAP, contact the ABAP engineer for your SAP system.
986+
987+
### The RequestContext on the IReplyChannel was closed without a reply being sent
988+
989+
For SAP managed connector and ISE-versioned SAP connector, this error message means unexpected failures happen when the catch-all handler for the channel terminates the channel due to an error, and rebuilds the channel to process other messages.
990+
991+
> [!NOTE]
992+
>
993+
> The SAP managed trigger and ISE-versioned SAP triggers are webhooks that use the SOAP-based SAP adapter. However, the SAP built-in trigger is an Azure Functions-based trigger that doesn't use a SOAP SAP adapter and doesn't get this error message.
994+
995+
- To acknowledge that your workflow received the IDoc, [add a Response action](../connectors/connectors-native-reqres.md#add-a-response-action) that returns a **200 OK** status code. Leave the body empty and don't change or add to the headers. The IDoc is transported through tRFC, which doesn't allow for a response payload.
996+
997+
- To reject the IDoc instead, respond with any HTTP status code other than **200 OK**. The SAP Adapter then returns an exception back to SAP on your behalf. You should only reject the IDoc to signal transport errors back to SAP, such as a misrouted IDoc that your application can't process. You shouldn't reject an IDoc for application-level errors, such as issues with the data contained in the IDoc. If you delay transport acceptance for application-level validation, you might experience negative performance due to blocking your connection from transporting other IDocs.
998+
999+
- If you receive this error message and experience systemic failures calling Azure Logic Apps, check that you've configured the network settings for your on-premises data gateway service for your specific environment. For example, if your network environment requires the use of a proxy to call Azure endpoints, you need to configure your on-premises data gateway service to use your proxy. For more information, review [Proxy Configuration](/dotnet/framework/network-programming/proxy-configuration).
1000+
1001+
- If you receive this error message and experience intermittent failures calling Azure Logic Apps, you might need to increase your retry count or also retry interval by following these steps:
1002+
1003+
1. Check the SAP settings in your on-premises data gateway service configuration file named **Microsoft.PowerBI.EnterpriseGateway.exe.config**.
1004+
1005+
1. Under the `configuration` root node, add a `configSections` element, if none exist.
1006+
1007+
1. Under the `configSections` node, add a `section` element with the following attributes, if none exist: `name="SapAdapterSection" type="Microsoft.Adapters.SAP.Common.SapAdapterSection, Microsoft.Adapters.SAP.Common"`
1008+
1009+
> [!IMPORTANT]
1010+
>
1011+
> Don't change the attributes in existing `section` elements, if such elements already exist.
1012+
1013+
Your `configSections` element looks like the following version, if no other section or section group is declared in the gateway service configuration:
1014+
1015+
```xml
1016+
<configSections>
1017+
<section name="SapAdapterSection" type="Microsoft.Adapters.SAP.Common.SapAdapterSection, Microsoft.Adapters.SAP.Common"/>
1018+
</configSections>
1019+
```
1020+
1021+
1. Under the `configuration` root node, add an `SapAdapterSection` element, if none exists.
1022+
1023+
1. Under the `SapAdapterSection` node, add a `Broker` element with the following attributes, if none exist: `WebhookRetryDefaultDelay="00:00:00.10" WebhookRetryMaximumCount="2"`
1024+
1025+
> [!IMPORTANT]
1026+
> Change the attributes for the `Broker` element, even if the element already exists.
1027+
1028+
The `SapAdapterSection` element looks like the following version, if no other element or attribute is declared in the SAP adapter configuration:
1029+
1030+
```xml
1031+
<SapAdapterSection>
1032+
<Broker WebhookRetryDefaultDelay="00:00:00.10" WebhookRetryMaximumCount="2" />
1033+
</SapAdapterSection>
1034+
```
1035+
1036+
The retry count setting looks like `WebhookRetryMaximumCount="2"`. The retry interval setting looks like `WebhookRetryDefaultDelay="00:00:00.10"` where the timespan format is `HH:mm:ss.ff`.
1037+
1038+
> [!NOTE]
1039+
> For more information about the configuration file, review [Configuration file schema for .NET Framework](/dotnet/framework/configure-apps/file-schema/).
1040+
1041+
1. Save your changes.
1042+
1043+
1. If you're using the on-premises data gateway, restart your gateway.
1044+
10131045
## Next steps
10141046

10151047
- [Generate schemas for artifacts in SAP](sap-generate-schemas-for-artifacts.md)

0 commit comments

Comments
 (0)