Fonksiyon Türleri

Top  Previous  Next

MoreMotion Application Studio ile uygulama geliştirirken değişik yerlerde ve farklı amaçlarla fonksiyonlar kullanırız. Başlangıçta nerede hangi tür fonksiyonların kullanılacağı biraz karışık görülebilir. Bu bölümün amacı zihinlerde oluşan bu karışıklığı gidermektir.

Bir uygulama geliştirirken kullanılabilecek fonksiyonlar, türleri açısından üçe ayrılır

1. Derleme Zamanı Fonksiyonları: CScript Fonksiyonları ( % Fonksiyonlar)

Sayfalar içinde kullanılan elemanların tüm özellikleri içinde kullanılabilirler. Baş taraflarında '%' karakteri bulunan bu fonksiyolar derleme sırasında işletilirler. Derleme işlemi tamamlandıktan sonra eleman özelliklerinde bu fonksiyonlardan eser kalmaz.

Eğer, örneğin, bir metin elemanının "Değer" özelliğinde "Sayfa Adı: %vof(PAGE_NAME)" şeklinde bir metin varsa derleme işlemi sırasında %vof(PAGE_NAME) fonksiyonu çalışacak ve güncel sayfanın değerini döndürecektir. Sonuçta "Sayfa Adı: Ürünler" benzeri bir metin elde edilmiş olacaktır.

Bakın Derleme Zamanı Fonksiyonları

2. Çalışma Zamanı Fonksiyonları: MScript Fonksiyonları ( @ Fonksiyonlar )

MScript fonksiyonları MoreMotion AF tarafından bir isteğin işlenmesi sırasında çalıştırılırlar. Herhangi bir metin içine gömülmüş olan MScript fonksiyonlarını çalıştırmak için, kendi yazdığımız Java sınıfları içinde de MoreMotion'in çözümleyicisini çağırabiliriz.

Örnek: String sql = request.resolve(s);

Benzer şekilde, MoreMotion AF, dinamik veritabanı sorgulamaları sağlamak için, veri kaynağı tanımlamaları içinde yer alan MScript fonksiyonlarını çözümler.

Bakın MScript Fonksiyonları

MScript Fonksiyonları nerelerde kullanılabilir?

1.Veri kaynağı tanımlarında
2.İşlem bazlı bileşenlerin özellikleri içinde. Örneğin "mor > RelDB", "mor > ADOM", "mor > Mailer", "mor > Security", vs.
3.MoreMotion Temel Sınıflarından türetilmiş olan Java sınıfları tarafından işlenecek olan her türlü parametre içinde.

 
Örneğin, eğer bir İlişkisel veritabanı sorgusu MScript fonksiyonları içeriyorsa, sorgu işletilmeden önce fonksiyonlar çözümlenir.

SELECT * FROM musteriler WHERE NO = @vof(i:NO)

 

Bu örnekte, SQL ifadesi içinde yer alan @vof(i:NO) fonksiyonu SQL işletilmeden önce, "NO" adlı istek parametresinin değeri ile değiştirilecektir.

MoreMotion Programlama Arayüzünü kullanarak MScript fonksiyonlarını çözümleme

Eğer bir Aksiyon Servisi, Veri Servisi veya İşlem Sınıfı geliştiriyor isek, String nesneleri içinde yer alan MScript fonksiyonlarını MoreMotion programlama arayüzünü kullanarak çözümleyebiliriz.
 

// Servis içinde

String cozumlenmisMetin = request.resolve(metin); 

 

// İşlem Sınıfı içinde

String cozumlenmisMetin = resolve(str); 

 

3. Dönüşüm Zamanı Fonksiyonları: XSL Fonksiyonları

XSL Fonksiyonları XSL Dönüşümü sırasında harekete geçerler. Bu, bir isteğin yapılması ile başlayan sürecin son adımıdır.

1.İstek sunucuya iletilir
2.İstek sunucuda işlenir. Servisler, İşlemler çalışır ve ADOM'lar oluşur.
3.MoreMotion ADOM'lardan Sayfa XML verisini hazırlar.
4.XSL dokümanının ve hazırlanan XML verisinin girdi olarak kullanıldığı ve tarayıcıda gösterilecek olan HTML dokümanı üretmek amacıyla yapılan XSL dönüşüm işlemi başlar. İşte XSL fonksiyonları tam bu sırada harekete geçerler.

 

