Bu makalemizde Dynamics AX’ta veri tabanına
erişime nesne tabanlı bir çözüm sunan Query nesnelerini tanıtacağuz. Konu uzun
olduğu için parçalara ayırarak yazacağım.
Bakınız : Query nesneleri 2, Query nesneleri, Query nesneleri 4
Bakınız : Query nesneleri 2, Query nesneleri, Query nesneleri 4
Ancak öngereksinim olarak Dynamics AX’taki table buffer
kavramını bilmemiz gerekmektedir. Bu konunun detayları için Table Buffer konulu makaleleri inceleyiniz.
Dynamics AX’ta veri tabanına erişmenin ilk ve en kolay yolunun select cümlecikleri yazmak olduğunu biliyoruz. Ancak Queryler select cümleciklerinden daha esnektir. Çünkü sorgular (Query) nesne yönelimli olarak düzenlenebilir. Böylece kullanıcıdan alınan değerlere göre dinamik sorgular oluşturulabilir. Basit bir sorguyu select ile yapmak çok daha kolay olmakla birlikte, kullanıcı ile etkileşime girerek dinamik sorgular oluşturmak söz konusu olduğunda query’ler kesin bir üstünlüğe sahiptir.
Query nesneleri ile ilgili en temel nesneler Query, QueryRun, QueryBuildDataSource, QueryBuildRange nesneleridir. Bu nesneler aracılığı ile select cümleciği ile yapabildiğimiz herşeyi ve hatta daha fazlasını yapabiliriz. Bu nesnelerin kısaca açıklamaları alttaki gibidir:
1. Query : select cümleciği ile temsil edilen sorgunun tamamını ifade eder.
2. QueryRun : select cümlecğinin çalışan halidir. Veriye erişimi asıl sağlayan nesne de budur.
3. QueryBuildDataSource : select cümleciğindeki tabloyu temsil eder.
4. QueryBuildRange : where ile ifade edilen şart cümleciklerini ifade eder.
2. QueryRun : select cümlecğinin çalışan halidir. Veriye erişimi asıl sağlayan nesne de budur.
3. QueryBuildDataSource : select cümleciğindeki tabloyu temsil eder.
4. QueryBuildRange : where ile ifade edilen şart cümleciklerini ifade eder.
Query ile yapılan sorgu sonucunda elde edilen veri kümesinden istenen değerler qr.get(tableId _tableId) metodu ile bir tableBuffer’a alınmalıdır.
Birkaç örnekle bu nesnelerin nasıl kullanıldığını inceleyelim. Alttaki örnekte (queries1) select cümleciği ile yapılan işlem query ile yapılan işleme denktir. Ancak qr.prompt() satırı sayesinde kullanıcının karşısına sorgu ekranı çıkar ve kullanıcı sorguda istediği gibi kriter belirtebilir. Ayrıca sıralama yapmak da mümkündür.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| static void queries1(Args _args) { CustTable custTable; Query q; QueryRun qr; QueryBuildDataSource qbds; ; setPrefix( "query ile" ); q = new Query(); qbds = q.addDataSource(TableNum(CustTable)); //buraya breakpoint koyarak qbds nesnesini inceleyiniz. qr = new QueryRun(q); if (qr.prompt()) //Dikkat bu kısımda kullanıcıya sorgu ekranı açılır. { while (qr.next()) { custTable = qr. get (tableNum(CustTable)); //table bufferı doldur info(strFmt( "%1 %2" , custTable.AccountNum, custTable.Name)); //tablebufferı kullan } } //-------------------------------------------------------------------- setPrefix( "select ile" ); while select custTable { info(strFmt( "%1 %2" , custTable.AccountNum, custTable.Name)); } } |
ikinci örneğimizde ise where cümleciğinin querylerdeki karşılığını görelim; bu işlem içinQueryBuildRange nesnesini kullanabiliriz.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| static void queries2(Args _args) { CustTable custTable; Query q; QueryRun qr; QueryBuildDataSource qbds; QueryBuildRange qbr; ; setPrefix( "query ile" ); q = new Query(); qbds = q.addDataSource(TableNum(CustTable)); qbr = qbds.addRange(fieldNum(CustTable, Currency)); qbr.value(sysQuery::value(companyInfo::standardCurrency())); qbr.status(RangeStatus::Locked); //bir range lock edilirse kullanıcı tarafından değiştirilemez qr = new QueryRun(q); if (qr.prompt()) { while (qr.next()) { custTable = qr. get (tableNum(CustTable)); info(strFmt( "%1 %2" , custTable.AccountNum, custTable.Name)); } } //-------------------------------------------------------------------- setPrefix( "select ile" ); while select custTable where custTable.Currency == companyInfo::standardCurrency() { info(strFmt( "%1 %2" , custTable.AccountNum, custTable.Name)); } } |
Hiç yorum yok:
Yorum Gönder