|
"GuncelSiparis" sayfasında kullanıcılar şu işlemleri yapabileceklerdir:
| 1. | Hazırlanmakta olan siparişin içeriğini görmek. |
| 2. | Siparişin müşteri, satış temsilcisi ve sipariş tarihi bilgilerini belirlemek. |
| 3. | Siparişe dahil edilmiş olan ürünlerin miktarlarını değiştirmek. (güncellemek) |
| 4. | İstenmeyen ürünleri siparişten silmek. |
Şimdi bu işlemlerin yapılabileceği sayfamızı geliştirelim.
Uygulamalı Adımlar:
| 1. | Proje Kaşifinde "Site1" seçili iken yeni bir sayfa oluşturun ve adını "GuncelSiparis" olarak belirleyin. |
| 2. | "Egitmen > GuncelSiparis > Baslik" kütüphane elemanını sayfanın üst tarafına yerleştirin. "Güncel Sipariş" yazısını içeren bu eleman sayfamızın başlığı olacaktır. |
| 3. | Bu başlığın altına yine kütüphaneden "zpro > ProcessForm" elemanını yerleştirin. |
| 4. | "Egitmen > GuncelSiparis > SiparisBlok" kütüphane elemanını "ProcessForm" elemanı içine yerleştirin. |
| 5. | "SiparisBlok", "CUSTOMER_ID" ve "EMPLOYEE_ID" adlarında iki adet "zpro > ProcessForm > ProcessBlock > ComboBox" elemanı ve "ORDER_DATE" adında 1 adet "mor > DateNum > DateDialog" elemanı içermektedir. |
"CUSTOMER_ID" ve "EMPLOYEE_ID" karma kutularına veri sağlayan "musteriler" ve "calisanlar" adlı iki adet veri kaynağı vardır. Bu veri kaynağı elemanlarının özellikleri şöyledir:
"musteriler" veri kaynağının özellikleri:
Ad
|
musteriler
|
Bağlantı Adı
|
SuperStore
|
Sorgu (SQL)
|
SELECT * FROM customers
|
"calisanlar" veri kaynağının özellikleri:
Ad
|
calisanlar
|
Bağlantı Adı
|
SuperStore
|
Sorgu (SQL)
|
SELECT * FROM employees
|
| 1. | "CUSTOMER_ID" ve "EMPLOYEE_ID" isimli karma kutuların nasıl veri ile dolduğunu incelemek için üzerlerinde sağ tıklayıp "Seçenekler İçin Veri Kaynağı..." özelliklerini inceleyin. |
| 2. | İşlem formu içine "SiparisBlok" elemanının altına "Egitmen > GuncelSiparis >SepetUrunleri" kütüphane elemanını yerleştirin. "SepetUrunleri" içinde yer alan ve sepet tablosunda var olan ürünleri listeleyen "sepet" veri kaynağının özellikleri aşağıdaki gibidir. |
Ad
|
sepet
|
Bağlantı Adı
|
SuperStore
|
Sorgu (SQL)
|
SELECT
c.ID, c.PRODUCT_ID, c.QUANTITY,
p.NAME, p.PRICE,
p.PRICE * c.QUANTITY as LINETOT
FROM
cart c, products p
WHERE
c.PRODUCT_ID = p.ID
|
| 3. | İşlem formu içine "SepetUrunleri" altına "Egitmen > GuncelSiparis > GenelToplam" elemanını yerleştirin. |
Bu elemanda yer alan "$vof(sum(/sepet/item/LINETOT))" ifadesi, "sepet" veri kaynağındaki satır toplamı ("LINETOT" alanı) değerlerinin, XSL sum() fonksiyonu ile genel toplamını hesaplamaktadır.

