VIEW’ler fiziksel tablolar üzerinde gerçekleştirilen sorguların sonuçlarını benzer mantıksal yapılardan oluşan VIEW’leri kullanarak, view’lerin sunduğu verileride aynı fiziksel tablolar üzerinden yapılan sorgu işlemi gibi basitçe gerçekleştirmemize yardımcı olur.
View’ler, tablolar gibi veriyi fiziksel olarak barındırmazlar. Sadece fiziksel tablolar içerisindeki verileri belirtilen sorguları tekrar çağırarak tablo yapısına uygun view çerçevesine yerleştirilerek sunulur. Bu yüzden VIEW’lerin mantıksal yapıları Fiziksel tablolarla aynıdır. Her ikisininde kolonları ve satırları bulunur.
Birden fazla tablo üzerinden yapılması gereken JOIN sorguları karmaşıklığa yol açabilir. özellikle bu gibi durumlarda yazılım geliştirme sürecinde ciddi anlamda fayda sağlayabilirler. Bir diğer güzel tarafıda, oluşturduğumuz view’leri okuma ve yazma olarak yetkilendirilebileceğinden, güvenlik açısından ciddi anlamda fayda sağlayacaktır.
SAP ABAP ile View kullanımına ilişkin, VIEW nasıl oluşturulur ve ABAP programlamada bu view nasıl kullanılır ile ilgili detaylı aşamaları aşağıda okuyabilirsiniz…
İlk olarak SE11 transaction’u üzerinden View radyo butonunu seçerek oluşturacağımız VIEW’ın adını belirliyoruz.
Açılan pencereden Database view seçeneği ile devam ediyoruz.
Database View için gerekli kısa açıklamayı yazdıktan sonra, Table/Join Conditions sekmesi altında bulunan TABLES alanında, hangi tablolar üzerinde çalışacağımızı belirliyoruz. Örnek olarak MARA-MARD-MARC tablolarunu join’lemek istediğimizde,
Tables alanına MARA’yı yazarak en altta yer alan Relationships butonu ile bu tablonun hangi tablolarla ilişkisi olduğunu bulabiliriz.
Örneğimizde MARA ile ilişkisi olan MARD ve MARC tablolarını ilişki listesinden seçerek ilerliyoruz.
Seçimleri yaptığımızda ekran üzerinde MARA ile MARD ve MARC tablolarının hangi key’ler üzerinden ilişkilendirilebileceği otomatik olarak doldurulmaktadır.
İlişkisel olarak bu 3 tabloyu join ile birleştirdik. Şimdi sırada bu tablolardan dönen hangi alanları ekrana yazdırmak istediğimizde. Ekrana 3 tablodan hangi alanları yazdıracağımızı belirlemek için View Fıelds sekmesi altında yer alan Table Fields butonuna basılır ve Alanını bastırmak istediğimiz tablo seçilir.
Tabloyu seçtikten sonra o tabloya ait alanların listesi ekrana gelir. Bu listeden ekrana bastırılacak olan alanlar seçilir. Aynı işlem her tablo için tekrar gerçekleştirilir.
Örnek olarak Mara tablosundan MATNR, MEINS alanları, MARC tablosundan WERKS alanı ve son olarak MARD tablosundan ERSDA alanını ekrana bastırılacak alanlar olarak belirledik.
Eğer bu sorgu için belirleyeceğiniz bir koşul bulunuyorsa SELECTION CONDITIONS alanında bu koşulları belirleyebilirsiniz. Tüm sorgu işlemi tamamlandıktan sonra bu view’in okuma ve yazma yetkisini belirleyeceğiniz Maint. Status sekmesine ilerleyerek bu işlemide tamamlayabiliriz. Ve son olarak View’i aktifleştirdikten sonra ABAP kodumuzda nasıl çağıracağımıza bakabiliriz.
Oluşturduğumuz View’ın sunacağı verileri ABAP ile ALV rapor olarak ekrana bastırmak istediğimizde aslında normal sorgu işleminden farklı birşey yapmıyoruz. Yukarıda bahsettiğim gibi VIEW bir tablo değil ancak mantıksal olarak aynı yapıya sahip olduğundan dolayı Tablo Tipi referansıyla verileri bir internal tabloya aşağıdaki şekilde alıp ALV olarak tabloyu bastırabiliriz.
REPORT ZVIEW_DEMO_PROGRAM. " Define Internal Table typ of Database View DATA : LT_VIEW TYPE TABLE OF ZVIEW_DEMO. " Call data from Database View SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_VIEW FROM ZVIEW_DEMO UP TO 1000 ROWS. " Alv Display DATA GO_ALV TYPE REF TO CL_SALV_TABLE. TRY. CL_SALV_TABLE=>FACTORY( IMPORTING R_SALV_TABLE = GO_ALV CHANGING T_TABLE = LT_VIEW[] ). CATCH CX_SALV_MSG. ENDTRY. DATA: LR_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS_LIST. LR_FUNCTIONS = GO_ALV->GET_FUNCTIONS( ). LR_FUNCTIONS->SET_ALL( 'X' ). IF GO_ALV IS BOUND. GO_ALV->DISPLAY( ). ENDIF.
Bu kod bloğu sonucunda programı çalıştırdığımızda aşağıdaki şekilde sonucu alacağız.