Oracle EBS Service Invocation Framework (Business Events – SIF)

Share Button

Merhaba,

Bu yazıda, Oracle EBS üzerinde iş olaylarını kullanarak web servis çağırma yöntemini aktaracağım. Servislerin çağrılması için kullanılan framework adı literatürde Service Invocation Framework (SIF) olarak geçmektedir. Bu framework, iş olayları üzerine kuruludur. Dolayısıyla uygulama üzerinde iş olay tanımı ve ilgili olaya ait abonelik tanımlarının yapılması gerekmektedir. Bu tanımlamalar tamamlandıktan sonra Pl/Sql, Workflow veya Java kullanarak iş olayını başlatabiliriz.

Detaylı bilgiye aşağıdaki adresten ulaşabilirsiniz.

https://docs.oracle.com/cd/E18727_01/doc.121/e12169/T511175T513090.htm

Web Servis çağrı talebi ve dönen cevabı için birer adet olmak üzere minimumda toplam iki adet iş olayının tanımlanması gerekir.

Talep İş Olayı

1.E-Business Suite sistemine giriş yapılır.  “Workflow Administrator Web (New) -> Administrator Workflow” altında “Business Events” ekran fonksiyonu seçilir.
sif 001

2. “Create Event” butonu ile iş olayı yaratma ekranı açılır.

sif 0023. İş olayının oluşturma formunda gerekli bilgiler aşağıdaki gibi doldurulur.

sif 003 4. Oluşturduğumuz İş olayı aratılır ve “Subscription” ikonuna tıklanır. Talep iş olayı için iki adet abonelik tanımlanacaktır. Birincisi servisi çağırmak için tanımlanırken ikincisi ise hata durumunda WFERROR iş akışını başlatmak için kullanılır.

sif 004 5. “Create Subscription” butonuna tıklanarak, abonelik oluşturma sayfasına geçiş yapılır.sif 005 6. Abonelik formu aşağıdaki gibi doldurulur ve “Next” butonuna basılır.

Bu abonelik servisi çağırmak için kullanılacaktır. Dikkat edilmesi gereken alan “Phase” parametresidir. Bu alana verilen değer 100’ün altında bir değer ise, servis çağrımı senkron şekilde olacaktır. Ancak bildiğim kadarıyla bu sadece Java tarafından çağrılan iş olayları için geçerlidir. Bu örnekte, iş olayını biz Pl/Sql kullanarak çağıracağımız için, iş olayımız WF_JAVA_DEFERRED tablosuna düşecektir. Bu tablo Oracle EBS’in “Message Queue” tablosudur. Tabloya düşen iş olayları sırayla ve belli bir zaman aralığında “Java Deferred Engine” tarafından işlenir.

“Rule” alanını “Message” olarak seçmemiz gerekmektedir zira bu abonelik içerisine XML talep zarfı eklenecektir.
  7. Servis tanım adresi (WSDL) “WSDL Url” alanına yazılır. Karşı servisi çağrıabilmek için, servisin karşı adreste kurulu ve çalışır durumda olması gerekmektedir. Lokal bilgisayarımızdan servis tanımı seçememekteyiz.

sif 007 8. Bu adımda servis seçilir ve “Next” butonuna basılır.

sif 008 9. Bu adımda “Port” seçilir ve “Next” butonuna basılır.

10. Bu adımda servisin hangi fonksiyonunun çağrılacağı seçilir ve “Next” butonuna basılır.

sif 010 11. “Java Rule Function” alanı servisi çağıran java sınıfının tanımının yapıldığı yerdir. Eğer kendi değişikliklerinizi servis çağrımına entegre etmek istiyorsanız, bu sınıfı Extend ederek yapabilirsiniz.

Bu adımda “Owner Name” ve “Owner Tag” alanlarında servisin sahibi olan kullanıcı adı ve modül seçilmesi gerekmektedir.

Not: 12.1.3 için aşağıdaki gibi seçilirken, 12.2.4 için lisans tanımı yapılmış bir EBS modülü seçilmelidir. Aksi taktirde, iş olayı çağrılamaz.

sif 011 12. Talep iş olayı için ikinci bir abonelik oluşturulması gerekmektedir. Bu abonelik, çağrı için tanımlanan aboneliğin hataya düştüğü durumlarda, WFERROR iş akışını başlatıp, hata detayı ile ilgili bildirim göndermek için kullanılacaktır. “Create Subscription” butonu ile devam edilir.

sif 012 13.”Source Type” alanı “External” olarak seçilir. “Rule Data” alanı ise “Key” seçilir. İş olayları başlatılırken bir adet anahtar değer ile başlatılır. Aynı değer iki abonelikte de kullanılır. “Next” butonuna basılarak devam edilir.

sif 013 14. “Workflow Type” alanı “WFERROR” ve “Workflow Process” alanı “DEFAULT_EVENT_ERROR2” olarak seçilir. Owner alanları doldurulur ve “Apply” butonuna basılır.

sif 014Talep İş olayı için son durum aşağıdaki gibidir.

sif 016

Cevap İş Olayı

