Tag Archives: apex

APEX: List of Values

Dag!

It is not the best way to place an input field on your report interface if there are only a certain amount of possible input values. Right?

Let ‘s say we want our users to enter a Currency Code to return the Currency Rate of it..

apex_lov_1
sample SQL

So you deployed that one to APEX as an interactive report..

Since we ‘ve a bind variable, there has to be page item on your report interface.. If you create your page item as TEXT field, it works just fine.

But the problem is, users can enter currency codes which are not exist :)

To avoid that, we can set the page item type as Pop-Up LoV.

apex_lov_5
Item Types

At some point, we will be prompted to define Values for our List.

apex_lov_6
List of Values Query/ Named LoV Selection

Now we have 2 + 1 options:

  1. We can create a static list. It can be useful if we have only a bunch of values and they really are static.
  2. We can write our query which will return 2 columns: Display Value, Return Value
  3. We would create a Shared Component so we can reuse it on other pages as well :)

Number one is quite easy.. Just type your values as it ‘s shown below, be careful with spelling.

apex_lov_7
Static Values

Number two is a one time solution. Meaning, if you want to do same thing for another interactive report, you ‘ll have to do it again.

Say we have a param table where we can get all possible ISO Currency Codes:

apex_lov_8
Sample Dynamic LoV Query

Once we use this simple query as LoV Query, indeed we ‘ll have a dynamic LoV object.

However, to make it more efficient, we can also create a shared component with it so we can could use that object on other pages too.

Go to Application Builder then select your Application and click to Shared Component link.

You ‘ll see some User Interface options there:

apex_lov_9
List of Values Menu
  • Pick the List of Values.
  • Start from scracth
  • Set a name
  • Click to Dynamic radio button.

Write or Paste your Dynamic LoV Query to the text box.

Complete these steps by following on-page instructions.

Great!

Now we have a generic LoV which will list all the possible Currency Codes in our environment.

Now go a few steps back.. As you can see from List of Values Query/ Named LoV Selection there is a yellow marked area called Named LoV.

Click on it and pick your freshly built LoV.

Finally our user can input the currency codes without typing them manually :)

apex_lov_4
Sample Pop-Up LoV

Cheers!

APEX: Etkilesimli Grafikler

Merhaba,

Bu yazimda sizlere APEX grafik raporlarindan bahsedecegim.

Bildiginiz gibi, interaktif olarak hazirladiginiz raporlariniz icin Action menusu yardimiyla analiz sayfanizda anlik rapor gorselleri alabiliyorsunuz.

Fakat veri setimizi kalici bir rapor olarak da; pasta dilimi ya da bar seklinde kullanicilarimiza sunmak isteyebiliriz.

Bunun yaninda kullanicinin raporda gordugu alanlara tiklamasi ile ilgili alani olusturan data setini ayni ekranda ya da ikinci bir tab ‘da verebiliriz.

Bu sekilde son kullanicilariniza tum detay kirilimlari bir seferde vererek koca bir set cikmak yerine, ise ozet ve bir bakista anlasilan bir gorsel sunarak baslamis oluruz.

Kullanici, yapacagi analiz dogrultusunda raporu dig edebilir, bir alt kirilima inebilir, raw data icinde bogulmamis olur.

Alttaki ornegimizi inceleyelim:

Elimizde farkli urun tipleri ve doviz cinsleri var. Para turlerine gore urun hacimlerimizi gruplayarak grafik haline getiriyoruz.

Sekil.1: Ornek Grafik

Simdi biraz basa donelim.

Page Region ‘imiza sag tiklayarak Create secenegini secelim,

Gelen secenekler arasindan Chart ‘i isaretleyelim

Sonra ne tur bir grafik olusturmak istedigimizi secelim. Benim ornegim 3d Stacked Column.

