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ıyla Regex 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?

Okumaya devam et

Kullanıcı arayüzlerinde amaca uygunluk ve olası hataları engelleme yaklaşımı

Merhaba.

Bir önceki yazımda fonksiyonalite ve basitleştirme yaklaşımı ile ilgili fikirlerimi paylaşmıştım. Okuyan arkadaşlarımdan olumlu yorumlar aldım, hepsine teşekkür ederek bir diğer konuyu paylaşmak istiyorum.

Yıllar önce ilk kişisel bilgisayarlarımızı aldığımızda Windows 95 kullanmaktaydık. Ve Windows 95 kurmak için disket kullanılmakta idi. Genç arkadaşlar muhtemelen inanamayacaklar ama her birisi sadece 1.44 MB kapasiteye sahip 40 (yazıyla kırk ! ) kadar disket kullanarak işletim sistemi yükleniyordu. Nostalji için Microsoft’un internet sitesinden Windows 95’in gereksinimlerini inceleyebilirsiniz.  Ayrıca Windows 95 nasıl birşeydi diye merak ediyorsanız şu resmi bir inceleyebilirsiniz:

Windows95

Şimdi sıkı durun; Windows 95’i kurmak için öncelike bilgisayarı başlatacak MS-DOS disketi oluşturmak, bu disketle bilgisayarı açmak (boot etmek), ilk Windows diskini takıp bu diskteki setup dosyasını bulmak, bulunan bu dosyayı çalıştırmak (run), sonraki adımlarda doğru sıra ile doğru disketleri takmak ve en sonunda da yine disketleri kullanarak tek tek driverları (ekran, anakart, eternet vb) yüklemek gerekiyordu. Tabi son işlem hariç tüm işlemler DOS ekranında (şu siyah ekran var ya, işte o) yapılyordu. Dolayısı ile Windows 95 kurmak sadece işletim sistemini kurmaktan çok daha fazlasını gerektiriyordu. Yani tam bir “bilgisayarcı çocuk” olmanız gerekmekte idi.

Bilgisayarcı çocuk (temsili resim)

Computer-Addict-copy

Okumaya devam et

DialogFieldlarda Lookup Değiştirmek

Ax 2009 dokümanlarında karmaşık dialoglar yapmak yerine basit formlar kullanın şeklinde bir öneri yer almakta idi.

Bu nedenle de bir dialog’da fieldlardan birine lookup yazmak gerektiğinde hiç uğraşmayıp, bunun yerine basit bir form yapmak daha kullanışlı olmakta idi.

Ax 2012 ile pek çok güzel özellik eklenmiş ve en azından bahsettiğim konu için form yapmaya gerek kalmamış.

Alttaki örnekte DialogField’a runTime lookup eklemek ile ilgili örnek kodları bulabilirsiniz.

Faydalı olması temennisi ile.

Emre TÜFEKÇİ
İstanbul
www.atol.com.tr

Okumaya devam et

Ax 2012 Dialog Fieldlarda Replacement Key kullanımı

Malumunuz Ax 2012 yepyeni bir platform ile geldi ve bildiğimiz şeylerin pek çoğunu yeniden öğrenmemiz gerekti.

Bunlardan bir tanesi de ReplacementKey yapısı.

Eskiden hemen her tablo birbiri ile Extended Data Type’lar üzerinden ilişkilendirilmişken, Ax 2012’de çoğu tablo için RecId ilişkisi tercih edilmiş.

recId malumunuz Int64 tipindedir.

Bu bir bakıma iyi, bir bakıma kötü :

iyi tarafı; Indexler için Int64 kullanılması daha isabetlidir, join ederken Str alan yerine Int64 daha mantıklıdır vs

Kötü tarafı : Tablodaki dataya bakarak ne ile ilişkili olduğunu anlamak çok zorlaşmış olur, Formlarda ya da Dialog alanlarında RecId görünmesi çok çirkin olacaktır.

Okumaya devam et

Numara serileri Ax 2012

Daha önceki makalede numara serileri ile ilgili temel konulara değinmiştik ama sistem standartlarına göre kullanmayı ikinci bir yazıya bırakmıştık. Bu arada köprünün altından çok sular aktı ve Ax 2012 yayınlandı. Her ne kadar temel felsefe aynı kalsa da bazı değişiklikler olduğunu söylemeliyiz. Dolayısı ile değişen ya da yenilenen tarafları ile konuyu yeninden ele almak gerekti. Geçen sefer çok uzun olmasın diye kısa kesmiştim ama bu sefer tamamını yazdım.

