مواد پر جائیں
← بلاگ پر واپس جائیں

اس مضمون کا ماڈیول: Integration Flow Helper

Sample Payload سے SAP CPI میں XPath: XML اور JSON سے XML

Sample payload سے SAP CPI کے Content Modifier، Router، Filter اور Splitter کے لیے 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 پڑھتا ہے: order نمبر کو property میں، status کو Router کی شرط میں، اور دہرائے جانے والے node کو Splitter میں۔ اسے درست لکھنے کا تیز ترین طریقہ interface کی تفصیل سے نہیں بلکہ payload کے ایک حقیقی نمونے سے شروع کرنا ہے۔

یہ مضمون بتاتا ہے کہ iFlow میں XPath کہاں استعمال ہوتا ہے، XML نمونے سے paths کیسے نکالیں، namespaces کیسے کام کرتے ہیں، اور JSON payloads کیسے XML بنتے ہیں، بشمول اس کے کہ ان کے paths /root سے کیوں شروع ہوتے ہیں۔

iFlow میں XPath کہاں استعمال ہوتا ہے

  • Content Modifier: XPath source type والی header یا property row، body سے value پڑھتی ہے۔ Data type طے کرتا ہے کہ آپ کو متن ملے گا، جیسے java.lang.String، یا nodes۔
  • Router اور Filter: XML قسم کی شرائط XPath expressions ہوتی ہیں، مثلاً /Orders/Order/Status = 'OPEN'۔
  • Splitter: XPath expression دہرائے جانے والے node کو منتخب کرتا ہے، اور ہر node کے لیے ایک message بنتا ہے۔
  • Gather، Aggregator اور Content Enricher: XPath ان nodes کی طرف اشارہ کرتا ہے جنہیں جوڑنا، correlate کرنا یا enrich کرنا ہو۔

یہ سب اس step پر body جیسی ہو اسی پر چلتے ہیں۔ کسی mapping یا converter کے بعد ساخت بدلنے کے ساتھ paths بھی بدل جاتے ہیں۔

XML نمونے سے XPath تک

یہ رہا دو orders والا ایک چھوٹا نمونہ:

<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نمونے پر نتیجہ
/Orders/Order/Idہر order کی ID: ‏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 کی شکل میں declare کریں، اور اسے ہر 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 سے بدلا جاتا ہے۔ کئی members والے JSON object کا کوئی ایک root element نہیں ہوتا، اس لیے converter کا Add XML Root Element آپشن اسے ایک 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 کے تحت declare نہیں کیا گیا، یا prefix کے بغیر path۔
  • غلط case: XPath میں element اور attribute کے نام case-sensitive ہیں۔
  • ایسا path جو کسی mapping یا converter کے payload بدلنے سے پہلے کے لیے لکھا گیا ہو۔
  • /root step کے بغیر JSON path، یا root کا نام بدلنے کے بعد بھی default نام والا path۔
  • Content Modifier row میں غلط data type: java.lang.String متن واپس کرتا ہے، org.w3c.dom.NodeList nodes۔

بعد میں ان values سے body بنانی ہے؟ Simple expressions والا مضمون بتاتا ہے کہ ابھی پڑھی گئی properties کیسے استعمال کریں، اور Postman اور OpenAPI والا مضمون بتاتا ہے کہ REST API کو JSON body کیسے بھیجیں۔

Kitegra کیسے مدد کرتا ہے

Kitegra براؤزر ایکسٹینشن آپ کے نمونے سے paths لکھتی ہے۔ اسے XML یا JSON میں sample payload دیں، اور یہ Content Modifier کی XPath rows، Router، Filter، Splitter، Gather، Aggregator اور Content Enricher میں XPath expressions تجویز کرتی ہے۔ JSON نمونے کے لیے تجویز کردہ paths، converter کے root ‏/root سے شروع ہوتے ہیں۔

Sample payloads آپ کے براؤزر ہی میں رہتے ہیں: Kitegra انہیں کبھی محفوظ نہیں کرتا۔ ایکسٹینشن کبھی کسی iFlow کا مواد محفوظ، ڈپلائے یا ایڈٹ نہیں کرتی، اور آپ کا tenant صرف تب بدلتا ہے جب آپ چار نامزد اقدامات میں سے کسی ایک پر کلک کریں، جنہیں بند کیا جا سکتا ہے۔

کوئی XPath step اصل میں کون سی body وصول کرتا ہے، یہ دیکھنے کے لیے message کو مرحلہ وار trace کریں۔

Kitegra اکاؤنٹ کے بغیر یہ ہر ماڈیول میں 5 iFlows پر کام کرتی ہے۔ Free پلان میں 50، Starter میں 100 اور Pro میں 300 iFlows شامل ہیں؛ Business میں کوئی حد نہیں۔ پلانز کا موازنہ کریں۔

اپنے اگلے iFlow میں آزمائیں

پڑھیں کہ Kitegra، SAP Integration Suite کے ڈیزائنر میں کیا کرتا ہے، یا اسے Kitegra کی دوسری Chrome ایکسٹینشنز کے ساتھ دیکھیں۔

اکثر پوچھے جانے والے سوالات

SAP CPI میں XML سے value پڑھ کر property میں کیسے ڈالوں؟

Content Modifier میں XPath source type والی exchange property row شامل کریں، source value میں path لکھیں، مثلاً /Orders/Order/Id، اور data type کے طور پر java.lang.String رکھیں۔

میرا XPath کچھ واپس کیوں نہیں کرتا؟

سب سے عام وجوہات یہ ہیں: Namespace Mapping کے تحت declare نہ کیا گیا namespace، element کے نام میں غلط case، یا ایسا path جو mapping کے payload بدلنے سے پہلے کے لیے لکھا گیا ہو۔

کیا میں JSON payload پر XPath استعمال کر سکتا ہوں؟

براہ راست نہیں۔ پہلے JSON کو JSON to XML Converter سے بدلیں، پھر بدلے گئے XML پر XPath لکھیں۔

JSON کے XPaths /root سے کیوں شروع ہوتے ہیں؟

JSON to XML Converter بطور default root نام کا root element شامل کرتا ہے، کیونکہ کئی members والے JSON object کا کوئی ایک root نہیں ہوتا۔ اگر آپ اس کا نام بدلیں تو paths بھی بدلیں۔

JSON to XML Converter کے بعد JSON arrays کیسے نظر آتے ہیں؟

Array کا ہر item، array کے نام والا ایک دہرایا جانے والا element بن جاتا ہے، اس لیے دو entries والا items دو items elements بن جاتا ہے، جنہیں /root/items سے پڑھا جاتا ہے۔

XPath سے message کو ہر order کے لیے کیسے split کروں؟

دہرائے جانے والے node کے XPath کے ساتھ Splitter استعمال کریں، مثلاً /Orders/Order۔ ہر order اپنا الگ message بن جاتا ہے۔

ڈیزائنر چھوڑے بغیر iFlows پر کام کریں

Kitegra کو Chrome یا Microsoft Edge میں شامل کریں۔ مفت شروع کریں، کسی اکاؤنٹ کی ضرورت نہیں۔