|
SuperStore veritabanındaki "customers" tablosu Süper Mağaza şirketinin müşterilerinin kayıtlarını saklamaktadır. Web uygulamamızda, Müşteri Ekle, Müşteri Sil, Müşteri Bilgilerini Değiştir gibi bu tabloyu güncelleyecek fonksiyonlar sağlamak istiyoruz.
Uygulamalı Adımlar:
| 1. | Yeni bir sayfa açın ve adını "Musteriler" olarak belirleyin. |
| 2. | Sayfanın üst tarafına "mor > Common > GraphicText" kütüphane elemanını yerleştirin ve "Metin Değeri" özelliğine "Müşteri Listesi" yazın. |
| 3. | Başlığın altına panel elemanı yerleştirin. İçine iki adet metin elemanı yerleştirin ve değerlerini "Ad" ve "E-Posta" olarak belirleyin. Bu, oluşturacağımız müşteri listesi tablosunun başlığı olacak. |
| 4. | Başlığın altına "zpro > ProcessForm" kütüphane elemanı yerleştirin.
|
| 1. | ProcessForm elemanının içine, üst tarafına bir İşlem Bloğu (Kütüphane elemanı "zpro > ProcessForm > ProcessBlock") yerleştirin ve adını "MusteriBlok" verin. Bu blok "SuperStore" veritabanının "customers" tablosunda yer alan her bir müşteri kaydı için tekrar edilecektir. |
| 2. | Bu elemanı tekrarlamaya uygun olacak şekilde (ince ve geniş) boyutlandırın. |
| 3. | Elemanın "İşlevsel | Tekrarlama | Her Bir .. İçin" özelliğine "/musteriler/item" değerini verin. Şimdi "Genel Tanımlar" sayfasında "musteriler" adlı bir veri kaynağı tanımlayacağız. |
| 4. | Sistem Kütüphanesinden "mor > RelDB > RelDBQueryDataSource" kütüphane elemanını sürükle bırak ile sayfaya yerleştirin ve özeliklerini aşağıdaki gibi belirleyin. |
Ad:
|
musteriler
|
Bağlantı Adı:
|
SuperStore
|
Sorgu (SQL):
|
SELECT * FROM customers
|
| 5. | Kütüphaneden "zpro > ProcessForm > ProcessBlock > SelectionBox" elemanını blok içine yerleştirin. Bu elemanı Yaslama & Çapalar araç çubuğu üzerindeki Sola Yasla ( ) düğmesine tıklayarak kolaylıkla bloğun sol-üst köşesine taşıyabilirsiniz. |
Seçim kutusu elemanının yanına iki adet "zpro > ProcessForm > ProcessBlock > EditBox" elemanı yerleştirin ve "NAME" ve "EMAIL" olarak adlandırın. Bu elemanları da aynı şekilde sola yaslayın.
| 6. | İşlem bloğu yazı kutularının başlangıç değerleri, müşteri kayıtlarındaki "NAME" ve "EMAIL" adlı alanların değerleri olacaktır. Çünkü bu elemanlar, "Değer" özelliklerinde yer alan "$vof(%vof(name))" tanımları sayesinde kendi adları ile aynı verikaynağı alanlarına bağlanmış durumdadır. Derleme sırasında bu tanımlar "$vof(NAME)" ve "$vof(EMAIL)" olarak çözümleneceği için "Değer" özelliklerinde ayrıca bir belirleme yapılmasına gerek yoktur. |
| 7. | Son olarak "MusteriBlok" adlı blok içine bir gizli kutu olan "zpro > ProcessForm > ProcessBlock > HiddenBox" elemanı yerleştirin ve "ID" (Kayıt Kimliği) olarak adlandırın. Bu eleman blok içinde tekrarlanan her bir kaydın kimliğini tutacaktır. Yazı Kutusu yerine Gizli Kutu elemanı seçmiş olmamızın nedeni bu kayıt numarasını kullanıcıya göstermemek ve değiştirilmesine izin vermemektir.
|
Yazı Kutusu elemanlarının "Doğrulama" özelliğini belirleyerek hataları daha ilk safhada önleyebiliriz.
| 1. | "NAME" adlı yazı kutusunun "Doğrulama | Gerekli" özelliğine "true" verin. |
| 2. | "EMAIL" adlı yazı kutusunun "Doğrulama | Gerekli" özelliğine "true" verin. |
| 1. | Kullanıcılara, seçilen müşteri kayıtlarını silme olanağı vermek için bir İlişkisel Veritabanı Güncelleme İşlemi kullanacağız. Kütüphaneden "mor > RelDB > RelDBUpdateProcess" elemanını alın, "MusteriBlok" adlı bloğun içine yerleştirin ve özelliklerini aşağıdaki gibi belirleyin. |
Ad
|
MusteriSil
|
Bağlantı Adı
|
SuperStore
|
Güncelleme Sorgusu (SQL)
|
DELETE FROM customers WHERE ID = @vof(f:ID)
|
Muhtemelen sorgu içinde yer alan @vof(f:ID) tanımının SQL söz dizimine uymadığını fark ettiniz. Bu doğru; JDBC sürücüsü üzerinden veritabanına iletilmeden önce çözümlenecek olan bu MScript fonksiyonu, o anda işlenmekte olan işlem kaydının "ID" adlı gizli alanının değerini döndürecektir.
| 2. | Şimdi silme işlemini harekete geçirecek olan komut düğmesini hazırlayalım. Kütüphaneden bir "zpro > ProcessForm > ExecuteCommand" elemanı alın ve işlem formunun içine "MusteriBlok" işlem bloğunun altına yerleştirin ve özelliklerini aşağıdaki gibi belirleyin. |
Değer
|
Sil
|
İşlem Listesi
|
<callProcess name="MusteriSil" if="_maxlcc = 0"
blockName="MusteriBlok" recordFilter="_selected"/>
|
Girişi Doğrula
|
false
|
Sonraki Sayfa
|
%vof(PAGE_NAME)
|
RelDBUpdateProcess işleminin sadece kullanıcı tarafından seçilen kayıtları silmesi için, İşlem Listesi diyaloğundaki "Kayıt Filtresi" alanının değeri "_selected" olarak belirlenmiştir. DİKKAT! Eğer bu alana bir değer girmezseniz "musteri" tablosunda var olan tüm kayıtlarınız silinir.

