اس مضمون کا ماڈیول: Integration Flow Helper
SAP CPI میں ProcessDirect اور JMS: iFlows کے درمیان headers بھیجنا
SAP CPI میں ProcessDirect اور JMS سے iFlows کے درمیان headers اور exchange properties کیسے بھیجیں: ملتے جلتے addresses اور queues، کیا پار جاتا ہے، اور debug کیسے کریں۔

SAP CPI میں بڑی integrations کئی iFlows میں بانٹی جاتی ہیں: ایک وصول کرتا ہے، دوسرے enrich، map یا send کرتے ہیں۔ ProcessDirect اسی tenant پر دوسرے iFlow کو براہ راست call کرتا ہے؛ JMS، message کو ایک queue کے حوالے کرتا ہے جسے کوئی دوسرا iFlow بعد میں پڑھتا ہے۔ دونوں صورتوں میں سوال ایک ہی ہے: میرے کون سے headers اور properties دوسری طرف پہنچتے ہیں؟
یہ مضمون بتاتا ہے کہ دونوں connections کیسے سیٹ کیے جاتے ہیں، ان کے پار کیا جاتا ہے اور کیا نہیں، اور یہ کیسے معلوم کریں کہ دو iFlows کے درمیان کوئی value کیوں غائب ہو گئی۔
ProcessDirect: ایک iFlow کا دوسرے کو call کرنا
Call کرنے والا iFlow، یعنی producer، ایک ProcessDirect receiver adapter استعمال کرتا ہے۔ Call کیا جانے والا iFlow، یعنی consumer، ایک ProcessDirect sender adapter سے شروع ہوتا ہے۔ دونوں میں Address field ہوتا ہے، اور call تبھی جڑتی ہے جب address دونوں طرف بالکل ایک جیسا ہو، مثلاً:
Producer iFlow -> ProcessDirect receiver Address: /orders/enrich
Consumer iFlow <- ProcessDirect sender Address: /orders/enrichدونوں iFlows ایک ہی tenant پر چلتے ہیں، اور producer کے call کرنے سے پہلے consumer کا ڈپلائے ہونا ضروری ہے۔ کسی address پر صرف ایک ڈپلائے شدہ consumer سن سکتا ہے۔ Request-Reply step کے ساتھ استعمال ہو تو consumer کا آخری message، reply کے طور پر producer کو واپس آتا ہے۔
ProcessDirect کے پار کیا جاتا ہے اور کیا نہیں
Consumer کو message body اور message headers ملتے ہیں۔ Exchange properties پیچھے رہ جاتی ہیں: consumer ایک نیا exchange شروع کرتا ہے جس میں producer کی کوئی property نہیں ہوتی۔
کوئی property بھیجنے کے لیے، call سے ذرا پہلے Content Modifier میں اسے header میں کاپی کریں، مثلاً orderId نام کا header، Property source type اور orderId value کے ساتھ۔ Consumer میں اگر آپ properties کے ساتھ کام کرنا پسند کرتے ہیں تو اسے واپس property میں کاپی کر لیں۔ جو headers، consumer کو نہیں ملنے چاہئیں، خاص طور پر بڑے، انہیں ہٹا دیں۔
JMS: queue کے ذریعے message بھیجنا
JMS میں producer کا JMS receiver adapter، message کو ایک queue میں لکھتا ہے، اور اسی Queue Name پر JMS sender adapter والا consumer iFlow اسے پڑھتا ہے۔ دونوں iFlows ایک دوسرے سے آزاد ہوتے ہیں: producer انتظار نہیں کرتا، اور consumer ناکام ہونے والے messages کو دوبارہ آزماتا ہے۔
- Headers، message کے ساتھ محفوظ ہوتے ہیں اور consumer تک پہنچتے ہیں۔
- Exchange properties تب تک محفوظ نہیں ہوتیں جب تک JMS receiver میں Transfer Exchange Properties آن نہ ہو۔
- Message کے ساتھ جو کچھ بھی محفوظ ہوتا ہے اس کی سائز کی حد ہے، اس لیے headers اور منتقل کی گئی properties چھوٹی رکھیں۔
- Consumer میں
SAPJMSRetriesheader بتاتا ہے کہ message کو کتنی بار دوبارہ آزمایا گیا ہے۔
ساتھ ساتھ موازنہ
| ProcessDirect | JMS | |
|---|---|---|
| iFlows کے درمیان ربط | دونوں پر ایک ہی Address | دونوں پر ایک ہی Queue Name |
| Call | براہ راست، reply واپس کر سکتی ہے | queue کے ذریعے asynchronous |
| Message body | جاتی ہے | جاتی ہے |
| Headers | جاتے ہیں | جاتے ہیں |
| Exchange properties | نہیں جاتیں: انہیں headers میں کاپی کریں | صرف Transfer Exchange Properties کے ساتھ جاتی ہیں |
Header کے نام دونوں طرف case-insensitive ہیں، لیکن exchange property کے نام case-sensitive ہیں، اس لیے consumer میں بحال کی گئی property کی spelling بالکل ویسی ہونی چاہیے جیسی اگلے steps اسے پڑھتے ہیں۔
جب کوئی value نہ پہنچے
- Addresses یا queue names کا ایک ایک حرف سے موازنہ کریں، شروع کے slash اور case سمیت۔
- چیک کریں کہ consumer ڈپلائے ہو چکا ہے اور چل رہا ہے (started)۔
- چیک کریں کہ کہیں value ایک property تو نہیں تھی: ProcessDirect کے پار یہ کبھی نہیں پہنچتی، JMS کے پار صرف Transfer Exchange Properties کے ساتھ۔
- چیک کریں کہ producer سے نکلتے وقت کوئی Content Modifier اس header کو ہٹا تو نہیں رہا۔
- دونوں iFlows کو log level Trace کے ساتھ چلائیں اور producer کے آخری step کے headers کا consumer کے پہلے step کے headers سے موازنہ کریں۔
نامعلوم headers اور properties والا مضمون عمومی جانچ کا احاطہ کرتا ہے، اور SAP CPI میں Camel Simple expressions وہ syntax جس سے values پڑھی جاتی ہیں۔
Kitegra کیسے مدد کرتا ہے
Kitegra براؤزر ایکسٹینشن iFlows کے درمیان ProcessDirect اور JMS links کو follow کرتی ہے۔ Consumer میں ${ یا $ لکھنے پر یہ وہ headers تجویز کرتی ہے جو جڑے ہوئے iFlows سیٹ کرتے ہیں، ان کے مشترک link names کے ساتھ، اس لیے کسی spelling کو چیک کرنے کے لیے آپ کو producer کھولنا نہیں پڑتا۔
اس کا navigator ہر SAP اکاؤنٹ کے لیے آپ کے tenants، packages اور iFlows دکھاتا ہے، تاکہ آپ کسی link کی ایک طرف سے دوسری طرف جا سکیں۔ ایکسٹینشن کبھی کسی iFlow کا مواد محفوظ، ڈپلائے یا ایڈٹ نہیں کرتی، اور آپ کا tenant صرف تب بدلتا ہے جب آپ چار نامزد اقدامات میں سے کسی ایک پر کلک کریں، جنہیں بند کیا جا سکتا ہے۔
ایک message کو producer سے consumer تک follow کرنے کے لیے اسے اس کی Correlation ID سے تلاش کریں: ٹائم لائن ہر اس iFlow کی فہرست دیتی ہے جس سے یہ گزرا۔
Kitegra اکاؤنٹ کے بغیر یہ ہر ماڈیول میں 5 iFlows پر کام کرتی ہے۔ Free پلان میں 50، Starter میں 100 اور Pro میں 300 iFlows شامل ہیں؛ Business میں کوئی حد نہیں۔ پلانز کا موازنہ کریں۔
اپنے اگلے iFlow میں آزمائیں
پڑھیں کہ Kitegra، SAP Integration Suite کے ڈیزائنر میں کیا کرتا ہے، یا اسے Kitegra کی دوسری Chrome ایکسٹینشنز کے ساتھ دیکھیں۔
اکثر پوچھے جانے والے سوالات
کیا SAP CPI میں headers، ProcessDirect کے پار جاتے ہیں؟
جی ہاں۔ Consumer iFlow کو message body اور headers ملتے ہیں۔ Exchange properties نہیں بھیجی جاتیں۔
ProcessDirect سے کسی دوسرے iFlow کو exchange property کیسے بھیجوں؟
ProcessDirect call سے پہلے Content Modifier سے اسے header میں کاپی کریں، اور اگر consumer میں ضرورت ہو تو وہاں اسے واپس property میں کاپی کر لیں۔
میری ProcessDirect call کیوں نہیں جڑتی؟
Addresses مختلف ہیں، چاہے ایک حرف یا slash کا ہی فرق ہو، یا consumer iFlow اسی tenant پر ڈپلائے نہیں ہے۔
کیا JMS، exchange properties کو برقرار رکھتا ہے؟
صرف اس صورت میں جب JMS receiver adapter میں Transfer Exchange Properties آن ہو۔ Headers ہمیشہ message کے ساتھ محفوظ ہوتے ہیں۔
کیسے معلوم کروں کہ JMS message کتنی بار دوبارہ آزمایا گیا؟
Consumer iFlow میں SAPJMSRetries header پڑھیں، مثلاً کچھ کوششوں کے بعد retry روکنے کے لیے۔
کیا دو iFlows ایک ہی ProcessDirect address پر سن سکتے ہیں؟
نہیں۔ کسی address کو صرف ایک ڈپلائے شدہ consumer استعمال کر سکتا ہے؛ ہر consumer کو اس کا اپنا address دیں۔