মূল কনটেন্টে যান
← ব্লগে ফিরে যান

এই নিবন্ধের মডিউল: 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।

Sample payload থেকে SAP CPI XPath: XML এবং JSON থেকে XML

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>
XPathSample-এ ফলাফল
/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-1

Converter-এ 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।
  • /root step ছাড়া একটি JSON path, বা root-এর নাম বদলানোর পরেও default নাম।
  • Content Modifier row-এ ভুল data type: java.lang.String text ফেরত দেয়, org.w3c.dom.NodeList nodes ফেরত দেয়।

পরে এই 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 হয়ে যায়।

ডিজাইনার না ছেড়েই iFlows-এ কাজ করুন

Kitegra Chrome বা Microsoft Edge-এ যোগ করুন। ফ্রিতে শুরু করুন, কোনো অ্যাকাউন্ট লাগবে না।