Oracle Application Framework (OAF) View Object Extension

Share Button

Merhaba,

OAF geliştirmeleri yaparken bazı durumlarda standart View Object nesnelerinin SQL sorgularındaki alanlar yetmeyebiliyor. Bu tarz durumlarda standard View Object nesnesini EXTEND ederek onun özelliklerini kapsayan ve ek alanlar koyabildiğimiz yeni bir CUSTOM View Object nesnesi oluşturuyoruz. Yeni oluşan bu nesneyi sayfalarda kişiselleştirmeler ile kullanıp geliştirmeler yapabiliyoruz. Bu yaptığımız geliştirmeler Oracle standartlarına uygun ve PATCH’ler ile ezilmemektedir.

Bu geliştirmede yer alan adımları olduğu gibi uygulamazsanız JDeveloper BUG’larından dolayı birçok hata mesajı ile karşılaşırsınız.

Geliştirmeye başlamadan önce self-servis kişiselleştirme profilinin ve bu sayfa hakkında profilinin açılması gerekmektedir. Bunun için aşağıdaki iki profili kullanıcı bazında açınız;

  • Personalize Self-Service Defn (FND_CUSTOM_OA_DEFINTION)
  • FND: Diagnostics (FND_DIAGNOSTICS)

vo_1

Daha sonra VO Extension yapılacak sayfa açılır. Ben bu örnek içerisinde Borçlar Muhasebesinde Tedarikçilerin listelendiği ana sayfayı kullandım. Tedarikçilerin listelendiği tabloya standart view object içerisinde yer almayan ve bir site bilgisi olan address_line1 alanını rownum = 1 ile çekerek getirdim.
Sayfa MDS Dizini:/oracle/apps/pos/supplier/webui/SuppSummPG

vo_2

 

İlgili sayfa açıldıktan sonra sol altta yer alan “Bu Sayfa Hakkında” bağlantısına tıklanarak sayfanın XML hiyerarşisi açılır ve pageLayout region’ı genişletilir.

vo_3

XML hiyerarşisinde alanı eklemek istediğimiz tablo aşağıya doğru taranarak bulunur. Tablonun yanında yer alan View Object (SuppSummVO) bağlantısına tıklanır.

Not: Eğer bağlantı tıklanamaz durumda ise sayfanın en altında yer alan “İş Bileşen Referans Detayları” bölümü genişletilerek de View Object Bağlantısına ulaşılabilinir.

Bağlantıya tıklanınca açılan sayfa View Object SQL sorgusunu ve karşılığında oluşan JAVA Mapping Attribute listesini göstermektedir. Görüldüğü üzere bizim eklemek istediğimiz alan bu listede yer almamaktadır.

vo_5

 

Geliştirmeyi  daha önceden 12.1.3 için konfigürasyonunu yaptığımız  JDeveloper ile yapacağız. Bkz: OAF VE JDEVELOPER LOKAL KURULUM

Extend etmek istediğimiz View Object POS modülü altında yer almaktadır. JDeveloper içerisinde bağımlılıklara takılmadan derleme yapabilmek için EBS sunucusu içerisinde JAVA_TOP/oracle/apps ortam değişkeni altında yer alan pos klasörü <JDEV_USER_HOME>/myprojects/oracle/apps/ altında bir FTP programı ile indirilir.

vo_6

Bu noktada JDeveloper açıldığında indirilen objeleri paket dizinleriyle beraber Applications Navigator altında Demo projesi içerisinde görebiliriz.

Custom View Object’i oluşturmak için projeye sağ tıklanıp New seçilir. Açılan pencerede Business Tier -> ADF Business Components altında yer alan View Object seçilir.

vo_8

Yeni VO oluşturma sihirbazı açılır. Başlangıç adımı Next ile devam edilir.

vo_9

Birinci adımda View Object için paket ve isim belirliyoruz. Genel prensip olarak isimlendirme yaparken EXTENSION’lar için standard objelerin başına xx koyarak geliştirme yapmaktayım. Burada da aynı mantığı kullanıyorum.

Paket: xxntc.oracle.apps.pos.supplier.server

İsim: xxSuppSummVO

1. adımda önemli bir nokta olan bu oluşturduğumuz VO’nun Extend ettiği standart VO’yu seçtiğimiz bölümdür.

Bunun için Extends kutucuğunun yanında yer alan Browse butonuna tıklanır.

vo_10

Açılan listede oracle.apps.pos.supplier.server paketinde yer alan SuppSummVO seçilir.

Not: Eğer liste boş açılıyorsa sihirbazı Cancel butonu ile kapatın. JDeveloper proje yer altında alan standart VO’nun bulunduğu paketi genişletin. Custom VO oluşturma sihirbazını yeniden açın.

Sihirbazda diğer adımları değiştirmeden 7.adıma kadar ilerliyoruz.

vo_12 vo_13 vo_14 vo_15 vo_16

Eğer java dosyaları içerisindeki getter ve setter’lara müdahale amacı taşımıyor ve runtime esnasında SQL sorgusunu değiştirmeyi planlamıyorsanız 7.adımda yer alan java dosyalarını oluştur checklerini kaldırın.

vo_17

Next ile devam edip Finish ile bitirin.

vo_18

View Object ilgili paket altında oluşacaktır. View Object üzerine çift tıkalyıp tekrar açınız.

vo_19

