''Güncel Sipariş'' Sayfasını Hazırlamak

Top  Previous  Next

"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.
5.Siparişi vermek.
 

Ş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.

 
"musteriler" ve "personeller" Veri Kaynaklarını Tanımlamak

"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.

CurrentOrder_

Artık İşlem Elemanlarını Yerleştirebiliriz

"SiparisBlok" İşlem Bloğu içindeki İşlem Tanımı
 

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.
 
Oracle İçin

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;

 

"SepetUrunleri" İşlem Bloğu içindeki İşlem Tanımları

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.

Oracle İçin

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, Komut Düğmeleri

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.

 

CurrentOrder_tr

Test için hazır

Projeyi "Derle ve Dene"[Shift+F9] butonuna basıp test edebilirsiniz.

 

camera2

Nasıl yapıldığını izle