24
2011
SAP Business Object de Universe,Loop,Alias ve Context Üzerine -2
Merhaba Arkadaşlar,
SAP BO ilgili 2.yazımız ile devam ediyoruz. Bu yazımızda işimizin kolay olmadığını belirtmiştim.
Geçen yazımızda İş Objelerinin sürekle bırak mantığı ile çalışmasına rağmen bu işlemin aslında veritabanına gönderilecek olan sorgunun hazırlanması olduğundan bahsetmiştik. Ayrıca ilgili sorgunun hazırlanması Evren tasarımında biz geliştiricilerin tanımlamalarına göre şekil aldığını belirtmiştik. Bu noktada şu gerçek ortaya çıkmaktadır o da “İlişkilerin doğru bir şekilde oluşturulması”. Aksi takdirde doğru ilişkiler tanımlanmazsa yanlış sorgular üretilecektir.
Örnekledirirsek; Birbiriyle ilişkili birçok tablonun raporlanacağı Evrenlerde hedef olarak yazılmasını istediğimiz sorgunun yanlış olarak yazılması mevzuu bahis olabilir. Özellikle birbiriyle ilişkili kırılımların süreklenip bırakılması(yani aynı sorgu içerisine) bizim sorgu içerisine girmesini istemediğimiz fazladan bağlamaların(join) işin içine girmesi ve sonuç olarak beklediğimizden daha az sonuç satırı demek olabilir. Biz bunlara Döngü(Loop) adını veriyoruz.
Meselenin daha iyi anlaşılması için senaryomuzu oluşturalım. Senaryomuz yine satış üzerine olsun. Aşağıdaki tabloları oluşturuyoruz.
- Mağaza
- Mamul
- Müşteri
- Şehir
- Satış
CREATE TABLE [dbo].[t_dim_magaza]( [magaza_id] [int] NULL, [magaza_adi] [varchar](50) NULL, [sehir_id] [int] NULL ) ON [PRIMARY] CREATE TABLE [dbo].[t_dim_mamul]( [mamul_id] [int] NULL, [mamul_adi] [varchar](150) NULL ) ON [PRIMARY] CREATE TABLE [dbo].[t_dim_musteriler]( [musteri_id] [int] NULL, [musteri_adi] [varchar](50) NULL, [sehir_id] [int] NULL ) ON [PRIMARY] CREATE TABLE [dbo].[t_dim_sehir]( [sehir_id] [int] NULL, [sehir] [varchar](50) NULL ) ON [PRIMARY] CREATE TABLE [dbo].[t_fact_satis]( [magaza_id] [int] NULL, [musteri_id] [int] NULL, [mamul_id] [int] NULL, [adet] [int] NULL
Yukarıdaki scriptleri kullanarak tablolarımızı oluşturalım ve ilişkisel olarak tablolarımıza bir bakalım. Öncelikle t_fact_satis Unsur tablo olarak Adet ölçütünü ve Mağaza,Mamul ve Musteri kırılımlarını içinde bulundurmakta.
Diğer yandan kırılım tablolarımıza baktığımızda bir durum dikkatimizi çekiyor. Şehir kırılımı hem Müşteri hem de Mağaza kırılımlarının detayı olarak veritabanında saklanıyor. BO Evren Tasarımcısını açarak girip oluşan manzaraya bir bakalım.
Tasarımımızı resimdeki gibi oluşturduk. İşaretli kısma bastığımızda Döngü olduğuna dair uyarımızı alıyoruz.
Peki neden aldık bu hatayı ? Olası bir rapor üzerine konuşalım. Kullanıcı tüm kırılımlarını (Şehir,Mağaza,Mamul ve Müşteri) raporu ekleyip Adet ölçütüne elde etmeye çalışsın. Döngü problemi çözülmeden sorgu bazında yazılacak bağlamlar(join) tahmin ettiğiniz gibi aşağıdaki gibi olacaktır.
FROM dbo.t_dim_satis satis, dbo.t_dim_mamul mamul, dbo.t_dim_musteriler musteriler, dbo.t_dim_magaza magaza, dbo.t_dim_sehir sehir WHERE satis.mamul_id=mamul.mamul_id AND satis.musteri_id=musteriler.musteri_id AND satis.magaza_id=magaza.magaza_id AND magaza.sehir_id=sehir.sehir_id AND musteriler.sehir_id= sehir.sehir_id
Bu masum ve doğru gibi görünen sorgu bir mantık hatası içermektedir o da sonuç olarak döndürülen satışların sadece müşterilerin kendi şehirlerindeki mağazalarda yapmış olduğu alışverişleri içermesidir. Ancak müşteri isterse gidip farklı bir şehirdeki mağazadan da alışveriş yapabilir!
Peki bu sorun nasıl çözülmelidir? Bu noktada Yol gösterme(Context) yöntemi ile problemimizi çözüyoruz..
Yol gösterme metodu ile yolumuzu tanımlayarak Tasarımcımızın doğru ifadeyi oluşturmasını sağlıyoruz.
....... ........ FROM ..... WHERE satis.mamul_id=mamul.mamul_id AND satis.musteri_id=musteriler.musteri_id AND satis.magaza_id=magaza.magaza_id AND magaza.sehir_id=sehir.sehir_id
şeklinde sorgumuzu düzenlemiş oluyoruz.
Yada problemimizi Eşlenik(Alias) kullanarak çözebilirdik. Bu amaçla Şehir tablomuzun bir kopyasını oluşturup onunla bağlama(join)e girmemesi amacı ile Müşteri tablosu ile ilişkilendirirdik. Bu şekilde Evren üzerinde Şehir tablosunun Müşteri ile de ilişki olduğunu ancak sorgu içerisine dahil edilmeyerek döngünün kırılmasını sağlamış olurduk.
Herkese iyi çalışmalar.
Kariyer
- Yazılım Geliştirme Uzmanları
MobilMutfak - Java Yazılım Uzmanı
Yapı Kredi Emeklilik - Java Yazılım Uzmanı
Universal Bilgi Teknolojileri - Yazılım Geliştirmeci ve Proje Mühendisi
Yapı ve Kredi Bankası - Java Yazılım Uzmanı
Abaküs Finansal Yaz. A.Ş













Üstad eline sağlık, faydalı bir yazı olmuş.