Kullanıcının sayfa üzerinde değiştirdiği müşteri kayıtlarını SuperStore veritabanının "musteri" tablosu üzerinde güncellemek istiyoruz.
| 1. | Kütüphaneden bir "mor > RelDB > RelDBUpdateProcess" elemanı daha alıp yine "MusteriBlok" bloğu içine yerleştirin ve özelliklerini aşağıdaki gibi belirleyin.
|
Ad
|
MusteriGuncelle
|
Bağlantı Adı
|
SuperStore
|
Güncelleme Sorgusu (SQL)
|
UPDATE customers SET
NAME = '@vof(f:NAME)',
EMAIL = '@vof(f:EMAIL)'
WHERE ID = @vof(f:ID)
|
Farkettiğiniz gibi "Güncelleme Sorgusu (SQL)" özelliğinde yine MScript fonksiyonları kullandık. Sorgulamayı işletmeden önce RelDBUpdateProcess işlem sınıfı, MoreMotion çatısından, sorgu içinde gömülü halde yer alan MScript ifadelerinin çözümlenmesini isteyecektir.
| 2. | Kütüphaneden bir "zpro > ProcessForm > ExecuteCommand" elemanı daha alın ve "MusteriBlok" işlem bloğunun altına, sağ tarafa yerleştirin ve özelliklerini aşağıdaki gibi belirleyin.
|
Değer
|
Güncelle
|
İşlem Listesi
|
<callProcess name="MusteriGuncelle" if="_maxlcc = 0" blockName="MusteriBlok" recordFilter="_modified"/>
|
Girişi Doğrula
|
true
|
Sonraki Sayfa
|
%vof(PAGE_NAME)
|
RelDBUpdateProcess işleminin sadece kullanıcı tarafından değiştirilen kayıtları güncellemesi için, İşlem Listesi diyaloğundaki "Kayıt Filtresi" alanının değeri "_modified" olarak belirlenmiştir.
Yeni müşteri kaydı eklemek için sayfa üzerinde "Yeni Müşteri Adı", "Yeni Müşteri E-Posta" gibi ilave girdi alanları sağlamayacağız. Kullanıcı önce "musteri" tablosuna boş bir kayıt girecek daha sonra ise bu kaydı güncelleyecek.
Yine bir RelDBUpdateProcess elemanı kullanacağız ancak bu defa bu elemanı aynı işlem bloğu içine yerleştiremeyiz. Çünkü "MusteriBlok" işlem bloğu tekrarlayan bir bloktur ve tek bir müşteri kaydı eklemek için uygun değildir. Bu nedenle işlem elemanını işlem formunun (ProcessForm) içinde kalacak şekilde işlem bloğunun dışına yerleştireceğiz.
Bir işlem elemanı bir işlem bloğu yerine doğrudan bir işlem formunun içine yerleştirildiğinde, çalışma zamanında İşlem Yöneticisi ilgili işlem sınıfına parametre olarak boş bir işlem bloğu geçirir.
| 1. | Kütüphaneden bir "mor > RelDB > RelDBUpdateProcess" elemanı daha alıp bu defa işlem bloğunun dışına, işlem formunun içinde olacak şekilde, yerleştirin ve özelliklerini aşağıdaki gibi belirleyin. |
Ad
|
MusteriEkle
|
Bağlantı Adı
|
SuperStore
|
Güncelleme Sorgusu (SQL)
|
INSERT INTO customers (NAME) VALUES('Yeni Musteri')
|
"customers" tablosunun "ID" adında bir kayıt kimliği alanı vardır. Bu alanın değeri Apache Derby, MySQL ve MS SQL Server veritabanlarında otomatik olarak veritabanı tarafından verilir. Ancak Oracle veritabanının böyle bir özelliği yoktur. Bunun yerine Oracle veritabanı, Sıralama (Sequence) nesneleri kullanılmasını öngörmektedir. Bu nedenle eğer sizin veritabanınız Oracle ise Güncelleme Sorgusunu aşağıdaki gibi verin.
Oracle veritabanı için
Güncelleme Sorgusu (SQL)
|
INSERT INTO customers (ID, NAME)
VALUES (customers_seq.NEXTVAL, 'Yeni Musteri')
|
| 2. | Yeni müşteri ekleme işlemini harekete geçirecek olan düğme için kütüphaneden bir "zpro > ProcessForm > ExecuteCommand" elemanı daha alarak işlem formunun içine, diğer komut düğmelerinin yanına yerleştirin ve özelliklerini aşağıdaki gibi belirleyin. |
Değer
|
Yeni Ekle
|
İşlem Listesi
|
<callProcess name="MusteriEkle" if="_maxlcc = 0"/>
|
Girişi Doğrula
|
true
|
Sonraki Sayfa
|
%vof(PAGE_NAME)
|
İşlem listesindeki, "Kayıt Filtresi" bu defa boş olarak bırakılmıştır. Ayrıca işlem listesi değerinde de görüldüğü gibi ait olduğu herhangi bir ProcessBlock yok.
"Musteriler" sayfası için herşey hazır. Artık sayfamızı yeniden test edebiliriz:
| 1. | 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. |
| 2. | "index" sayfası üzerinde ki "Müşteriler" köprüsüne tıklayıp hazırladığınız sayfayı görüntüleyerek geliştirdiğiniz işlemleri test edebilirsiniz. |
|