24 Eylül 2014 Çarşamba

AX 2012 executeQuery methodunda sorting işlemi.

Merhaba Ax da kullanılan basit ama etkili bir method sorting işlemidir. Range ekleme ile aynı mantığa benzer.

Örnek : Datasource un methodlarından executeQuery aşağıdaki kodu kullanabiliriz.

public void executeQuery()
{
    this.query().dataSourceTable(tableNum(ETGVehicleOwnerTrans)).addSortField(fieldNum(ETGVehicleOwnerTrans, ValidTo), SortOrder::Ascending);
    this.query().dataSourceTable(tableNum(ETGVehicleOwnerTrans)).addSortField(fieldNum(ETGVehicleOwnerTrans, ValidToFrom), SortOrder::Ascending);
    this.query().dataSourceTable(tableNum(ETGVehicleOwnerTrans)).addSortField(fieldNum(ETGVehicleOwnerTrans, RecId), SortOrder::Ascending);
    super();
}

Ali Güç - 2014

Rast gele...

19 Eylül 2014 Cuma

Hatalı Ve Yanlış Girişleri Engellemek Ve Reguler Expressions

Müşteri ilişkilerini önemseyen bir firmada müşteri telefonları ve e posta adresleri büyük önem taşır.
Ve tablolarımızda kullandığımız ilgili alanların sadece zorunlu olması kullanıcılarımızı doğru bilgi girmesini sağlamaya yetmez.
Özellikle anlamsız bilgi girenler için ayrı bir paragraf açmalıyız çünkü bu konuda gerçekten yaratıcı bir millet olduğumuzu ifade etmeliyim. Bir müşterimizde CRM modülündeki telefon numaralarının ortalama olarak %30’u aynı numaralardan oluştuğuna şahit olmuştum. Muhtemelen e posta adresleri için de durum pek iç açıcı değildir. Ayrıca Türkiye’nin öne gelen kargo firmalarından birinde her kargo göndermemde TC kimlik numarası alanının varsayılan bir değer ile doldurulduğunu görüyorum. Bu tür girişler konumuzun biraz dışında, devam edelim…
Hatalı girişleri engellemek adına, daha kontrollü girişler sağlamak, daha doğru bilgi elde etmemizi sağlayabilir. Bu işlem için de Reguler Expressions ya da kısa adıylaRegex kullanmak çok faydalı olabilir. Regex, özetle bir alana girilecek olan olası bilgilerin formatını belirlemek için kullanılabilir. Buna terminolojide genellikle “maskeleme” denmektedir. Daha detaylı bilgi için tıklayınız.
konumuza dönersek; örneğin için Türkiye’deki sabit telefon numaraları için şehirler arası kodlar 02, 03 ya da 04 ile başlamaktdır. Batı illeri 02, orta kısım 03, doğu ise 04 olarak kodlanmıştır. Bunun haricinde tüm Türkiyede telefon numaraları toplam 11 hanedir. Şimdi bu bilgileri kontrol etmek için nasıl bir Regex kullanabiliriz?
Çok özet ifade edersek;  ‘ ^ ‘ başlangıcı, ‘ $ ‘sonu ifade ederken süslü parantezler içindeki numalar (örneğin  {2} ) uzunluğu ifade eder.
Karakter kümeleri için köşeli parantez ‘ [ ] ‘, sabit değerler için ise normal parantez ‘ ( ) ‘ kullanılabilir.
Bu durumda Türkiye için sabit hatları sınırlayan Regex ‘ ^(02|03|04)+([0-9]{9})$ ‘ olacaktır.
İlk seferde yazmak neredeye imkansız olsa da keyifli bir uğraş sayılabilir :)Bilgisayarcı eğlencesi işte. Regex’inizi test etmek için Rubular.com‘u kullanabilirsiniz.
Benzer şekilde cep telefonları için de ‘^(05)+([0-9]{9})$’ kullanılabilir.
Peki Ax içinde bu işi nasıl yapabiliriz? Bu işlem için Global classına birer metod ekleyerek her yerden kullanmak mümkün olacaktır.
Örnek kod aşağıdaki gibi olabilir.
Hadi kendinizi zorlayın ve e posta adresi için bir regex yazmayı deneyin.
Ali Güç - 2014
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
static boolean validatePhoneNumber(PhoneMobile    _phoneMobile)
{
    Boolean                                 isValid;
    System.Boolean                          netBool;
    System.Text.RegularExpressions.Match    myMatch;
    str                                     matchEmailPattern = "^(02|03|04)+([0-9]{9})$";
    ;
    new InteropPermission(InteropKind::ClrInterop).assert();
 
    myMatch     = System.Text.RegularExpressions.Regex::Match(_phoneMobile, matchEmailPattern);
    netBool     = myMatch.get_Success();
    isValid     = netBool;
 
    CodeAccessPermission::revertAssert();
 
    if(isValid)
    {
        return true;
    }
    else
    {
        return checkFailed("Lütfen '02121234567' formatında 11 hane olarak giriniz.");
    }
}





Ali Güç - 2014