এই নিবন্ধের মডিউল: Integration Flow Helper
Sample payload থেকে SAP CPI XPath: XML এবং JSON থেকে XML
SAP CPI-এর Content Modifier, Router, Filter ও Splitter-এর জন্য sample payload থেকে XPath লিখুন: XML paths, namespaces, এবং JSON to XML Converter-এর root element দিয়ে JSON।

XPath হলো সেই উপায় যা দিয়ে SAP CPI একটি XML message থেকে value পড়ে: property-এর জন্য order number, Router condition-এর জন্য status, Splitter-এর জন্য পুনরাবৃত্ত node। এটি সঠিকভাবে লেখার দ্রুততম উপায় interface-এর বিবরণ থেকে নয়, payload-এর একটি আসল sample থেকে শুরু করা।
এই নিবন্ধে আছে iFlow-এ XPath কোথায় ব্যবহৃত হয়, XML sample থেকে কীভাবে paths বের করবেন, namespaces কীভাবে কাজ করে, এবং JSON payloads কীভাবে XML-এ রূপান্তরিত হয়, তাদের paths কেন /root দিয়ে শুরু হয় তা-সহ।
iFlow-এ XPath কোথায় ব্যবহৃত হয়
- Content Modifier: XPath source type-সহ একটি header বা property row body থেকে value পড়ে। Data type ঠিক করে আপনি text পাবেন, যেমন
java.lang.String, নাকি nodes। - Router ও Filter: XML conditions হলো XPath expressions, যেমন
/Orders/Order/Status = 'OPEN'। - Splitter: XPath expression পুনরাবৃত্ত node বেছে নেয়, প্রতিটি node-এর জন্য একটি message।
- Gather, Aggregator ও Content Enricher: XPath সেই nodes নির্দেশ করে যা একত্র, correlate বা enrich করা হয়।
এগুলো সবই সেই step-এ body যেমন আছে তার ওপর চলে। কোনো mapping বা converter-এর পরে structure-এর সঙ্গে paths-ও বদলে যায়।
XML sample থেকে XPath
এটি দুটি order-সহ একটি ছোট sample:
<Orders>
<Order status="OPEN">
<Id>4711</Id>
<Customer id="C-100">ACME</Customer>
<Amount currency="EUR">1250.00</Amount>
</Order>
<Order status="CLOSED">
<Id>4712</Id>
<Customer id="C-200">Globex</Customer>
<Amount currency="EUR">80.00</Amount>
</Order>
</Orders>| XPath | Sample-এ ফলাফল |
|---|---|
/Orders/Order/Id | সব order IDs: 4711 ও 4712 |
/Orders/Order[@status='OPEN']/Id | খোলা orders-এর IDs: 4711 |
/Orders/Order[1]/Customer/@id | প্রথম order-এর customer ID: C-100 |
count(/Orders/Order) | orders-এর সংখ্যা: 2 |
/Orders/Order[Amount > 1000] | 1000-এর বেশি পরিমাণের orders |
/ দিয়ে শুরু হওয়া path root থেকে শুরু হয়; //Id যেকোনো জায়গায় Id elements খুঁজে পায়, যা সুবিধাজনক কিন্তু বড় payloads-এ ধীর।
Namespaces
Payload-এর elements কোনো namespace-এ থাকলে prefix ছাড়া একটি path কিছুই খুঁজে পায় না। iFlow-এর Runtime Configuration-এ Namespace Mapping-এর অধীনে প্রতিটি namespace-এর জন্য একটি prefix ঘোষণা করুন, xmlns:ord=http://example.com/orders রূপে, এবং প্রতিটি step-এ সেটি ব্যবহার করুন: /ord:Orders/ord:Order/ord:Id।
আপনার mapping-এর prefix payload-এর prefix-এর সঙ্গে মিলতে হবে না; শুধু namespace URI মিলতে হবে। যে XPath স্পষ্ট দেখা যাচ্ছে এমন payload-এ কিছুই ফেরত দেয় না, তার কারণ সাধারণত একটি অনুপস্থিত Namespace Mapping।
JSON payloads: JSON to XML Converter দিয়ে XPath
XPath কাজ করে XML-এর ওপর, তাই একটি JSON message প্রথমে JSON to XML Converter দিয়ে রূপান্তর করা হয়। একাধিক member-সহ একটি JSON object-এর কোনো একক root element নেই, তাই converter-এর Add XML Root Element option এটিকে একটি root-এ মুড়ে দেয়, যার default নাম root। তখন paths শুরু হয় /root দিয়ে, আর array-এর প্রতিটি item array-এর নামে একটি পুনরাবৃত্ত element হয়ে যায়:
{
"orderId": "4711",
"customer": { "id": "C-100", "name": "ACME" },
"items": [
{ "sku": "A-1", "qty": 2 },
{ "sku": "B-7", "qty": 1 }
]
}
JSON to XML Converter (root element: root)
<root>
<orderId>4711</orderId>
<customer><id>C-100</id><name>ACME</name></customer>
<items><sku>A-1</sku><qty>2</qty></items>
<items><sku>B-7</sku><qty>1</qty></items>
</root>
/root/orderId 4711
/root/customer/name ACME
/root/items/sku A-1, B-7
/root/items[qty > 1]/sku A-1Converter-এ root-এর নাম বদলালে প্রতিটি path-এর প্রথম step-ও সেই অনুযায়ী বদলান। XPath steps-এর পরে আবার JSON-এ ফিরতে XML to JSON Converter ব্যবহার করুন।
XPath কেন কিছুই ফেরত দেয় না
- এমন namespace যা Namespace Mapping-এ ঘোষিত নয়, বা path-এ তার prefix নেই।
- ভুল case: XPath-এ element ও attribute-এর নাম case-sensitive।
- কোনো mapping বা converter বদলে দেওয়ার আগের payload-এর জন্য লেখা path।
/rootstep ছাড়া একটি JSON path, বা root-এর নাম বদলানোর পরেও default নাম।- Content Modifier row-এ ভুল data type:
java.lang.Stringtext ফেরত দেয়,org.w3c.dom.NodeListnodes ফেরত দেয়।
পরে এই values দিয়ে body তৈরি করবেন? Simple expressions নিয়ে নিবন্ধটি দেখায় সদ্য পড়া properties কীভাবে ব্যবহার করবেন, আর Postman ও OpenAPI নিয়ে নিবন্ধটি দেখায় কীভাবে একটি REST API-তে JSON body পাঠাবেন।
Kitegra কীভাবে সাহায্য করে
Kitegra browser এক্সটেনশন আপনার sample থেকে paths লেখে। এটিকে XML বা JSON-এ একটি sample payload দিন, আর এটি Content Modifier-এর XPath rows-এ এবং Router, Filter, Splitter, Gather, Aggregator ও Content Enricher-এ XPath expressions সাজেস্ট করবে। JSON sample-এর জন্য সাজেস্ট করা paths শুরু হয় converter-এর root, /root, থেকে।
Sample payloads আপনার browser-এই থাকে: Kitegra কখনো সেগুলো সংরক্ষণ করে না। এক্সটেনশনটি কখনো কোনো iFlow-এর content সংরক্ষণ, deploy বা edit করে না, এবং আপনার tenant কেবল তখনই বদলায় যখন আপনি নাম দেওয়া চারটি action-এর একটিতে ক্লিক করেন, যেগুলো বন্ধও করা যায়।
একটি XPath step আসলে কোন body পায় তা দেখতে message-টি step by step trace করুন।
Kitegra অ্যাকাউন্ট ছাড়া এটি প্রতিটি মডিউলে 5টি iFlow-এ কাজ করে। Free প্ল্যানে 50, Starter-এ 100 এবং Pro-তে 300টি iFlow অন্তর্ভুক্ত; Business-এ কোনো সীমা নেই। প্ল্যানগুলো তুলনা করুন।
আপনার পরবর্তী iFlow-এ চেষ্টা করুন
SAP Integration Suite ডিজাইনারে Kitegra কী করে তা পড়ুন, অথবা Kitegra-এর অন্য Chrome এক্সটেনশনগুলোর পাশে এটি দেখুন।
সাধারণ জিজ্ঞাসা
SAP CPI-তে XML থেকে একটি value কীভাবে property-তে পড়ব?
Content Modifier-এ একটি exchange property row যোগ করুন, যার source type XPath, source value-তে path, যেমন /Orders/Order/Id, এবং data type java.lang.String।
আমার XPath কেন কিছুই ফেরত দেয় না?
সবচেয়ে সাধারণ কারণ হলো Namespace Mapping-এ ঘোষিত নয় এমন namespace, element-এর নামে ভুল case, বা এমন path যা কোনো mapping payload বদলানোর আগের জন্য লেখা।
JSON payload-এ কি XPath ব্যবহার করা যায়?
সরাসরি নয়। প্রথমে JSON to XML Converter দিয়ে JSON রূপান্তর করুন, তারপর রূপান্তরিত XML-এর ওপর XPath লিখুন।
JSON-এর XPaths কেন /root দিয়ে শুরু হয়?
JSON to XML Converter default হিসেবে root নামে একটি root element যোগ করে, কারণ একাধিক member-সহ JSON object-এর কোনো একক root নেই। নাম বদলালে paths-ও বদলান।
JSON to XML Converter-এর পরে JSON arrays দেখতে কেমন হয়?
Array-এর প্রতিটি item array-এর নামে একটি পুনরাবৃত্ত element হয়ে যায়, তাই দুটি entry-সহ items হয়ে যায় দুটি items element, যা /root/items দিয়ে পড়া হয়।
XPath দিয়ে message-কে প্রতিটি order অনুযায়ী কীভাবে split করব?
পুনরাবৃত্ত node-এর XPath দিয়ে একটি Splitter ব্যবহার করুন, যেমন /Orders/Order। প্রতিটি order নিজস্ব একটি message হয়ে যায়।