1. Servisten dönen cevabı alabilmek için ikinci bir iş olayı tanımlamak gerekmektedir. Bu iş olayı bir abonelik sahibi olacaktır ve bu abonelik dönen cevabı alacaktır. “Create Event” butonu ile iş olayı oluşturma formu açılır.

sif 0172. Bilgiler aşağıdaki gibi doldurulur ve “Apply” butonuna basılır.

sif 018 3. İş olayı aratılır ve “Subscription” ikonuna tıklanır.

sif 019 4. “Create Subscription” butonuna tıklanır ve abonelik oluşturma formu açılır.

sif 020 5. “Rule Data” alanı “message” olarak seçilir. Bu sefer “Action” alanı “Custom” olarak seçilir ve “Next” butonuna basılır.

sif 021 6. Dönen cevabı almak ve işlemek için de java veya pl/sql kullanılabilir. Bu örnekte pl/sql kullanılacaktır. Pl/sql fonlsiyonunun belli bir formata uygun olması gerekmektedir. İlerleyen adımlarda kod bölümünde bu formatı göreceğiz. “Apply” butonuna basılır.

sif 022Bu aşamada iş olayları ve aboneliklerini oluşturma işlemi tamamlanmıştır.

EBS Service Agents

İş olay ve aboneliklerinin çalışabilmesi için “EBS Service Agents” bölümü altında aşağıdaki üç “Engine” çalışır durumda olması gerekmektedir.

  • Web Services IN Agent
  • Web Services OUT Agent
  • Workflow Java Deferred Agent Listener (JMS queue için kullanılmaktadır. Mesajları WF_JAVA_DEFERRED tablosundan çekecektir.)

sif 023

TABLO: xxanil_service_response

Bu tabloyu servis cevabını yazmak için kullanacağız.

 

PROCEDURE: get_service_response

Bu prosedürü DML operasyonu için kullanacağız.

FUNCTION: get_service_response

Fonksiyonun iskeletine dikkat ediniz. İsimleri p_subscription_guid ve p_event olmak üzere iki adet parametre olmak zorundadır. p_subscription_guid raw tipinde in parametresidir. p_event ise dönen cevabın da olduğu wf_event_t obje ve out tipindedir. Bu obje tipinden iş olayı anahtarını, adını, mesajını ve başka parametrelerini çekebiliriz. Bu fonksiyon “SUCCESS” veya “ERROR” dönmelidir.

Güvenlikli Servisler

Eğer çağrılacak servis güvenli servis ise, kullanıcı adını ve parolayı iş olayına parametre olarak geçmemiz gerekiyor. SIF bize servis talebinin header bölümünde yer alan güvenlik etiketlerine müdahale şansı tanımıyor. Dolayısıyla bir adet şifre objesi oluşturmamız gerekiyor. İş olayını çağrırken bu şifre objesinin adını göndereceğiz.

Aşağıdaki kodla şifre objesi oluşturabilirsiniz. l_module değişkeni modül adını alır, l_key değişkeni şifrenizin anahtarı iken, l_value ise şifre değerinizdir.

İş Olayını Çağırma

İş olayını çağırmak için pl/sql içinde wf_event paketindeki raise prosedürünü kullanacağız.

Önemli Not: Eğer servis talep xml zarfınızın en tepesinde (soap:envelope) namespace var ise, bu tanımlamaları xml zarfının başlık ve gövdesine indirmeniz gerekmektedir.

Değişkenler

  • l_parameters: wf_parameter_list_t tipinde bir collection. İş olayı parametre listesi. İş olayına eklenen standart parametreleri bu record grup ile set edeceğiz.
  • l_request_body: talep xml gövdesi
  • l_request_header: talep xml başlığı
  • l_event_key: çağırma anahtarı

Parametreler

Parametre Adı  Açıklama
WFBES_SOAP_USERNAME Güvenlikli servisler için kullanıcı adının atanacağı parametre.
WFBES_SOAP_PASSWORD_MOD Güvenlikli servisler için yukarıda oluşturduğumuz şifre objesinin modülü.
WFBES_SOAP_PASSWORD_KEY Güvenlikli servisler için yukarıda oluşturduğumuz şifre objesinin anahtarı.
WFBES_CALLBACK_EVENT İş olayının cevabında hangi iş olayının başlatılacağı. Bu noktada ikinci yarattığımız iş olayını kullanacağız.
WFBES_CALLBACK_AGENT Web servis dönüş engine seçimi. Standart olan "Web Services IN Agent" engine'nini kullanacağız.
WFBES_INPUT_taicsheader Başlık parametresi.
WFBES_INPUT_header Başlık parametresi.
WFBES_INPUT_tAICSHeader Başlık parametresi.


Gövdenin eklenmesi ve çağrım kodu

Bütün kod:

Oracle Workflow kullanarak iş olayını çağırmak için aşağıdaki sayfayı inceleyebilirsiniz.

https://blogs.oracle.com/ebusinesssuiteintegration/entry/invoking_web_service_from_orac_1

OAF sayfasından iş olayını çağırmak için aşağıdaki sayfayı inceleyebilirsiniz.

https://blogs.oracle.com/ebusinesssuiteintegration/entry/r121_-_invoking_web_service_fr