|
"products" tablosunda yer alan ürün kayıtlarını "Urunler" adlı bir sayfada listelemek istiyoruz. Bu sayfa üzerinde kullanıcılar bir ürün kategorisi seçerek listedeki ürünleri süzebilecekler veya ürün listesinden bir yada daha fazla ürün seçerek sipariş sepetine ekleyebileceklerdir.
Geçen bölümde olduğu gibi gerekli olan tüm elemanları tek tek oluşturma yerine bu defa kütüphanenin "Egitmen" dizinindeki önceden hazırlanmış elemanları kullanarak zamandan kazanacağız.
Uygulamalı Adımlar:
| 1. | Proje kaşifinde "Site1" seçili iken yeni bir sayfa oluşturun ve adını "Urunler" olarak belirleyin. |
| 2. | "Egitmen > Urunler > Baslik" kütüphane elemanını sayfanın üst tarafına yerleştirin. |
| 3. | Başlığın altına "Egitmen > Urunler > UrunListesi" kütüphane elemanını yerleştirin. |

"UrunListesi" bir işlem formudur. İçinde bir başlık bölümü ve veritabanı sorgusundan dönen her bir ürün için tekrarlayan bir işlem bloğu mevcuttur.
| 3. | İşlem bloğunun "Tekrarlama | Her Bir .. İçin" özelliğini özellik editöründe inceleyin. |
| 4. | "urunler" veri kaynağını özelliklerini inceleyin. |
Ad
|
urunler
|
Bağlantı Adı
|
SuperStore
|
Sorgu (SQL)
|
SELECT * FROM products
|
| 5. | Sonra Basit Araç Çubuğundaki "Derle ve Dene"[Shift+F9] butonuna basın. Application Studio Dahili Web Tarayıcınızı açacak ve uygulamanın "index" sayfasının gösterilmesini sağlayacaktır. |
| 6. | "index" sayfası üzerindeki "Ürünler" köprüsüne tıkayın. |
Sayfamızda veritabanında yer alan tüm ürünleri listelemekteyiz.
Şimdi yapmak istediğimiz; kullanıcıya kategori seçim şansı vermek ve seçim yapıldığında sayfada sadece seçilen kategoriye dahil olan ürünleri listelemektir.
| 1. | "Urunler" sayfasına geri dönün. |
| 2. | Sayfadaki "UrunListesi" elemanının üst tarafına "Egitmen > Urunler > KategoriSec" kütüphane elemanını yerleştirin. |
| 3. | Bu karma kutu elemanının "Olaylar | Değişince" olayını özellik editöründe inceleyin ve seçilen karma kutu değerinin nasıl "kat" parametresi ile display servisine gönderildiğine dikkat edin. |
| 4. | Şimdi "urunler" veri kaynağının üzerinde çift tıklayın, daha sonra açılan SQL penceresinde "Sorgu (SQL)" özelliğinde yeralan sorguyu eklemeler ile aşağıdaki gibi düzenleyin. |
Ad
|
urunler
|
Sorgu (SQL)
|
SELECT * FROM products
@doif(i:kat != '')
WHERE PCAT_ID = @vof(i:kat)
@doend()
|
Seçilen kategoriye ait olan ürünleri süzen WHERE ifadesi, ancak "kat" istek parametresi bir değer içeriyorsa sorguya dahil edilecektir.
| 5. | Kütüphaneden "mor > RelDB > RelDBQueryDataSource" elemanını sayfada herhangi bir yere yerleştirin ve özelliklerini aşağıdaki gibi belirleyin. |
Ad
|
kategoriler
|
Bağlantı Adı
|
SuperStore
|
Sorgu (SQL)
|
SELECT * FROM product_categories
|
| 6. | Diyaloğu kapatın, projeyi yeniden derleyin ve test edin. |
Sayfadaki "UrunListesi" elemanı "ProcessForm" kütüphane elemanından türetilmiştir. Eğer amacımız sadece ürünleri listelemek olsaydı bir ProcessForm kullanmamıza gerek olmazdı. Ancak biz, ayrıca listeden seçilen ürünleri güncel siparişe ekleyebilmek istiyoruz; bu nedenle işlem formuna ihtiyacımız var.
"UrunBlok" bir işlem bloğudur ve metin alanlarının dışında "ID" adlı bir gizli alanı da içermektedir. Bu alanların değerleri "urunler" veri kaynağından almaktadırlar. Ürünler kullanıcı tarafından seçilip [Siparişe Ekle] komutu verildiğinde, "ID" alanında saklı bulunan ürün kayıt kimliklerini "cart" tablosuna ekleyerek seçilen ürünleri siparişe eklemiş olacağız.
| 1. | Kütüphaneden "mor > RelDB > RelDBUpdateProcess" elemanını "UrunBlok" adlı işlem bloğunun içine yerleştirin ve özelliklerini aşağıdaki gibi belirleyin. |
Ad
|
SepeteEkle
|
Bağlantı Adı
|
SuperStore
|
Güncelleme Sorgusu (SQL)
|
selecT COUNT(*) AS v:CNT FROM cart WHERE PRODUCT_ID = @vof(ID);
@doif(v:CNT > 0)
UPDATE cart SET
QUANTITY = QUANTITY + 1
WHERE PRODUCT_ID = @vof(ID);
@doelse()
INSERT INTO cart
(PRODUCT_ID, QUANTITY, USER_ID)
VALUES (@vof(ID), 1, 0) ;
@doend()
|
Mevcut değilse yeni ekle, mevcut ise miktarı arttır
"SepeteEkle" işleminin sadece seçili kayıtlar için işletilmesini sağlamak üzere kayıt filtresi -bir sonraki adımda eklenecek olan komutun işlem listesinde- "_selected" olarak tanımlanacaktır. Blok kayıtlarının içinde yer alan "ID" alanının değeri, selecT COUNT(*) AS v:CNT FROM cart WHERE PRODUCT_ID = @vof(ID); ifadesinde kullanılacak ve seçilen ürünün "cart" tablosunda zaten mevcut olup olmadığı kontrol edilebilecektir.
Bu sayede aynı ürünün sipariş içinde birden fazla defa yer alması engellenebilecek, aynı ürün için ikinci defa ekle komutu verildiğinde yeni bir kayıt oluşturmak yerine "cart" tablosundaki mevcut kayıt bulunacak ve onun "QUANTITY" değeri bir arttırılacaktır.
Oracle Veritabanı İçin
Oracle veritabanı için "SepeteEkle" güncelleme sorgusunun INSERT ifadesi farklılık gösteriyor:
Güncelleme Sorgusu (SQL)
|
INSERT INTO cart
(ID, PRODUCT_ID, QUANTITY, USER_ID)
VALUES (CART_SEQ.NEXTVAL, @vof(ID), 1, 0);
|
"cart" tablosunda "USER_ID" alanına girilen 0 değeri, security bileşeninin devreye alınmasından sonra, "Web Uygulamasını Tamamlamak" başlıklı bölümde, geçerli kullanıcı no ile değiştirilecektir.
| 2. | Kütüphaneden "zpro > ProcessForm > ExecuteCommand" elemanını "UrunListesi" işlem formunun sol alt tarafına yerleştirin ve özelliklerini aşağıdaki gibi belirleyin. |
Ad
|
Ekle
|
Değer
|
Siparişe Ekle
|
İşlem Listesi
|
<callProcess name="SepeteEkle" if="_maxlcc = 0"
blockName="UrunBlok" recordFilter="_selected"/>
|
Girişi Doğrula
|
false
|
Sonraki Sayfa
|
%vof(PAGE_NAME)
|
Kullanıcı listeden bir ya da daha fazla ürün seçip [Siparişe Ekle] komut düğmesine bastığında, seçilen ürünler "cart" tablosuna eklenecektir. Sepetimizdeki ürünleri, ilerki bölümlerde geliştirecek olduğumuz "GuncelSiparis" sayfasında görüntüleyeceğiz.
O zamana kadar sepete eklenen kayıtları kontrol etmek için SuperStore veritabanının "cart" tablosunu inceleyebilirsiniz.
| 3. | Bu sayfadaki geliştirmelerimiz tamamlandı. Projeyi "Derle ve Dene"[Shift+F9] butonuna basıp sayfayı test edin. Sayfayı tarayıcıda test ederken; ürünleri listeleme, karma kutudan kategori seçimi yaparak ürünleri süzme ve seçtiğimiz ürünleri sepete atma gibi işlevleri deneyin. |
|