432 lines
15 KiB
Markdown
432 lines
15 KiB
Markdown
# Cloud Integration - Comprehensive Reference
|
|
|
|
**Source**: SAP BTP Integration Suite Documentation
|
|
**Documentation**: [https://github.com/SAP-docs/sap-btp-integration-suite/tree/main/docs/ci](https://github.com/SAP-docs/sap-btp-integration-suite/tree/main/docs/ci)
|
|
**Last Updated**: 2025-11-22
|
|
|
|
---
|
|
|
|
## Table of Contents
|
|
|
|
1. [Overview](#overview)
|
|
2. [Integration Flow Structure](#integration-flow-structure)
|
|
3. [Flow Steps Reference](#flow-steps-reference)
|
|
4. [Message Processing](#message-processing)
|
|
5. [Data Persistence](#data-persistence)
|
|
6. [Error Handling](#error-handling)
|
|
7. [Quality of Service](#quality-of-service)
|
|
8. [Best Practices](#best-practices)
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
Cloud Integration enables building and running integration flows across cloud, on-premise, and hybrid landscapes for:
|
|
- **A2A** (Application-to-Application)
|
|
- **B2B** (Business-to-Business)
|
|
- **B2G** (Business-to-Government)
|
|
|
|
**Key Concepts**:
|
|
- Integration flows define message processing pipelines
|
|
- Adapters connect to sender/receiver systems
|
|
- Steps transform, route, and process messages
|
|
- Security material protects sensitive data
|
|
|
|
**Documentation**: [https://github.com/SAP-docs/sap-btp-integration-suite/tree/main/docs/ci/Development](https://github.com/SAP-docs/sap-btp-integration-suite/tree/main/docs/ci/Development)
|
|
|
|
---
|
|
|
|
## Integration Flow Structure
|
|
|
|
### Core Components
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ Integration Flow │
|
|
├─────────────────────────────────────────────────────────────────┤
|
|
│ Sender ──► [Sender Adapter] ──► Integration Process │
|
|
│ │ │
|
|
│ ┌─────────┴─────────┐ │
|
|
│ │ Processing Steps │ │
|
|
│ │ - Transformations │ │
|
|
│ │ - Routing │ │
|
|
│ │ - External Calls │ │
|
|
│ │ - Persistence │ │
|
|
│ └─────────┬─────────┘ │
|
|
│ │ │
|
|
│ ──► [Receiver Adapter] ──► Receiver │
|
|
├─────────────────────────────────────────────────────────────────┤
|
|
│ Exception Subprocess (for error handling) │
|
|
└─────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### Component Types
|
|
|
|
| Component | Purpose |
|
|
|-----------|---------|
|
|
| **Sender/Receiver** | External systems connected to the flow |
|
|
| **Sender Channel** | Inbound adapter configuration |
|
|
| **Receiver Channel** | Outbound adapter configuration |
|
|
| **Integration Process** | Main message processing container |
|
|
| **Local Integration Process** | Reusable subprocess |
|
|
| **Exception Subprocess** | Error handling container |
|
|
|
|
---
|
|
|
|
## Flow Steps Reference
|
|
|
|
### Message Transformation Steps
|
|
|
|
#### Content Modifier
|
|
Enriches messages by modifying headers, properties, or body.
|
|
|
|
**Tabs**:
|
|
- **Message Header**: Headers sent to receiver systems
|
|
- **Exchange Property**: Internal flow properties (not transmitted)
|
|
- **Message Body**: Payload content
|
|
|
|
**Source Types**:
|
|
| Type | Description |
|
|
|------|-------------|
|
|
| Constant | Static value |
|
|
| Header | Reference Camel header |
|
|
| Property | Reference exchange property |
|
|
| XPath | Extract from XML using XPath |
|
|
| Expression | Camel Simple Expression |
|
|
| External Parameter | Externalized configuration |
|
|
| Local Variable | Flow-specific variable |
|
|
| Global Variable | Tenant-level variable |
|
|
| Number Range | Unique identifier |
|
|
|
|
**Example Expressions**:
|
|
```
|
|
${property.propertyName}
|
|
${header.headerName}
|
|
${in.body}
|
|
${exchangeId}
|
|
${camelId}
|
|
```
|
|
|
|
**Documentation**: [https://github.com/SAP-docs/sap-btp-integration-suite/blob/main/docs/ci/Development/define-content-modifier-8f04a70.md](https://github.com/SAP-docs/sap-btp-integration-suite/blob/main/docs/ci/Development/define-content-modifier-8f04a70.md)
|
|
|
|
#### Message Mapping
|
|
Graphical transformation between source and target structures.
|
|
|
|
**Types**:
|
|
- **Flow Step Mapping**: Defined within the flow
|
|
- **Mapping Artifact**: Reusable standalone artifact
|
|
|
|
**Functions**:
|
|
- Standard functions (string, arithmetic, date, boolean)
|
|
- Conversion functions
|
|
- Custom Groovy functions
|
|
|
|
**Documentation**: [https://github.com/SAP-docs/sap-btp-integration-suite/blob/main/docs/ci/Development/message-mapping-459ccdf.md](https://github.com/SAP-docs/sap-btp-integration-suite/blob/main/docs/ci/Development/message-mapping-459ccdf.md)
|
|
|
|
#### XSLT Mapping
|
|
XML transformation using XSLT stylesheets.
|
|
|
|
**Documentation**: [https://github.com/SAP-docs/sap-btp-integration-suite/blob/main/docs/ci/Development/create-xslt-mapping-5ce1f15.md](https://github.com/SAP-docs/sap-btp-integration-suite/blob/main/docs/ci/Development/create-xslt-mapping-5ce1f15.md)
|
|
|
|
#### Converters
|
|
| Converter | Function |
|
|
|-----------|----------|
|
|
| JSON to XML | Convert JSON payload to XML |
|
|
| XML to JSON | Convert XML payload to JSON |
|
|
| CSV to XML | Convert CSV data to XML |
|
|
| XML to CSV | Convert XML data to CSV |
|
|
| EDI to XML | Convert EDI formats to XML |
|
|
| XML to EDI | Convert XML to EDI formats |
|
|
|
|
### Routing Steps
|
|
|
|
#### Router
|
|
Routes messages based on conditions.
|
|
|
|
**Condition Types**:
|
|
- **XML**: XPath expressions
|
|
- **Non-XML**: Header/property conditions
|
|
|
|
**Operators (Non-XML)**:
|
|
```
|
|
=, !=, >, >=, <, <=
|
|
and, or
|
|
contains, not contains
|
|
in, not in
|
|
regex, not regex
|
|
```
|
|
|
|
**Best Practice**: Use same condition type (XML or Non-XML) for all branches.
|
|
|
|
**Documentation**: [https://github.com/SAP-docs/sap-btp-integration-suite/blob/main/docs/ci/Development/define-router-d7fddbd.md](https://github.com/SAP-docs/sap-btp-integration-suite/blob/main/docs/ci/Development/define-router-d7fddbd.md)
|
|
|
|
#### Filter
|
|
Removes messages not matching specified conditions.
|
|
|
|
#### Multicast
|
|
Sends message copies to multiple branches simultaneously.
|
|
|
|
#### Recipient List
|
|
Dynamically determines recipients at runtime.
|
|
|
|
### Splitting Steps
|
|
|
|
| Splitter Type | Use Case |
|
|
|---------------|----------|
|
|
| General Splitter | Split by XPath expression |
|
|
| Iterating Splitter | Process items one-by-one |
|
|
| IDoc Splitter | Split IDoc messages |
|
|
| EDI Splitter | Split EDI documents |
|
|
| Zip Splitter | Extract from ZIP archives |
|
|
| Tar Splitter | Extract from TAR archives |
|
|
| PKCS#7/CMS Splitter | Split encrypted messages |
|
|
|
|
**Difference**: General Splitter preserves envelope; Iterating Splitter strips envelope elements.
|
|
|
|
**Documentation**: [https://github.com/SAP-docs/sap-btp-integration-suite/blob/main/docs/ci/Development/define-splitter-dabea9d.md](https://github.com/SAP-docs/sap-btp-integration-suite/blob/main/docs/ci/Development/define-splitter-dabea9d.md)
|
|
|
|
### Aggregator
|
|
Combines split messages back together.
|
|
|
|
**Correlation**: Uses correlation expression to group related messages.
|
|
**Completion**: Timeout or condition-based.
|
|
|
|
### External Call Steps
|
|
|
|
| Step | Purpose |
|
|
|------|---------|
|
|
| Request Reply | Synchronous call with response |
|
|
| Send | Asynchronous fire-and-forget |
|
|
| Poll Enrich | Fetch data to enrich message |
|
|
| Content Enricher | Merge external data into message |
|
|
| Process Call | Call local integration process |
|
|
| Looping Process Call | Iterate with local process |
|
|
|
|
### Security Steps
|
|
|
|
| Step | Purpose |
|
|
|------|---------|
|
|
| Encryptor | PGP/PKCS#7 encryption |
|
|
| Decryptor | PGP/PKCS#7 decryption |
|
|
| Signer | XML/PKCS#7 signature |
|
|
| Verifier | Signature verification |
|
|
| Message Digest | Hash calculation |
|
|
|
|
---
|
|
|
|
## Message Processing
|
|
|
|
### Message Components
|
|
|
|
```
|
|
┌───────────────────────────────────────┐
|
|
│ Camel Message │
|
|
├───────────────────────────────────────┤
|
|
│ Headers │
|
|
│ ├─ CamelHttpMethod │
|
|
│ ├─ CamelHttpUri │
|
|
│ ├─ Content-Type │
|
|
│ └─ Custom headers... │
|
|
├───────────────────────────────────────┤
|
|
│ Body │
|
|
│ └─ Message payload │
|
|
├───────────────────────────────────────┤
|
|
│ Attachments │
|
|
│ └─ Binary attachments │
|
|
└───────────────────────────────────────┘
|
|
|
|
┌───────────────────────────────────────┐
|
|
│ Exchange Properties │
|
|
│ ├─ SAP_MessageProcessingLogID │
|
|
│ ├─ SAP_Receiver │
|
|
│ ├─ CamelSplitIndex │
|
|
│ └─ Custom properties... │
|
|
└───────────────────────────────────────┘
|
|
```
|
|
|
|
### Accessing in Scripts
|
|
|
|
```groovy
|
|
import com.sap.gateway.ip.core.customdev.util.Message
|
|
|
|
def Message processData(Message message) {
|
|
// Get body
|
|
def body = message.getBody(String.class)
|
|
|
|
// Get header
|
|
def contentType = message.getHeader("Content-Type", String.class)
|
|
|
|
// Get property
|
|
def logId = message.getProperty("SAP_MessageProcessingLogID")
|
|
|
|
// Process and transform body
|
|
def transformedBody = body.toUpperCase()
|
|
|
|
// Set body (use the transformed result)
|
|
message.setBody(transformedBody)
|
|
|
|
// Set header
|
|
message.setHeader("CustomHeader", "value")
|
|
|
|
// Set property
|
|
message.setProperty("CustomProperty", "value")
|
|
|
|
return message
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Data Persistence
|
|
|
|
### Data Stores
|
|
Persistent storage for messages/data.
|
|
|
|
**Operations**:
|
|
| Operation | Description |
|
|
|-----------|-------------|
|
|
| Write | Store entry with ID |
|
|
| Get | Retrieve by ID |
|
|
| Select | Query multiple entries |
|
|
| Delete | Remove entry |
|
|
|
|
**Scope**: Global (cross-flow) or Local (single flow)
|
|
|
|
**Use Cases**:
|
|
- Decouple sender and processing
|
|
- Store intermediate results
|
|
- Implement idempotent processing
|
|
|
|
### Variables
|
|
Store values during runtime.
|
|
|
|
**Types**:
|
|
- **Local Variable**: Single flow scope
|
|
- **Global Variable**: Tenant-wide scope
|
|
|
|
### JMS Queues
|
|
Transactional message storage.
|
|
|
|
**Benefits**:
|
|
- Guaranteed delivery
|
|
- Transaction support
|
|
- Decoupling
|
|
- Retry handling
|
|
|
|
**Limits**: 30 queues per tenant (standard plan)
|
|
|
|
---
|
|
|
|
## Error Handling
|
|
|
|
### Exception Subprocess
|
|
|
|
**Required Structure**:
|
|
```
|
|
Error Start Event → [Processing Steps] → End Event
|
|
```
|
|
|
|
**End Event Types**:
|
|
- **End Message**: Return fault message to sender
|
|
- **Error End**: Throw to default handler
|
|
- **Escalation**: Trigger escalation handling
|
|
|
|
**Accessing Errors**:
|
|
```
|
|
${exception.message}
|
|
${exception.stacktrace}
|
|
```
|
|
|
|
**Limitations**:
|
|
- Cannot catch Data Store duplicate key errors (transaction rollback)
|
|
- Local process exceptions not caught by main process
|
|
- Processing terminates after handling
|
|
|
|
**Documentation**: [https://github.com/SAP-docs/sap-btp-integration-suite/blob/main/docs/ci/Development/define-exception-subprocess-690e078.md](https://github.com/SAP-docs/sap-btp-integration-suite/blob/main/docs/ci/Development/define-exception-subprocess-690e078.md)
|
|
|
|
### Error Configuration
|
|
|
|
Configure adapter-level error handling:
|
|
- **Retry**: Automatic retry with intervals
|
|
- **Dead Letter**: Route failed messages
|
|
- **Alerting**: Trigger notifications
|
|
|
|
---
|
|
|
|
## Quality of Service
|
|
|
|
### Exactly-Once Delivery
|
|
|
|
Prevent duplicate processing:
|
|
|
|
1. **Idempotent Process Call**
|
|
- Check for duplicate message IDs
|
|
- Skip or return cached response
|
|
|
|
2. **ID Mapping**
|
|
- Map source ID to target ID
|
|
- Track processed messages
|
|
|
|
3. **JMS + Transaction**
|
|
- Transactional message processing
|
|
- Rollback on failure
|
|
|
|
### Idempotent Pattern
|
|
|
|
```
|
|
Sender → ID Mapping (Get) → Exists?
|
|
├─ Yes → Return cached response
|
|
└─ No → Process → ID Mapping (Store) → Response
|
|
```
|
|
|
|
---
|
|
|
|
## Best Practices
|
|
|
|
### Design Guidelines
|
|
|
|
1. **Keep flows readable**
|
|
- Use meaningful names
|
|
- Add comments
|
|
- Keep processes focused
|
|
|
|
2. **Apply security standards**
|
|
- Use credential artifacts (not hardcoded)
|
|
- Encrypt sensitive data
|
|
- Validate input
|
|
|
|
3. **Handle errors gracefully**
|
|
- Use exception subprocesses
|
|
- Log meaningful information
|
|
- Implement retry logic
|
|
|
|
4. **Optimize performance**
|
|
- Stream large payloads
|
|
- Minimize transformations
|
|
- Use appropriate adapters
|
|
|
|
### Scripting Guidelines
|
|
|
|
**Do**:
|
|
- Use SLF4J for logging
|
|
- Use `XmlSlurper.parse(Object)` for large XML
|
|
- Use `StringBuilder` for string operations
|
|
- Include comments
|
|
|
|
**Don't**:
|
|
- Write credentials to headers
|
|
- Use `TimeZone.setDefault()`
|
|
- Use `Eval()` class
|
|
- Bind variables unnecessarily
|
|
|
|
**Documentation**: [https://github.com/SAP-docs/sap-btp-integration-suite/blob/main/docs/ci/Development/general-scripting-guidelines-fcbf0f2.md](https://github.com/SAP-docs/sap-btp-integration-suite/blob/main/docs/ci/Development/general-scripting-guidelines-fcbf0f2.md)
|
|
|
|
---
|
|
|
|
## Related Documentation
|
|
|
|
- **Development Guide**: [https://github.com/SAP-docs/sap-btp-integration-suite/tree/main/docs/ci/Development](https://github.com/SAP-docs/sap-btp-integration-suite/tree/main/docs/ci/Development)
|
|
- **Operations Guide**: [https://github.com/SAP-docs/sap-btp-integration-suite/tree/main/docs/ci/Operations](https://github.com/SAP-docs/sap-btp-integration-suite/tree/main/docs/ci/Operations)
|
|
- **Security Guide**: [https://github.com/SAP-docs/sap-btp-integration-suite/tree/main/docs/ci/SecurityCF](https://github.com/SAP-docs/sap-btp-integration-suite/tree/main/docs/ci/SecurityCF)
|
|
- **Design Guidelines**: [https://github.com/SAP-docs/sap-btp-integration-suite/blob/main/docs/ci/Development/integration-flow-design-guidelines-6803389.md](https://github.com/SAP-docs/sap-btp-integration-suite/blob/main/docs/ci/Development/integration-flow-design-guidelines-6803389.md)
|