Scriptler ile Kaydet – Vazgeç Kontrolü

FileMaker varsayılan davranışı alanlardan çıktığınızda kaydı otomatik olarak kaydeder. Layout/Layout Setup menüsünden bu ayarı değiştirmek mümkün. Ancak bu çözüm UX (user experience) konusunda çok başarılı sayılmaz. Kayıt girmeye devam ederken farkında olmadan alan dışında bir konuma tıkladığınızda “Kaydedeyim mi?” diye soruyor. Sunulan seçenekler, kaydet, geri dönür ve vazgeç kullanıcının kafasını karıştırabiliyor.

 

Layout Options Penceresi ile otomatik kaydetme engellenebiliyor
Layout Options Penceresi

Daha iyi kullanıcı deneyimi için kullanıcıya kaydet/vazgeç düğmeleri ile kontrolü vermek daha doğru bir tercih olacaktır. Script (betik) ve script trigger (betik tetikleyicisi) kullanarak bunu sağlamak mümkün.

Standart olarak FileMaker’da alanlardan çıkıldığında başlatılan commit (kaydetme) prosedürü çalışıyor. Layout tercihlerine göre kaydı otomatik olarak kaydediyor veya “kaydedeyim mi” diyalog penceresini çıkartıyor.  için “commit” (kaydetme) prosesini durdurmak gerekiyor. Öncelikle yapmamız gereken alanlardan çıkıldığında başlayan bu prosesi durdurmak olacak. Bu konuda script trigger yardımı alıyoruz. “Before event” (olay öncesi) script triggerları Exit Script [0] şeklinde sonlandırdığınızda tetikleyen olayı durdurur. Mesela bu örnekte OnRecordCommit trigger’ı ile tetiklenen script 0 yanıtı ile sonlandırıldığında commit prosesini de durdurmuş olacak.

 

Scriptlerle kaydet/Vazgeç Kontrolü

Kullanacağımız yöntemin özetle anahtar noktaları;

  1. Trigger ile tetiklediğimiz script $$kaydet global değişkeni 1 değerini almadığı durumlarda işlemi durduracak.
  2. Kullanıcı kaydet düğmesine tıkladığında çalışan script ise öncelikle $$kaydet değişkenine 1 değerini atayıp commit prosesinin tamamlanmasını sağlayacak.
  3. Kullanıcı vazgeç düğmesine tıklarsa “Revert Record” ile değişiklikleri geri alacak.

Tabi bu 3 temel kuralın dışında ilave kontroller ile örneği zenginleştirdik. Örnek dosyamızda aynı zamanda FileMaker 16 yeniliklerinden Card tipinde pencere kullanımını gösterdik.

 

Ek dosya: Scriptler ile Kaydet-Vazgeç Kontrolü

FileMaker’da Pratik Log Tutma Örneği

Özellikle çoklu kullanıcı sistemlerde yapılan değişikliklerin ne zaman, kimin tarafından yapıldığını tutmak önemli hale geliyor. Log tutma aynı zamanda veri girişi yapan kullanıcıların daha dikkatli olmasını sağlıyor. Ayrıca yanlışlıkla yapılan değişikliklerde eski veriye ulaşma imkanı sunuyor.

Ancak FileMaker’ın standart bir log tutma özelliği yok. Auto-enter alanlar sayesinde sadece kayıt üzerinde en son değişikliği kimin ve ne zaman yaptığı bilgisini saklayabiliyoruz.

Son değişiklik tarihi yeterli olmadığı için alternatif loglama çözümlerini uzun zamandır kullanıyoruz. FileMaker 13’le beraber gelen Get(ModifiedFields) fonksiyonu ile çok pratik  şekilde log tutmak mümkün. Bu fonksiyonu kullanan eXcelisys firmasının çok güzel bir çözümü mevcut. Basitçe kendi uygulamanıza ekleyebiliyorsunuz.

Bu uygulamayı baz alarak örnek bir dosya hazırladık, örnek dosyayı yazının sonundaki bağlantıdan indirebilirsiniz. Yöntemin anlatıldığı makaleye ulaşmak için buraya tıklayabilirsiniz.

 

Dosyayı kendi veritabanınıza uygulamak için bir kaç adım yeterli;

  1. ChangeLogger özel fonksiyonunu dosyasınıza aktarın (FileMaker Pro Advanced gerektirir)
  2. TimeStamp (zaman damgası) tipinde, st_ModTS  isimli bir alan tanımlayın.
  3. st_ModTS alanının auto-enter seçeneğini değişiklik zamanını verecek şekilde düzenleyin.
  4. Metin tipinde, st_ChangeLog isimli bir alan tanımlayın.
  5. st_ChangeLog alanının auto-enter seçeneklerinde calculation olarak belirleyin ve aşağıdaki hesaplamayı girin
    Case ( st_ModTS ; Liste ( ChangeLogger ( Get ( ModifiedFields ) ; Self ) ; st_ChangeLog ) )
  6. st_ChangeLog alanı için auto enter seçeneklerinde “Do not replace exsiting value” seçeneğinin işaretini kaldırmayı unutmayın.
  7. Başlangıç scripti ile $$sistem_LogIstisnaAlanlar isimli global değişken oluşturun. Log tutamak istemediğiniz alanları bu değişkene yazın. Geri kalan tüm alanlarda otomatik olarak log tutulacak.

 

Ek Dosya: FileMaker Pratik Log Tutma Örneği