Gerekli secimleri yapip grafigimize bir isim verdikten sonra sistem bizden Query isteyecek.
Aslinda alttaki gibi bir sonuc donduren basit bir SQL sorgu yazmamiz gerekiyor.
Veri yapimizi taniyorsak ve ne istedigimizi biliyorsak oldukca kolay:)
Tek yapmaniz gereken uygun bir sekilde veri setinizi gruplara ayirmak.. Ustteki ornegi inceleyerek kendi ihtiyaclariniza gore uyarlamayi deneyin.
Grafik raporlar icin hazirladigimiz sorgularin belirli bir desene gore donmesi gerekiyor. Sistem sizden ilk sirada Link kolonunu gondermenizi bekleyecek.
Bu kolonu:
  1. Hic kullanmayabiliriz, yani NULL gondeririz. Kullanici rapordaki barlara ya da pasta dilimlerine tiklayinca hic bir sey olmaz.
  2. Kullaniciyi baska bir sayfaya yonlendirecek sekilde kullanabiliriz. Bu durumda Link kolonuna yine NULL gonderiyoruz, fakat rapor ayarlarimizdan bir takim ayarlar yapmamiz gerekiyor.
  3. Link kolonuna URL gonderebiliriz. Bunu yapmak icin kucuk bazi dinamik sql cumleleri yazmamiz gerekiyor.
Bu yazimda 2. madde uzerinden gidelim, bir dahaki yazimda da 3. maddeyi orneklerle aciklamaya calisayim.
Oncelikle grafigimizdeki barlardan birine tiklandiginda acilmasini bekledigimiz detay rapor nedir, buna karar vermemiz gerekiyor.
Madem grafigimiz farkli doviz cinslerine gore urun hacimlerimizi gosteriyor dedik, o halde detay raporun da soyle bir sey oldugunu kabul edelim.

Bu sorgu calisinca sistem kullanicidan :pv_currency degiskenini bekleyecek. Bu sorguyu yeni bir interaktif rapor olarak kaydedelim.

Tabii ki :pv_currency icin bu yeni interaktif rapor sayfamizda Page Item, Page Item Button olusturmamiz gerekecek, bunlari da atlamalayim.

Simdi tekrar Grafigimize donuyoruz..

 

Chart Series olarak hazirladigimiz sorguya cift tiklayalim, ustte gordugunuz alani bulalim.
Dikkat ederseniz Target olarak Page in this Application sectik. Dolayisiyla artik grafigimiz, uzerine tikladigimizda o esnada calismakta oldugumuz Application icinden farkli bir sayfayi calistirmasi gerektigini biliyor.
Page menusunden detay olarak hazirladigimiz sorguyu deploy ettigimiz sayfayi gosterelim.
Alttaki Item seceneklerinden de bu “farkli” raporu hangi parametrelerle calistiracagini soyleyelim.
Ornek sorgumuzu hatirlayin: Sorgumuz bizden :pv_currency degiskenini bekliyordu.
Item 1 kutusunun yanindaki arama ikonuna tikladiginizda PV_CURRENCY degiskenini goreceksiniz.. Tabii Page menusunden detay sorgunuzun sayfa numarasini dogru vermisseniz. :)
ITEM 1 olarak PV_CURRENCY degiskenini isaret ettik.. Simdi de grafigimizdeki hangi degeri PV_CURRENCY item ‘ina Value olarak gonderecegimizi belirtelim:
Elimizde Link, Label ve Value kolonlari oldugunu hatirlayin. Benim ornegimde Label kolonunda doviz kodlarini siralamistim, zaten raporum da doviz kodlarina gore gruplanmis hacimleri gosteriyordu.
Bu nedenle ben Value olarak LABEL kolonunu seciyorum.
Bu sekilde kaydedip raporu calistirin ve farkli para kodlarina gore olusmus barlardan birine tiklayin.
Gelen sayfada yalnizca o doviz kodu icin filtrelenmis detaylari goreceksiniz.

Iyi calismalar :)

APEX: Coklu Secim

Raporlama, data analizi, monitoring gibi ihtiyaclarimiz icin Oracle ‘in Application Express ‘ini kullaniyorsunuz.

