BTP CPI iFlows Part 2: Adapters, Mapping and Message Processing Steps
Configure common adapters (HTTPS, OData, SOAP, IDoc, SFTP, Mail, JMS) and their key settings, use converters (JSON↔XML, CSV↔XML), Content Modifier, Request-Reply vs Send, and apply externalized parameters so iFlows move cleanly between tenants.
Explanation
📌 KEY POINTS
✅ Sender adapters: HTTPS, SOAP, IDoc, SFTP polling, JMS; receivers: OData, HTTP, SOAP, IDoc, SFTP, Mail and more.
✅ Converters switch formats (JSON↔XML, CSV↔XML) before mapping.
✅ Request-Reply waits for a response; Send is fire-and-forget (one-way).
✅ Adapter addresses, credentials and paths should be externalized.
⚠️ Mapping JSON directly without a defined schema/converter causes fragile, hard-to-debug flows.
━━━━━━━━━━━━━━━━━━━━
▶ WHERE WE ARE
Part 1 explained building blocks. Now adapters and steps.
━━━━━━━━━━━━━━━━━━━━
▶ 1. SENDER ADAPTERS
- HTTPS, SOAP, IDoc, SFTP poll, JMS.
━━━━━━━━━━━━━━━━━━━━
▶ 2. RECEIVER ADAPTERS
- OData, HTTP, SOAP, IDoc, SFTP, Mail.
━━━━━━━━━━━━━━━━━━━━
▶ 3. CONVERTERS
- JSON/XML/CSV.
━━━━━━━━━━━━━━━━━━━━
▶ 4. CALL STEPS
- Request-Reply vs Send.
━━━━━━━━━━━━━━━━━━━━
▶ 5. EXTERNALIZATION
- Parameters per tenant.
━━━━━━━━━━━━━━━━━━━━
▶ STEP BY STEP
- Build SFTP → CSV to XML → mapping → OData receiver.
- Externalize host, directory and credential.
- Deploy and verify.
✅ CHECKPOINT: file processed once and moved to archive.
Code example
===== EXAMPLE FLOW =====SFTP sender (poll every 5 min, post-processing: move to /archive) → CSV to XML converter → Message Mapping → Request-Reply → OData receiver (POST A_SalesOrder) ===== EXTERNALIZED ====={{sftp_host}} {{sftp_dir}} {{sftp_cred}} {{odata_url}} {{odata_cred}}Real project scenario
A project team saw duplicate sales orders every few minutes. The SFTP sender had no post-processing, so files were read again. Setting "move file" after processing fixed it.
Common mistakes
- No SFTP post-processing.
- Hand-written OData queries.
- Mapping JSON without conversion.
- Send when response needed.
- Hard-coded addresses.
Best practices
- Post-processing set.
- Query wizard.
- Converters first.
- Right call step.
- Externalize.
Interview angle
Questions: "Request-Reply vs Send?", "Which sender adapters exist?", "How do you handle JSON?"
Strong answer: adapters, converters, call steps, externalization, pitfalls.
Practice this lesson
Quick check
1. In an SAP Cloud Integration (CPI) iFlow, a developer needs to store a value in the Content Modifier so it can be referenced later using Groovy script via message.getProperty() but should NOT be automatically forwarded to the receiver system in the message header. Which Content Modifier action type should be used?
2. When configuring a receiver adapter in CPI that requires OAuth2 Client Credentials authentication, where should the client ID and client secret be stored?
3. Duplicate sales orders appear every few minutes from an SFTP-based iFlow. What is the likely cause?
Interview questions
1. Design an iFlow that picks up CSV files via SFTP and creates sales orders in S/4HANA.
Answer it in your own words first, then compare.
2. How would you apply CPI iFlows in a real SAP project? Walk through the design or implementation approach.
Answer it in your own words first, then compare.
Reference-verified: the steps are checked against official SAP documentation and tutorials, and object and field names in the sample code are checked for consistency. The code has not been compiled or run on an SAP system by ERPClimb. Syntax marked release-dependent varies by SAP release, so check it in your own system.
More lessons in this topic
- BTP CPI iFlows Part 1: What an iFlow Is — Message Model and Building Blocks
- BTP CPI iFlows Part 3: Exception Handling and Error Subprocesses
- BTP CPI iFlows Part 4: Message Mapping — Graphical, XSLT or Groovy
- BTP CPI iFlows Part 5: Router, Splitter, Gather, Multicast and Aggregator Patterns
- BTP CPI iFlows Part 6: JMS Queues, Data Store and Asynchronous Retry Patterns
- BTP CPI iFlows Part 7: Idempotency, Duplicate Detection and Exactly-Once Design
- BTP CPI iFlows Part 8: Performance Tuning — Payload Size, Streaming and Groovy