MoreMotion Application Studio, eleman özellikleri içinde XSL foksiyonlarını kolaylıkla yazmayı sağlayan  "$vof()" adında bir makro sağlar. Derleme işlemi sırasında gerçek XSL fonksiyonlarına dönüştürülen bu makro sayesinde daha okunaklı ve daha kısa tanımlamalar ile XSL fonksiyonları üretilebilir.

Örnekler:

Makro Kullanımı

XSL Açılımı

$vof(/person/NAME)

  <xsl:value-of select="/root/person/NAME"/>

$vof(KDV_DAHIL = 'evet' ? FIYAT ; FIYAT * KDV)

  <xsl:choose>

    <xsl:when test="KDV_DAHIL = 'evet'">

      <xsl:value-of select="FIYAT"/>

    </xsl:when>                     

    <xsl:otherwise>

      <xsl:value-of select="FIYAT * KDV"/>

    </xsl:otherwise>

  </xsl:choose>

 

Aklımızda tutmamız gereken, gerek kendi yazdığımız XSL kodları, gerekse $vof() makrosu aracılığıyla üretilmiş olan XSL fonksiyonları yukarıda verilen adımların en sonunda, yani 4. adımda aktif hale geleceklerdir. Daha önce değil.

Bu nedenle, aşağıdaki veritabanı sorgusu içinde $vof() makrosu yanlış kullanılmıştır ve sorgu hiç bir zaman bir sonuç kümesi döndürmeyecektir.

  select * from musteriler where AD = '$vof(AD)' 

 

Tabi eğer, musteriler tablosu içinde AD alanını değeri "$vof(AD)" olan bir kayıt varsa durum değişir :))

Daha açık söylemek gerekirse, MScript kullanmamız gereken yerlerde XSL fonksiyonları kullanamayız.

 

Fonksiyonların İç İçe kullanımı

MScript fonksiyonları ve XSL fonksiyonları beraberce kullanılamazlar ancak CScript fonksiyonları, MScript fonksiyonları ile veya XSL fonksiyonları ile birlikte kullanılablir. Aşağıdaki, geçerli bir kullanımdır.

$vof(%vof(name))

 

%vof(name) bir CScript fonksiyonudur ve güncel elemanın adını döndürür. Eleman adının "EPOSTA" olduğunu varsayalım. %vof(name) çözümlendikten sonra geriye sadece $vof(EPOSTA) kalacaktır. $vof(EPOSTA) ise sonrasında <xsl:value-of select="EPOSTA"/> olarak açılacaktır.

Bir başka örnek:

Veritabanından  bağımsız bir uygulama geliştirmek istediğimizi düşünelim. Bu nedene kullanılan veritabanı türünü kontrol edip sorgumuzu ona göre şekillendirmemiz gerekiyor. Bunu aşağıdaki gibi MScript fonksiyonları kullanarak yapabiliriz.

 

  INSERT INTO orders (NAME) VALUES('@vof(i:NAME)');

  @doif(sysparam(dbtype,'') = 'mysql')

    selecT LAST_INSERT_ID() as v:ORDER_ID;

  @doelse()

    selecT @@IDENTITY as v:ORDER_ID;

  @doend()

 

 

Aşağıdaki örnek ise bize daha iyi bir performans sağlayacaktır.

 

  INSERT INTO orders (NAME) VALUES('@vof(i:NAME)');

  %doif(s:dbtype = 'mysql')

    selecT LAST_INSERT_ID() as v:ORDER_ID;

  %doelse()

    selecT @@IDENTITY as v:ORDER_ID;

  %doend()

 

Birinci örnekte veritabanı kontrolu her defasında yapılmakta iken, ikinci örnekte sadece derleme sırasında yapılıyor. Sorgu içinde yer alan CScript fonksiyonları çözümlendikten sonra s:dbtye derleme parametresinin değerinin 'mysql' olduğunu varsayarsak, sonuç şöyle olacaktır:

  INSERT INTO orders (NAME) VALUES('@vof(i:NAME)')

    selecT LAST_INSERT_ID() as v:ORDER_ID;

 

Bakın Derleme Parametreleri.