Bu makaledeki modül: Integration Flow Helper
SAP CPI'da ProcessDirect ve JMS: iFlow'lar arasında header aktarma
SAP CPI'da ProcessDirect ve JMS ile iFlow'lar arasında header ve exchange property aktarma: eşleşen adresler ve kuyruklar, neyin geçtiği ve nasıl hata ayıklanacağı.

SAP CPI'daki büyük entegrasyonlar birkaç iFlow'a bölünür: biri alır, diğerleri zenginleştirir, eşler veya gönderir. ProcessDirect aynı tenant'taki başka bir iFlow'u doğrudan çağırır; JMS ise bir mesajı, başka bir iFlow'un daha sonra okuduğu bir kuyruğa bırakır. Her iki durumda da soru aynıdır: header'larımın ve özelliklerimin hangileri karşı tarafa ulaşır?
Bu makale her iki bağlantının nasıl kurulduğunu, neyin geçip neyin geçmediğini ve bir değerin iki iFlow arasında neden kaybolduğunu nasıl bulacağınızı anlatıyor.
ProcessDirect: bir iFlow'un başka bir iFlow'u çağırması
Çağıran iFlow, yani üretici, bir ProcessDirect alıcı adaptörü kullanır. Çağrılan iFlow, yani tüketici, bir ProcessDirect gönderici adaptörüyle başlar. İkisinin de bir Address alanı vardır ve çağrı yalnızca adres iki tarafta da tam olarak aynı olduğunda bağlanır, örneğin:
Producer iFlow -> ProcessDirect receiver Address: /orders/enrich
Consumer iFlow <- ProcessDirect sender Address: /orders/enrichİki iFlow da aynı tenant'ta çalışır ve üreticinin tüketiciyi çağırabilmesi için tüketicinin önceden dağıtılmış olması gerekir. Bir adresi yalnızca dağıtılmış tek bir tüketici dinleyebilir. Bir Request-Reply adımıyla kullanıldığında tüketicinin son mesajı üreticiye yanıt olarak döner.
ProcessDirect'ten neyin geçip neyin geçmediği
Tüketici mesaj gövdesini ve mesaj header'larını alır. Exchange property'ler geride kalır: tüketici, üreticinin özelliklerinden hiçbirini içermeyen yeni bir exchange ile başlar.
Bir özelliği aktarmak için onu çağrıdan hemen önce bir Content Modifier ile bir header'a kopyalayın; örneğin kaynak türü Property ve değeri orderId olan bir orderId header'ı. Orada özelliklerle çalışmayı tercih ediyorsanız, tüketicide onu yeniden bir özelliğe kopyalayın. Tüketicinin almaması gereken header'ları, özellikle büyük olanları silin.
JMS: bir mesajı kuyruk üzerinden aktarma
JMS'de üreticinin JMS alıcı adaptörü mesajı bir kuyruğa yazar ve aynı Queue Name üzerinde JMS gönderici adaptörüne sahip bir tüketici iFlow'u onu okur. İki iFlow birbirinden bağımsızdır: üretici beklemez, tüketici ise başarısız olan mesajları yeniden dener.
- Header'lar mesajla birlikte saklanır ve tüketiciye ulaşır.
- Exchange property'ler, JMS alıcısında Transfer Exchange Properties açık olmadıkça saklanmaz.
- Mesajla birlikte saklanan her şeyin bir boyut sınırı vardır; bu yüzden header'ları ve aktarılan özellikleri küçük tutun.
- Tüketicide
SAPJMSRetriesheader'ı, mesajın kaç kez yeniden denendiğini söyler.
Yan yana karşılaştırma
| ProcessDirect | JMS | |
|---|---|---|
| iFlow'lar arasındaki bağlantı | İkisinde de aynı Address | İkisinde de aynı Queue Name |
| Çağrı | Doğrudan, yanıt döndürebilir | Eşzamansız, kuyruk üzerinden |
| Mesaj gövdesi | Aktarılır | Aktarılır |
| Header'lar | Aktarılır | Aktarılır |
| Exchange property'ler | Aktarılmaz: header'lara kopyalayın | Yalnızca Transfer Exchange Properties ile aktarılır |
Header adları iki tarafta da büyük/küçük harfe duyarlı değildir, ancak exchange property adları duyarlıdır; bu yüzden tüketicide geri yüklenen bir özellik, sonraki adımların onu okuduğu biçimde tam olarak yazılmalıdır.
Bir değer ulaşmadığında
- Adresleri veya kuyruk adlarını, baştaki eğik çizgi ve büyük/küçük harf dahil, karakter karakter karşılaştırın.
- Tüketicinin dağıtılmış ve başlatılmış olduğunu kontrol edin.
- Değerin bir özellik olup olmadığını kontrol edin: ProcessDirect üzerinden asla ulaşmaz; JMS üzerinden yalnızca Transfer Exchange Properties ile ulaşır.
- Hiçbir Content Modifier'ın header'ı üreticiden çıkarken silmediğini kontrol edin.
- Her iki iFlow'u da günlük düzeyi Trace olarak çalıştırın ve üreticinin son adımındaki header'ları tüketicinin ilk adımındakilerle karşılaştırın.
Bilinmeyen header'lar ve özellikler makalesi genel denetimleri, SAP CPI'da Camel Simple ifadeleri ise değerleri okumanın söz dizimini ele alır.
Kitegra nasıl yardımcı olur
Kitegra tarayıcı uzantısı iFlow'lar arasındaki ProcessDirect ve JMS bağlantılarını izler. Tüketicide ${ veya $ yazdığınızda, bağlı iFlow'ların ayarladığı header'ları paylaştıkları bağlantı adlarıyla birlikte önerir; böylece bir şeyin nasıl yazıldığını kontrol etmek için üreticiyi açmanız gerekmez.
Gezgini tenant'larınızı, paketlerinizi ve iFlow'larınızı her SAP hesabı için listeler; böylece bağlantının bir tarafından diğerine geçebilirsiniz. Uzantı bir iFlow'un içeriğini asla kaydetmez, dağıtmaz veya düzenlemez; tenant'ınız yalnızca, kapatılabilen ve adı belli dört işlemden birine tıkladığınızda değişir.
Bir mesajı üreticiden tüketiciye kadar izlemek için onu Correlation ID'siyle arayın: zaman çizelgesi geçtiği her iFlow'u listeler.
Kitegra hesabı olmadan modül başına 5 iFlow'da çalışır. Free planı 50, Starter 100 ve Pro 300 iFlow'u kapsar; Business'ta sınır yoktur. Planları karşılaştırın.
Bir sonraki iFlow'unuzda deneyin
Kitegra'ın SAP Integration Suite tasarımcısında neler yaptığını okuyun veya onu Kitegra'in diğer Chrome uzantılarıyla birlikte görün.
Sık sorulan sorular
SAP CPI'da header'lar ProcessDirect üzerinden geçer mi?
Evet. Tüketici iFlow mesaj gövdesini ve header'ları alır. Exchange property'ler aktarılmaz.
ProcessDirect ile başka bir iFlow'a exchange property nasıl aktarılır?
ProcessDirect çağrısından önce onu bir Content Modifier ile bir header'a kopyalayın ve tüketicide gerekiyorsa yeniden bir özelliğe kopyalayın.
ProcessDirect çağrım neden bağlanmıyor?
Adresler farklıdır (tek bir karakter veya eğik çizgi kadar bile olsa) ya da tüketici iFlow aynı tenant'ta dağıtılmamıştır.
JMS exchange property'leri korur mu?
Yalnızca JMS alıcı adaptöründe Transfer Exchange Properties açıksa. Header'lar her zaman mesajla birlikte saklanır.
Bir JMS mesajının kaç kez yeniden denendiğini nasıl öğrenirim?
Tüketici iFlow'da SAPJMSRetries header'ını okuyun; örneğin belirli sayıda denemeden sonra yeniden denemeyi durdurmak için.
İki iFlow aynı ProcessDirect adresini dinleyebilir mi?
Hayır. Bir adresi yalnızca dağıtılmış tek bir tüketici kullanabilir; her tüketiciye kendi adresini verin.