| 1. | "SiparisBlok" işlem bloğu içine bir "mor > RelDB > RelDBUpdateProcess" elemanı yerleştirin ve özelliklerini aşağıdaki gibi belirleyin. |
Ad
|
SiparisTablosunaEkle
|
Bağlantı Adı
|
SuperStore
|
Güncelleme Sorgusu (SQL)
|
INSERT INTO orders
(CUSTOMER_ID, EMPLOYEE_ID, ORDER_DATE, STATUS)
VALUES (@vof(CUSTOMER_ID), @vof(EMPLOYEE_ID),
'@vof(ORDER_DATE)', 'Created');
selecT MAX(ID) AS v:ORDER_ID FROM orders;
|
Bu işlem çağrıldığında RelDBUpdateProcess işlem sınıfı "orders" tablosuna yeni bir kayıt ekleyecek ve eklenmiş olan kaydın numarasını v:ORDER_ID adlı değişkene kaydedecektir.
Eğer bir RelDB sorgusu ";" karakterleri ile ayrıştırılmış birden çok ifade (STATEMENT) içeriyorsa, bu ifadeler sıra ile tek tek işletilir. Daha önce de açıklandığı gibi işletilmeden önce SQL ifadesi içinde yer alan özel @vof() tanımları ilgili değişken değerleri ile çözümlenecektir.
Şimdi güncelleme sorgusunun 2. SQL ifadesine bakın. selecT kelimesi o şekilde yanlışlıkla yazılmadı. (Son karakter büyük harfle diğer tüm karakterler küçük harflerle yazılmış). Bu RelDBUpdateProcess işlemine özel bir talimattır. Bu tür özel sorgular ile tek bir sonuç kaydı elde edilmesi amaçlanır ve sonuç kaydında yer alan alanların MScript değişkenlerine aktarılması sağlanır.
Bizim örneğimizde selecT MAX(ID) AS v:ORDER_ID FROM orders; ifadesi ile son eklenen kaydın kimliğinin "ORDER_ID" adlı bir havuz değişkenine aktarılması amaçlanmıştır. Bu değer daha sonra "orderdetails" tablosuna kayıt eklerken detay kayıtları ile ana kayıt arasında bir bağ kurmak için kullanılacaktır.
Eğer kullandığınız veritabanı Oracle ise "Güncelleme Sorgusu" aşağıdaki gibi farklı olmalıdır.
Güncelleme Sorgusu (SQL)
|
INSERT INTO orders
(ID, CUSTOMER_ID, EMPLOYEE_ID, ORDER_DATE, STATUS)
VALUES (orders_seq.NEXTVAL, @vof(CUSTOMER_ID), @vof(EMPLOYEE_ID),
'@vof(ORDER_DATE)', 'Created');
selecT MAX(ID) AS v:ORDER_ID FROM orders;
|
Seçilen ürünleri sepetten çıkarmak ve ürünleri "orderdetails" tablosuna kopyalamak için 2 adet işleme ihtiyacımız var.
| 1. | Kütüphaneden "mor > RelDB > RelDBUpdateProcess" işlem elemanını alın, "SepetUrunleri" adlı bloğun içine yerleştirin ve özelliklerini aşağıdaki gibi belirleyin. |
Ad
|
SepettenCikart
|
Bağlantı Adı
|
SuperStore
|
Güncelleme Sorgusu (SQL)
|
DELETE FROM cart WHERE ID = @vof(f:ID)
|
Bu sorgu, seçilen her bir sepet ürünü için çalışacak ve @vof(f:ID) ifadesinin sağladığı kayıt kimliğine sahip sepet ürünü "cart" tablosundan (sepetten) silinecektir.
| 2. | Kütüphaneden "mor > RelDB > RelDBUpdateProcess" işlem tanım elemanını alın, "SepetUrunleri" adlı bloğun içine yerleştirin ve özelliklerini aşağıdaki gibi belirleyin. |
Name
|
SiparisdetayTablosunaEkle
|
Bağlantı Adı
|
SuperStore
|
Update Query (SQL)
|
INSERT INTO orderdetails
(ORDER_ID, PRODUCT_ID, QUANTITY, UNIT_PRICE)
VALUES(@vof(v:ORDER_ID), @vof(PRODUCT_ID),
@vof(QUANTITY), @vof(PRICE))
|
Bu işlemin görevi "SepetUrunleri" işlem bloğu içinde yer alan tüm ürünleri "orderdetails" tablosuna eklemektir. Hatırlayacaksınız; @vof(v:ORDER_ID) değişkeninin değeri daha önce "SiparisTablosunaEkle" işleminin sorgusu içinde selecT MAX(ID) AS v:ORDER_ID FROM orders; ifadesi ile elde edilmişti.
Güncelleme Sorgusu (SQL)
|
INSERT INTO orderdetails
(ID, ORDER_ID, PRODUCT_ID, QUANTITY, UNIT_PRICE)
VALUES(orderdetails_seq.NEXTVAL, @vof(v:ORDER_ID),
@vof(ID), @vof(QUANTITY), @vof(PRICE))
|
Son olarak 2 adet "zpro > ProcessForm > ExecuteCommand" elemanını işlem formu içine yerleştirip değerlerini belirleyeceğiz.
| 1. | "zpro > ProcessForm > ExecuteCommand" elemanını işlem formu içine, "GenelToplam" elemanının altına, sol tarafa yerleştirip özelliklerini aşağıdaki gibi belirleyin. |
Ad
|
Sil
|
Değer
|
Sil
|
İşlem Listesi
|
<callProcess name="SepettenCikart" if="_maxlcc = 0"
blockName="SepetUrunleri" recordFilter="_selected"/>
|
Girişi Doğrula
|
false
|
Sonraki Sayfa
|
%vof(PAGE_NAME)
|
Bu komut düğmesine basıldığında sadece seçili olan ürünlerün siparişten çıkartılması için kayıt filtresi "_selected" olarak belirlenmiştir.
| 2. | "zpro > ProcessForm > ExecuteCommand" elemanını işlem formu içine, "GenelToplam" elemanının altına, sağ tarafa yerleştirip özelliklerini aşağıdaki gibi belirleyin. |
Ad
|
Gonder
|
Değer
|
Siparişi Gönder
|
İşlem Listesi
|
<callProcess name="SiparisTablosunaEkle" if="_maxlcc = 0" blockName="SiparisBlok"/>
<callProcess name="SiparisdetayTablosunaEkle" if="_maxlcc = 0" blockName="SepetUrunleri"/>
<callProcess name="SepettenCikart" if="_maxlcc = 0"/>
|
Girişi Doğrula
|
true
|
Sonraki Sayfa
|
%vof(PAGE_NAME)
|
Bu komut düğmesi hazırlanmış olan siparişin verilmesini gerçekleştirecektir. Listedeki 1. işlem "orders" tablosunda bir kayıt oluşturacak. 2. işlem "cart" tablosundaki ürünleri "orderdetails" tablosuna kaydedecek ve 3. ve son işlem ise "cart" tablosundaki tüm kayıtları silerek (o nedenle kayıt filtresi verilmemiştir) sepeti boşaltacaktır.

Test için hazır
Projeyi "Derle ve Dene"[Shift+F9] butonuna basıp test edebilirsiniz.
|