Öncelikle eski versiyonlar ile AX 2012 arasındaki en temel farkları sıralayacak olursak

  1. EDT tanımlarında bazı farklılıklar var.
  2. Tablo özelliklerinde bazı farklılıklar var.
  3. Yerleşik metodlarda farklılıklar var.
  4. Kullanılan classların isimlendirmesi değişmiş.
  5. Load module metodu aynı kalsa da parametreler değişmiş.
  6. Numara serileri şirketler arası, mali yıla bağlı ya da normal (eskisi gibi) tanımlanabiliyor.
  7. Sihirbazın yeni numara serisini görmesi için bir job çalıştırılması gerekiyor.
  8. Numara serilerini asıl yöneten kodlar form yerine classa taşınmış. (Bence daha iyi olmuş)

Önceki yazıdan hatırlatma babından bir alıntı :
Numara serileri Dynamics Ax içindeki en temel konulardan birisidir. Numara serisi tanımlanmış bir formda her yeni kayıt oluşturulduğunda (kuruluma bağlı olarak) yeni bir numara verilir. Bu numara adından zannedileceği gibi integer değil, string alandır.

Numara serisi tanımlarken kendi modülümüz mü yoksa varolan bir modül mü kullanıldığı önemlidir. Kolay anlaşılması için varolan bir modül olduğunu kabul edelim ve bu modül örneğimiz için Alacak hesapları olsun. Anlaşılacağı üzere numara serileri ile Modüller sıkı bağlıdır.

Şimdi kolları sıvama vakti. Yapmamız gereken işlemler sırası ile alttadır. Her aşamadan önce kaydetmek işinizi kolaylaştıracaktır. Ayrıca Eşitleme isteği gelirse evet demelisiniz. Haydi kolay gelsin 🙂

Okumaya devam et

X++ ile Xml dosyası oluşturma

Sinan Bey’in talebi üzerine bu yazıyı eklemeyi uygun buldum. Bu konu ile ilgili X++ ile XML dosyasını okuma makalesini de okumanızı öneririm.

Herhangi bir sistemle entegrasyon söz konusu olduğunda en çok kullanılan yöntemlerden biri XML dosyalarınının transferidir.

Hemen hemen tüm platformlarda ve tüm dillerde XML dosyasını oluşturabilen ve okuyabilen yapılar mevcuttur. Bu sebeple XML, platformlar arası veri transferinin temel yöntemlerinden olmuştur.

Ax’ta varolan bir datayı XML formatında dışarı aktarmak için alttaki yöntem kullanılabilir.

Bu kodu çalıştırdığınızda C diskinde currencies.xml adında bir XML dosyası oluşacaktır. Bu dosyayı Internet Explorer ya da benzeri bir programla açarsanız resimdeki gibi bir görüntü oluşacaktır.

Emre TÜFEKÇİ
İstanbul

www.atol.com.tr

Okumaya devam et

Satış siparişi deftere nakil işlemleri – 1 (SalesTable Posting Invoices)

Satış siparişleri (SalesTable) muhtemelen bu blogda en çok üzerinde konuşulan tablolardan birisidir. Bu yazıda da satış siparişleri üzerindeki güncelleme, yani deftere nakil işlemlerine değinmek istiyorum.

Aslında Satış siparişi başlığı (SalesTable) ve ona 1:n bağlı sipariş satırları (SalesLine) Ax’ta WorkSheet olarak adlandırılan tablolar grubundadır. Yani bu tablolar aslında çalışma sayfalarıdır. Fatura, irsaliye, malzeme çekme listesi gibi işlemler yapıldığında her biri ile ilgili tablolara kayıtlar atılır. Teknik olarak faturalanan bir sipariş SalesTable’dan silinebilir. Ama bunu hiç yapmayız.

Okumaya devam et

X++ ile XML dosyasını okuma

Xml (eXtensible Markup Language) veri alışverişi için sıkça kullanılan bir yöntemdir. W3C tarafından geliştirilmiş ve hemen hemen tüm platformlarda kabul görmüş bir formattır. XML ile ilgili daha detaylı bilgiler için tıklayınız.

Gelelim konumuz olan X++ ile XML dosyalarının nasıl okunabileceğine;
XML dosyalarını okumak için XMLDocument, XMLNodeList, XMLNode, XMLParseError classlarını kullanabiliriz.
XmlDocument en temel classtır ve pek çok alt class ve işlev içermektedir.
İçeriğini okumak istediğimiz düğüm (node) adını doğrudan belirtmek mümkün olabileceği gibi, nextSibling() metodu da kullanılabilir.
Ama düğüm adını belirtmek ihtiyacımızı daha iyi karşılayacaktır.
Parametrik yapılar kurmak gerektiğinde bu düğüm adlarını bir parametre tablosunda tutmak daha doğru olacaktır.

Okumaya devam et