Bu bölüme geçmeden önce sorguya ekleyeceğimiz alanı getirecek ek geliştirmeyi yapmamız gerekiyor. Ben pl/sql fonksiyonu oluşturmayı tercih ettim ama buna gerek kalmadan da yapılabilirdi. Fakat fonksiyon içerisinden müdahale daha kolay olduğu ve OAF tarafında değişiklik gerektirmeden alanı değiştirme esnekliği sunduğu için bu yöntemi tercih ettim.

PL/SQL Fonksiyon scripti aşağıdadır;

Edit sihirbazını açtığımız view object içerisinde yer alan sol bölümden Attributes bölümüne geçiş yapınız ve New butonuna tıklayınız.

vo_20

Bu pencere View Object içerisine yeni bir Attribute oluşturmak için kullanılır.

Name: XxAddressLine1 (Bu ismi daha sonra kişiselleştirme bölümünde kullanacağız)

Type: String

Updatable: Never

Eğer veriyi SQL’den getirecekseniz “Mapped to Column or SQL” check box alanını işaretleyiniz. Diğer türlü alan Transient Attribute olarak oluşur ve az önce check box işaretini kaldırdığımız java dosyası içerisinde manuel olarak set edilmesi gerekliliği orataya çıkar.

Aşağıda yer alan Query Column bölümünde

Alias: xx_address_line1 (SQL’de kullandığınız ALIAS olmasına dikkat ediniz.)

Type: VARCHAR2(240) (bkz: ap_supplier_sites_all tablosu, address_line1 alanı)

Expression: apps.xx_vo_extension(pv.vendor_id)

vo_21Attribute oluştuktan sonra SQL sorgusuna alanı aynı ALIAS ile ekliyoruz. Aşağıdaki sorgunun 32. ve 87. satırlarına dikkat ediniz. Standart sorguyu hiç bozmadan ekleme yapılmıştır.

vo_22

Apply ve ardından OK butonları ile kapatıp JDeveloper’ı Save ediyoruz. Daha önce FTP ile EBS sunucusundan indirdiğimiz POS klasörünü myprojects altında yerleştirmiştik. Aynı klasörü myclasses altına da kopyalıyoruz.

Bu işlemi yaptıktan sonra projeye sağ tıklayıp Make ile derliyoruz. Bütün POS modülü olduğu için derleme normalden fazla zaman alabilir ve derleme esnasında birkaç tane DEPENDENCY hatası alabilirsiniz. Bu hataların bir önemi yoktur, önemli olan projenin Compiler Error alınmadan derlenmesidir.

vo_23

Eğer proje hatasız derlenmişse, projeye sağ tıklayıp proje özellikleri penceresini açıyoruz. Sol menüden Business Components ağacını genişletip Substitutions bölümüne geçiş yapıyoruz.

Açılan sağ bölümün;

Available bölümünde standart view object nesnesini seçiyoruz. (SuppSummVO)

Substitute bölümünde ise custom view object nesnesini seçiyoruz. (xxSuppSummVO)

Add butonu ile ekleme yapıyoruz. Bir proje için birden çok Substitution eklenebilir.

Ok ile pencereyi kapatıp tekrar projeyi derliyoruz.

vo_24

Eğer hiçbir sorun olmadan bu aşamaya kadar gelinmişse proje jpx dosyası içerisinde Substitution bölümünü görmeniz gerekiyor. BC4J (VO, EO, AM) extension yapılırken her zaman substitution yapılır ve Proejniz.jpx dosyası içeri IMPORT edilir.

Projenix.jpx dosyasını Notepad ile açıp en alt bölümlerde Substitution bölümünü görebilirsiniz.

Bu aşamada jpx dosyasının EBS Metadata Services bölümüne IMPORT edilmesi ve custom view object dosyanızın FTP ile JAVA_TOP/xx/.. dizin yoluna atılması gerekmektedir.

.jpx dosyasını IMPORT etmek için aşağıdaki bat scriptini CMD açarak kullanabilirsiniz;

vo_25

FTP ile myclasses altındaki geliştirmeler de aktarıldıktan sonra apache ve oc4j sunucular bounce edilir.

Tekrar EBS’e giriş yapılır ve ilgili sayfa açılıp “Bu Sayfa Hakkında” bağlantısına tıklanır. Alt bölümnde bulunan “İş Bileşen Referans Detayları” bölümü genişletilir. Eğer herşey düzgünse burada IMPORT ettiğiniz custom View Object’i görebilirsiniz.

vo_26

 

View Object içerisine tıklanıldığında ise standart view object içerisinde yer almayan xx_address_line1 alanının yer aldığını görebilirsiniz. Bu artık kişiselleştirme ile kullanıma hazır duruma geldiğinin göstergesidir.

vo_27

Substituition’ın düzgün IMPORT edildiğini anlamak için JDR_UTILS paketini de kullanabilirsiniz;

Sonuç: /oracle/apps/pos/supplier/server/customizations/site/0/SuppSummVO

İçeriği görüntülemek için;

Sonuç:

Alanı tabloya eklemek içinse tablo bölümü kişiselleştirme ile açılır;

vo_28

Tablonun bulunduğu bölüm hizasında yer alan “Create Item” butonu ile yeni bir Item oluşturma penceresi açılır;

vo_29

Yeni Item Site bazında Message Styled Text olarak seçilir ve aşağıdaki bilgilerle oluşturulur.

ID: xx_address_line1

Prompt: xx_address_line1

View Attribute: XxAddressLine1

View Instance: xxSuppSummVO

vo_30

Sonuç olarak tabloya istediğimiz alanın geldiğini görüyoruz;

vo_31