Skip to content

Commit 2d875a9

Browse files
authored
Formatting, clarity, and grammar edits
1 parent 894102e commit 2d875a9

File tree

1 file changed

+92
-84
lines changed
  • articles/logic-apps/connectors

1 file changed

+92
-84
lines changed

articles/logic-apps/connectors/sap.md

Lines changed: 92 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ author: daviburg
77
ms.author: daviburg
88
ms.reviewer: estfan, azla
99
ms.topic: how-to
10-
ms.date: 04/25/2025
10+
ms.date: 04/28/2025
1111

1212
#customer intent: As a developer, I want to know the prerequisites and details about using SAP with Azure Logic Apps, so I can connect to an SAP server from my Consumption or Standard workflow.
1313
---
@@ -70,6 +70,12 @@ The SAP built-in connector significantly differs from the SAP managed connector
7070

7171
Instead, the SAP built-in connector communicates directly with your SAP server in the integrated virtual network, which avoids hops, latency, and failure points for a network gateway. Make sure that you upload or deploy the non-redistributable SAP client libraries with your logic app workflow application. For more information, see the [Prerequisites](#prerequisites) in this guide.
7272

73+
* Standard logic app workflows require and use the SAP NCo 3.1 client library, not the SAP NCo 3.0 version. For more information, see [Prerequisites](#prerequisites).
74+
75+
* By default, the SAP built-in connector operations are *stateless*. However, you can [enable stateful mode (affinity) for these operations](../../connectors/enable-stateful-affinity-built-in-connectors.md).
76+
77+
In stateful mode, the SAP built-in connector supports high availability and horizontal scale-out configurations. By comparison, the SAP managed connector has restrictions regarding the on-premises data gateway limited to a single instance for triggers and to clusters only in failover mode for actions. For more information, see [SAP managed connector - Known issues and limitations](#known-issues-limitations).
78+
7379
* Payload sizes up to 100 MB are supported, so you don't have to use a blob URI for large requests.
7480

7581
* Specific actions are available for **Call BAPI**, **Call RFC**, and **Send IDoc**. These dedicated actions provide a better experience for stateful BAPIs, RFC transactions, and IDoc deduplication, and don't use the older SOAP Windows Communication Foundation (WCF) messaging model.
@@ -82,141 +88,143 @@ The SAP built-in connector significantly differs from the SAP managed connector
8288

8389
This capability addresses a problem with the SAP managed connector where the outcome from the autocommit behavior is silent and observable only through logs.
8490

91+
* Standard logic app workflows provide application settings where you can specify a Personal Security Environment (PSE) and PSE password.
92+
93+
This change prevents you from uploading multiple PSE files, which isn't supported and results in SAP connection failures. In Consumption logic app workflows, the SAP managed connector lets you specify these values through connection parameters, which allowed you to upload multiple PSE files and isn't supported, causing SAP connection failures.
94+
8595
* A longer time-out compared to the SAP managed connector.
8696

8797
The SAP built-in connector natively runs on the Azure Logic Apps runtime, unlike the SAP managed connector that runs on the shared, global, multitenant Azure infrastructure. This design difference means that you can change the default time-out value on the Standard logic app resource by using the **host.json** settings named [**Runtime.FlowRunRetryableActionJobCallback.ActionJobExecutionTimeout**](/azure/logic-apps/edit-app-settings-host-settings?tabs=azure-portal#run-actions) and [**functionTimeout**](/azure/logic-apps/edit-app-settings-host-settings?tabs=azure-portal#run-actions).
8898

8999
The capability to adjust the time-out value means that you can use the SAP built-in connector as-is for long-running synchronous requests. Otherwise, these requests have to use the action pattern for long-running webhook-based requests in the SAP managed connector, which has a much shorter two-minute time-out for synchronous requests.
90100

91-
* By default, the SAP built-in connector operations are *stateless*. However, you can [enable stateful mode (affinity) for these operations](../../connectors/enable-stateful-affinity-built-in-connectors.md).
92-
93-
In stateful mode, the SAP built-in connector supports high availability and horizontal scale-out configurations. By comparison, the SAP managed connector has restrictions regarding the on-premises data gateway limited to a single instance for triggers and to clusters only in failover mode for actions. For more information, see [SAP managed connector - Known issues and limitations](#known-issues-limitations).
94-
95-
* Standard logic app workflows require and use the SAP NCo 3.1 client library, not the SAP NCo 3.0 version. For more information, see [Prerequisites](#prerequisites).
96-
97-
* Standard logic app workflows provide application settings where you can specify a Personal Security Environment (PSE) and PSE password.
101+
* Where to find the **`guid`** and **`tId`** parameters
98102

99-
This change prevents you from uploading multiple PSE files, which isn't supported and results in SAP connection failures. In Consumption logic app workflows, the SAP managed connector lets you specify these values through connection parameters, which allowed you to upload multiple PSE files and isn't supported, causing SAP connection failures.
103+
The XML parameters for **`guid`** and **`tId`** are no longer available in input and output XML payloads. Instead, you can find the parameters as explicit parameters in the workflow designer on the **Parameters** tab and as dynamic output expressions.
100104

101-
* Changes to `guid` and `tId` Handling
105+
* Handling empty XML elements
102106

103-
The XML parameters for `guid` and `tId` are no longer available within the input or output XML payloads.
104-
Instead, they are now exposed as explicit parameters in the Logic App Designer's input pane and as dynamic output expressions.
107+
- SAP built-in connector: An empty XML element is treated as an SAP parameter with an explicit empty value or default value.
105108

106-
* Difference in how empty XML elements are handled
109+
- SAP managed connector: An empty XML element is interpreted as a missing parameter and isn't sent to the SAP function.
107110

108-
- **BuiltIn SAP Connector**: An empty XML element is treated as a SAP parameter with an explicit empty value or default value.
109-
- **Managed SAP Connector**: An empty XML element is interpreted as a missing parameter, and the parameter is not sent to the SAP function.
111+
**Example**
110112

111-
**Example**
112-
Given the following SAP RFC input payload:
113+
Suppose you have the following SAP RFC input payload:
113114

114115
```xml
115116
<RfcName>
116-
<Parameter></Parameter>
117+
<Parameter></Parameter>
117118
</RfcName>
118119
```
119-
- In Logic App Standard built-in connector, the Parameter is included in the SAP RFC call with an explicit empty value ('').
120-
121-
- In the Managed SAP Connector, the Parameter is omitted entirely from the SAP RFC call.
122120

123-
* Trimming of whitespace characters.
121+
- In SAP built-in connector, the SAP RFC call includes the parameter as an explicit empty value ('').
122+
123+
- In the SAP managed connector, the SAP RFC call omits the parameter entirely.
124+
125+
* Trimming whitespace characters
126+
127+
The SAP built-in connector automatically trims whitespace characters in XML elements.
124128

125-
The Built-in SAP Connector in Logic App Standard automatically trims whitespace characters within XML elements.
129+
For example, suppose you have the following input:
126130

127-
For example, the following input:
128131
```xml
129132
<RfcName>
130-
<Parameter> </Parameter>
133+
<Parameter> </Parameter>
131134
</RfcName>
132135
```
133-
would result in the SAP RFC function call with the Parameter value interpreted as an empty string ('').
134136

135-
To preserve whitespace characters, you can explicitly specify the `xml:space="preserve"` attribute on the element. For example:
137+
In the SAP RFC function call, the whitespace in the **Parameter** value is treated as an empty string ('') and is trimmed. To make sure that the call keeps whitespace exactly as provided in the payload, include the **`xml:space="preserve"`** attribute with the element, for example:
138+
136139
```xml
137140
<RfcName>
138-
<Parameter xml:space="preserve"> </Parameter>
141+
<Parameter xml:space="preserve"> </Parameter>
139142
</RfcName>
140143
```
141-
Using `xml:space="preserve"` ensures that the connector retains the whitespace characters exactly as provided in the payload.
142144

143-
* IDoc Format Validation
145+
* Validating IDoc format
144146

145-
The **Built-in SAP Connector** strictly validates the input payload against the `IDoc Format` specified in the action inputs.
146-
If there is a mismatch between the provided `IDoc Format` and the structure of the input XML IDoc, the built-in connector will throw an error.
147-
148-
In contrast, the **Managed SAP Connector** infers the IDoc format directly from the input payload, allowing more flexibility without requiring an exact format match.
147+
- SAP built-in connector: Strictly validates the input payload against the **`IDoc Format`** specified in the action inputs. If a mismatch exists between the provided **`IDoc Format`** and the input XML IDoc structure, the built-in connector throws an error.
148+
149+
- SAP managed connector: Direclty infers the IDoc format from the input payload, allowing for more flexibility by not requiring an exactly matching format.
150+
151+
* Handling BizTalk XML group segments
149152

150-
* Difference in handling BizTalk XML group segments.
153+
- SAP built-in connector**: Strictly follows the schema defined by the schema generator.
151154

152-
- **Built-in SAP Connector**: Strictly follows the schema defined by the Schema Generator. A group segment (a segment ending with `GRP`) must define its child segments only once per instance. To represent multiple items, multiple instances of the group segment should be created, each containing its own set of child segments.
153-
- **Managed SAP Connector**: Allows multiple repetitions of child elements within a single group segment. These are interpreted as multiple instances of the group segment.
155+
- A segment that ends with **`GRP`** (group segment) must define any child segments only one time per instance.
154156

155-
**Example Behavior**
156-
The following structure, where multiple sequences of child elements are grouped under a single group segment, would be **rejected** by the Built-in SAP connector in Logic App Standard:
157+
- To represent multiple sets of child segments, create multiple instances of the group segment so that each instance contains its own individual set of child segments.
158+
159+
- SAP managed connector: Allows multiple repetitions of child elements within a single group segment. These repetitions are interpreted as multiple instances of the group segment.
160+
161+
**Example behavior**
162+
163+
In the following structure, a single group segment defines multiple sequences of child elements, which is rejected by the SAP built-in connector:
157164

158165
```xml
159166
<ns2:E2EDKT1002GRP>
160-
<ns2:E2EDKT1002>
161-
<ns2:DATAHEADERCOLUMN_SEGNAM>E2EDKT1002</ns2:DATAHEADERCOLUMN_SEGNAM>
162-
<ns2:TDID>FD</ns2:TDID>
163-
</ns2:E2EDKT1002>
164-
<ns2:E2EDKT2001>
165-
<ns2:DATAHEADERCOLUMN_SEGNAM>E2EDKT2001</ns2:DATAHEADERCOLUMN_SEGNAM>
166-
<ns2:TDLINE>CRSD</ns2:TDLINE>
167-
</ns2:E2EDKT2001>
168-
<ns2:E2EDKT1002>
169-
<ns2:DATAHEADERCOLUMN_SEGNAM>E2EDKT1002</ns2:DATAHEADERCOLUMN_SEGNAM>
170-
<ns2:TDID>DTP</ns2:TDID>
171-
</ns2:E2EDKT1002>
172-
<ns2:E2EDKT2001>
173-
<ns2:DATAHEADERCOLUMN_SEGNAM>E2EDKT2001</ns2:DATAHEADERCOLUMN_SEGNAM>
174-
<ns2:TDLINE>OriginalRelease:0|</ns2:TDLINE>
175-
<ns2:TDFORMAT>/</ns2:TDFORMAT>
176-
</ns2:E2EDKT2001>
167+
<ns2:E2EDKT1002>
168+
<ns2:DATAHEADERCOLUMN_SEGNAM>E2EDKT1002</ns2:DATAHEADERCOLUMN_SEGNAM>
169+
<ns2:TDID>FD</ns2:TDID>
170+
</ns2:E2EDKT1002>
171+
<ns2:E2EDKT2001>
172+
<ns2:DATAHEADERCOLUMN_SEGNAM>E2EDKT2001</ns2:DATAHEADERCOLUMN_SEGNAM>
173+
<ns2:TDLINE>CRSD</ns2:TDLINE>
174+
</ns2:E2EDKT2001>
175+
<ns2:E2EDKT1002>
176+
<ns2:DATAHEADERCOLUMN_SEGNAM>E2EDKT1002</ns2:DATAHEADERCOLUMN_SEGNAM>
177+
<ns2:TDID>DTP</ns2:TDID>
178+
</ns2:E2EDKT1002>
179+
<ns2:E2EDKT2001>
180+
<ns2:DATAHEADERCOLUMN_SEGNAM>E2EDKT2001</ns2:DATAHEADERCOLUMN_SEGNAM>
181+
<ns2:TDLINE>OriginalRelease:0|</ns2:TDLINE>
182+
<ns2:TDFORMAT>/</ns2:TDFORMAT>
183+
</ns2:E2EDKT2001>
177184
</ns2:E2EDKT1002GRP>
178185
```
179-
Instead, the following structure is valid for the Built-in SAP connector, where each instance of the `E2EDKT1002GRP` group contains only a single sequence of child segments:
186+
187+
Instead, use following structure for the SAP built-in connector where each **`E2EDKT1002GRP`** group instance contains only a single sequence of child segments:
180188

181189
```xml
182190
<ns2:E2EDKT1002GRP>
183-
<ns2:E2EDKT1002>
184-
<ns2:DATAHEADERCOLUMN_SEGNAM>E2EDKT1002</ns2:DATAHEADERCOLUMN_SEGNAM>
185-
<ns2:TDID>FD</ns2:TDID>
186-
</ns2:E2EDKT1002>
187-
<ns2:E2EDKT2001>
188-
<ns2:DATAHEADERCOLUMN_SEGNAM>E2EDKT2001</ns2:DATAHEADERCOLUMN_SEGNAM>
189-
<ns2:TDLINE>CRSD</ns2:TDLINE>
190-
</ns2:E2EDKT2001>
191+
<ns2:E2EDKT1002>
192+
<ns2:DATAHEADERCOLUMN_SEGNAM>E2EDKT1002</ns2:DATAHEADERCOLUMN_SEGNAM>
193+
<ns2:TDID>FD</ns2:TDID>
194+
</ns2:E2EDKT1002>
195+
<ns2:E2EDKT2001>
196+
<ns2:DATAHEADERCOLUMN_SEGNAM>E2EDKT2001</ns2:DATAHEADERCOLUMN_SEGNAM>
197+
<ns2:TDLINE>CRSD</ns2:TDLINE>
198+
</ns2:E2EDKT2001>
191199
</ns2:E2EDKT1002GRP>
192200
<ns2:E2EDKT1002GRP>
193-
<ns2:E2EDKT1002>
194-
<ns2:DATAHEADERCOLUMN_SEGNAM>E2EDKT1002</ns2:DATAHEADERCOLUMN_SEGNAM>
195-
<ns2:TDID>DTP</ns2:TDID>
196-
</ns2:E2EDKT1002>
197-
<ns2:E2EDKT2001>
198-
<ns2:DATAHEADERCOLUMN_SEGNAM>E2EDKT2001</ns2:DATAHEADERCOLUMN_SEGNAM>
199-
<ns2:TDLINE>OriginalRelease:0|</ns2:TDLINE>
200-
<ns2:TDFORMAT>/</ns2:TDFORMAT>
201-
</ns2:E2EDKT2001>
201+
<ns2:E2EDKT1002>
202+
<ns2:DATAHEADERCOLUMN_SEGNAM>E2EDKT1002</ns2:DATAHEADERCOLUMN_SEGNAM>
203+
<ns2:TDID>DTP</ns2:TDID>
204+
</ns2:E2EDKT1002>
205+
<ns2:E2EDKT2001>
206+
<ns2:DATAHEADERCOLUMN_SEGNAM>E2EDKT2001</ns2:DATAHEADERCOLUMN_SEGNAM>
207+
<ns2:TDLINE>OriginalRelease:0|</ns2:TDLINE>
208+
<ns2:TDFORMAT>/</ns2:TDFORMAT>
209+
</ns2:E2EDKT2001>
202210
</ns2:E2EDKT1002GRP>
203211
```
204212

205-
* SAP Trigger Behavior
213+
* Built-in trigger behavior
206214

207-
- **Namespace Construction**:
208-
The SAP trigger uses the release version from the SAP Fetch Metadata response to construct the namespace in the trigger payload.
209-
To override this and use the release version specified in the control record instead, set the `EnforceControlRecordNamespace` property to `true` in the trigger input parameters within the Logic App Designer.
210-
211-
- **Handling Empty Elements**:
212-
By default, the SAP trigger does not include empty elements in the output payload.
213-
To include empty nodes in the trigger output, set the `EnableEmptyXmlNode` property to `true` in the trigger input parameters within the Logic App Designer.
215+
- Namespace construction
216+
217+
To construct the namespace in the SAP trigger payload, the trigger uses the released version from the SAP Fetch Metadata response. To override this behvior and use the release version specified in the control record instead, go to the workflow designer, and in the trigger input parameters, set the **`EnforceControlRecordNamespace`** property to **`true`**.
218+
219+
- Handling empty elements
220+
221+
By default, the SAP trigger doesn't include empty elements in the output payload. To include empty elements in the trigger output, go to the workflow designer, and in the trigger input parameters, set the **`EnableEmptyXmlNode`** property to **`true`**.
214222

215-
* **Generate Schema** action
223+
* Built-in **Generate Schema** action
216224

217225
* You can select from multiple operation types, such as BAPI, IDoc, RFC, and tRFC, versus the same action in the SAP managed connector, which uses the **SapActionUris** parameter and a file system picker experience.
218226

219-
* You can directly provide a parameter name as a custom value. For example, you can specify the **RFC Name** parameter from the **Call RFC** action. By comparison, in the SAP managed connector, you had to provide a complex **Action URI** parameter name.
227+
* You can directly provide a parameter name as a custom value. For example, you can specify the **RFC Name** parameter from the **Call RFC** action. By comparison, in the SAP managed connector, you have to provide a complex **Action URI** parameter name.
220228

221229
* By design, this action doesn't support generating multiple schemas for RFCs, BAPIs, or IDocs in single action execution, which the SAP managed connector supports. This capability change now prevents attempts to send large amounts of content in a single call.
222230

0 commit comments

Comments
 (0)