Kullaniciya bolum kodu secebilecegi bir menu verdiginizi ve buna gore sorgunuzun calistigini dusunun.

WHERE bolum_kodu = :pv_bolumkodu

Peki, kullanicimizin ayni anda birden fazla bolum kodu secebilmesini istersek?
Elbette

WHERE bolum_kodu in (:pv_bolumkodu_1, :pv_bolumkodu2, :pv_bolumkodu3)

gibi degiskenlerimizi cogaltabiliriz. Ama ortada onlarca ya da daha fazla secenek varsa her olasilik icin bir degisken tanimlayacak degiliz :)

Ekrana bir Shuttle ya da coklu secime izin veren bir Select List koyarak kullanicidan birden fazla input parameter almak istedigimizi ve bu listenin n secenek icerdigini dusunelim.

Ornek.1 ‘deki gibi, Interaktif raporunuza sag tiklayarak Create Page Item secenegi ile bir Shuttle ekledigimizi varsayalim..

Ornek.1

olusturdugumuz Page Item ‘in adini, sorgumuzda kullandigimiz degisken gibi PV_BOLUMKODU olarak verelim.

Ardindan Static ya da Dynamic menu icerigi hazirlamamiz gerekecek.

Bunlari da tamamladiktan sonra yine Ornek.1 ‘de gorulen Create Page Item Button secenegi ile bu kez de sayfamiza bir buton yerlestirelim.

Tum bu temel hazirliklarin ardin, raporumuzu calistirmak icin

butona basildiktan hemen sonra, ama raporun execute edilmesinden de hemen once 

calisacak sekilde bir page process yazmamiz gerekecek.

O halde uygulamamiza Ornek.2 ‘de gorulecegi gibi bir Page Process ekleyelim.

Ornek.2

Temelde ihtiyacimiz olan sey kullanicinin secimlerini not edip, bu bilgiyi query ‘miz her calistiginda kosul olarak sorgumuza “soyleyebilmek”..

Bunu yapmak icin aklimiza bir cok -pratik ya da kompleks- ozgun cozum gelebilir. Fakat Oracle ‘in bu tur istekleri karsilamak uzere sundugu yapiyi da kullanabiliriz..

Bunun icin Page Process ‘imizin PLSQL blogunda string ‘imizi table ‘a donusturmek uzere bir seyler yazmayi deneyelim..

DECLARE
pv_secim apex_application_global.vc_arr2;
BEGIN       
pv_secim := apex_util.string_to_table (:pv_bolumkodu);
apex_collection.create_or_truncate_collection ('pv_shuttle');
apex_collection.add_members ('pv_shuttle', pv_secim );
END;
Ben bu islemi yalnizca menu secimini “hatirlamak” icin kullanmak istiyorum.. O yuzden secimi gercek bir tabloya yazmak yerine APEX_COLLECTION ile biriktirmeyi tercih ettim.
pv_secim degiskenimiz APEX_COLLECTION sayesinde, ekranda pv_bolumkodu ile gelen bind variable ‘lari row by row saklayacak.
Shuttle menunuzden:
  • a
  • b
  • c
  • d

 

olmak uzere 4 satir secmisseniz, secimleriniz a:b:c:d seklinde siralanacaktir.

Ustte yazdigimiz BEGIN END blogumuzu calistiralim ve PV_BOLUMKODU soruldugunda a:b:c:d girelim.

Statement calistiktan sonra
SELECT *
   FROM apex_collections;
tablosundan sonucu izledigimizde Ornek.3 ‘teki gibi bir goruntu aliyor olmaliyiz.
Ornek.3
Ne yapmaya calistigimizi anlamissinizdir :) Sonrasi oldukca kolay:
WHERE bolum_kodu = :pv_bolumkodu
demek yerine, artik
WHERE bolum_kodu IN (SELECT c001 
                     FROM apex_collections 
                     WHERE collection_name = 'PV_SHUTTLE'
                    )

diyebiliriz.