الوحدة في هذا المقال: Integration Flow Helper
ProcessDirect وJMS في SAP CPI: تمرير الترويسات بين iFlows
كيف تمرّر الترويسات وخصائص التبادل بين iFlows في SAP CPI باستخدام ProcessDirect وJMS: تطابق العناوين وقوائم الانتظار، وما الذي يعبر، وكيف تتتبع المشكلات.

تُقسَّم عمليات التكامل الكبيرة في SAP CPI إلى عدة iFlows: واحد يستقبل، وأخرى تُثري أو تحوّل أو ترسل. يستدعي ProcessDirect الـ iFlow الآخر على المستأجر نفسه مباشرة؛ أما JMS فيسلّم الرسالة إلى قائمة انتظار (queue) يقرؤها iFlow آخر لاحقًا. وفي الحالتين السؤال واحد: أيّ ترويساتي وخصائصي تصل إلى الطرف الآخر؟
يشرح هذا المقال كيف يُضبط الاتصالان، وما الذي يعبرهما وما الذي لا يعبر، وكيف تعرف سبب اختفاء قيمة بين iFlowين.
ProcessDirect: iFlow يستدعي آخر
يستخدم الـ iFlow المستدعي، أي المنتِج (producer)، محوّل مستقبِل ProcessDirect. ويبدأ الـ iFlow المُستدعى، أي المستهلك (consumer)، بمحوّل مرسِل ProcessDirect. لكل منهما حقل Address، ولا يتم الاتصال إلا إذا كان العنوان متطابقًا تمامًا على الجانبين، مثلًا:
Producer iFlow -> ProcessDirect receiver Address: /orders/enrich
Consumer iFlow <- ProcessDirect sender Address: /orders/enrichيعمل الـ iFlowان على المستأجر نفسه، ويجب نشر المستهلك قبل أن يتمكن المنتِج من استدعائه. ولا يستطيع الاستماع على عنوان واحد إلا مستهلك منشور واحد. وعند استخدامه مع خطوة Request-Reply، تعود الرسالة الأخيرة لدى المستهلك إلى المنتِج بوصفها الرد.
ما الذي يعبر ProcessDirect وما الذي لا يعبره
يستلم المستهلك جسم الرسالة وترويساتها. أما خصائص التبادل فتبقى في مكانها: يبدأ المستهلك exchange جديدًا لا يحمل أيًّا من خصائص المنتِج.
لتمرير خاصية، انسخها إلى ترويسة في Content Modifier قبل الاستدعاء مباشرة، مثل ترويسة orderId بنوع المصدر Property والقيمة orderId. وفي المستهلك، انسخها مرة أخرى إلى خاصية إن كنت تفضّل العمل بالخصائص هناك. واحذف الترويسات التي لا ينبغي أن يستلمها المستهلك، وخصوصًا الكبيرة منها.
JMS: تمرير الرسالة عبر قائمة انتظار
مع JMS، يكتب محوّل مستقبِل JMS لدى المنتِج الرسالة في قائمة انتظار، ويقرؤها iFlow مستهلك يملك محوّل مرسِل JMS على قيمة Queue Name نفسها. والـ iFlowان منفصلان (decoupled): فالمنتِج لا ينتظر، والمستهلك يعيد محاولة الرسائل التي تفشل.
- تُخزَّن الترويسات مع الرسالة وتصل إلى المستهلك.
- لا تُخزَّن خصائص التبادل إلا إذا كان خيار Transfer Exchange Properties مفعّلًا في مستقبِل JMS.
- لكل ما يُخزَّن مع الرسالة حد للحجم، فأبقِ الترويسات والخصائص المنقولة صغيرة.
- في المستهلك، تخبرك الترويسة
SAPJMSRetriesبعدد المرات التي أُعيدت فيها محاولة الرسالة.
مقارنة جنبًا إلى جنب
| ProcessDirect | JMS | |
|---|---|---|
| الرابط بين الـ iFlows | قيمة Address نفسها على الجانبين | قيمة Queue Name نفسها على الجانبين |
| الاستدعاء | مباشر، ويمكن أن يُرجع ردًا | غير متزامن عبر قائمة انتظار |
| جسم الرسالة | يُمرَّر | يُمرَّر |
| الترويسات | تُمرَّر | تُمرَّر |
| خصائص التبادل | لا تُمرَّر: انسخها إلى ترويسات | تُمرَّر فقط مع Transfer Exchange Properties |
أسماء الترويسات لا تميّز بين الأحرف الكبيرة والصغيرة على الجانبين، لكن أسماء خصائص التبادل تميّز، لذا يجب أن تُكتب الخاصية المستعادة في المستهلك تمامًا كما تقرؤها الخطوات التالية.
عندما لا تصل قيمة ما
- قارن العناوين أو أسماء قوائم الانتظار حرفًا بحرف، بما في ذلك الشرطة المائلة في البداية وحالة الأحرف.
- تحقق من أن المستهلك منشور وقيد التشغيل.
- تحقق مما إذا كانت القيمة خاصية: عبر ProcessDirect لا تصل أبدًا، وعبر JMS لا تصل إلا مع Transfer Exchange Properties.
- تحقق من أن أي Content Modifier لا يحذف الترويسة في أثناء خروجها من المنتِج.
- شغّل الـ iFlowين مع ضبط مستوى السجل على Trace، وقارن الترويسات عند آخر خطوة لدى المنتِج بتلك الموجودة عند أول خطوة لدى المستهلك.
يتناول مقال الترويسات والخصائص غير المعروفة الفحوص العامة، ويتناول مقال تعبيرات Camel Simple في SAP CPI الصيغة المستخدمة لقراءة القيم.
كيف يساعدك Kitegra
تتتبّع إضافة المتصفح Kitegra روابط ProcessDirect وJMS بين iFlows. ففي المستهلك، تؤدي كتابة ${ أو $ إلى اقتراح الترويسات التي تضبطها iFlows المتصلة، مع أسماء الروابط المشتركة بينها، فلا تحتاج إلى فتح المنتِج للتحقق من طريقة كتابة اسم.
ويعرض المستكشف (navigator) فيها المستأجرين والحزم وiFlows لكل حساب SAP، فتنتقل من أحد طرفي الرابط إلى الآخر. ولا تحفظ الإضافة محتوى أي iFlow ولا تنشره ولا تعدّله أبدًا، ولا يتغير المستأجر إلا عندما تنقر أحد أربعة إجراءات محددة بالاسم يمكن إيقافها.
لمتابعة رسالة واحدة من المنتِج إلى المستهلك، ابحث عنها بـ Correlation ID الخاص بها: يسرد التسلسل الزمني كل iFlow مرّت به.
بلا حساب تعمل الإضافة على 5 iFlows لكل وحدة. وتغطي خطة Free حتى 50، وخطة Starter حتى 100، وخطة Pro حتى 300، أما خطة Business فبلا حد. قارن بين الخطط.
جرّبها في الـ iFlow التالي
تعرّف على ما يفعله Kitegra في مصمم SAP Integration Suite، أو اطّلع عليه مع بقية وحدات Kitegra.
الأسئلة الشائعة
هل تمرّ الترويسات عبر ProcessDirect في SAP CPI؟
نعم. يستلم الـ iFlow المستهلك جسم الرسالة والترويسات. أما خصائص التبادل فلا تُمرَّر.
كيف أمرّر خاصية تبادل إلى iFlow آخر باستخدام ProcessDirect؟
انسخها إلى ترويسة باستخدام Content Modifier قبل استدعاء ProcessDirect، ثم انسخها مرة أخرى إلى خاصية في المستهلك إن احتجت إليها هناك.
لماذا يفشل استدعاء ProcessDirect في الاتصال؟
لأن العنوانين مختلفان، ولو بحرف واحد أو بشرطة مائلة، أو لأن الـ iFlow المستهلك غير منشور على المستأجر نفسه.
هل يحتفظ JMS بخصائص التبادل؟
فقط إذا كان خيار Transfer Exchange Properties مفعّلًا في محوّل مستقبِل JMS. أما الترويسات فتُخزَّن دائمًا مع الرسالة.
كيف أعرف عدد المرات التي أُعيدت فيها محاولة رسالة JMS؟
اقرأ الترويسة SAPJMSRetries في الـ iFlow المستهلك، مثلًا لإيقاف إعادة المحاولة بعد عدد معيّن من المحاولات.
هل يمكن لـ iFlowين الاستماع على عنوان ProcessDirect نفسه؟
لا. لا يستطيع استخدام عنوان ما إلا مستهلك منشور واحد؛ امنح كل مستهلك عنوانه الخاص.