X++ :18- Select Nasıl Yazılır?
  1. Anasayfa
  2. Dynamics 365

X++ :18- Select Nasıl Yazılır?

0

Bu yazıda X++ ile sorgu nasıl yazılır anlatmaya çalışacağım. X++ sorguları SQL sorgularına çok benzer ama temelde birkaç fark var öncelikle TableBuffer denen bir kavram var. SQL de bir sorgu yazdığınızda direk veriyi görürsünüz ama X++ da bunun görselleştirilebilmesi için bir TableBuffer‘a ihtiyaç vardır. Temel bir sorguda kullanılan anahtar kelimeler bunlardır. Birkaç örnek yaparak açıklamaya çalışacağım.

[while] select [reverse] [firstfast]

[firstonly] [firstOnly10] [firstOnly100] [firstOnly1000]

[forupdate] [nofetch] [crosscompany]

[forcelitterals | forceplaceholders] [forcenestedloop]

[forceselectorder]

[repeatableRead] [validTimeState]

[ * | <fieldlist> from] <tablebuffer>

[ index [hint] <indexname> ]

[ group by {<field>} ]

[ order by {<field> [asc][desc]} ]

[ where <expression> ]

[ outer | exists | notexists ] join [reverse]

[ * | <fieldlist> from] <tablebuffer>

[ index <indexname> ]

[sum] [avg] [minof] [maxof] [count]

[ group by {<field>} ]

[ order by {<field> [asc][desc]} ]

[ where <expression> ]

]

<fieldlist> ::= <field> | <fieldlist> , <field>

<field> ::= fieldname | <function>(<field>)

Bir Job ile temel birkaç sorgu yazalım.

class FDDataAccess1

{

public static void main(Args _args)

{

CustTable custTable;

;

select * from custTable; // Müşteri tablosundaki tüm kayıtları seçer

info(strFmt(“1- %1 %2”, custTable.AccountNum, custTable.Currency));

select custTable; // // Müşteri tablosundaki tüm kayıtları seçer. * From a ihtiyaç duymaz

info(strFmt(“2- %1 %2”, custTable.AccountNum, custTable.Currency));

select Currency from custTable; // Müşteri tablosundaki sadece Currency alanını seçer

info(strFmt(“3- %1 %2”, custTable.AccountNum, custTable.Currency));

select reverse custTable; // Müşteri tablosundaki tüm kayıtları ters sırada seçer

info(strFmt(“4- %1 %2”, custTable.AccountNum, custTable.Currency));

select firstonly custTable; // Müşteri tablosundaki tek satır veriyi seçer

info(strFmt(“5- %1 %2”, custTable.AccountNum, custTable.Currency));

select firstonly custTable

where custTable.Currency != “TRY”; // TRY den faklı olan ilk satırı seçer.

info(strFmt(“6- %1 %2”, custTable.AccountNum, custTable.Currency));

select firstonly custTable

where custTable.Currency != “TRY” &&

custTable.CustGroup == “PROJE”;

info(strFmt(“7- %1 %2”, custTable.AccountNum, custTable.Currency));

select firstonly custTable

where custTable.Currency == “TRY” ||

custTable.CustGroup == “PROJE”;

info(strFmt(“8- %1 %2”, custTable.AccountNum, custTable.Currency)); }

}

Çalıştırdığımda bu çıktıyı veriyor.


Resim-1

Farklı bir örnek yapalım. Bu job benim eğitimlerde kullandığım bir örnek.

static void FDDataAccess2(Args _args)

{

InventTable inventTable;

InventTrans inventTrans;

;

//1. sistemimde tanımlı bütün stok kartlar (InventTable)

setprefix(“Sistemimde tanımlı bütün stok kartlar”);

while select inventTable

{

info(strFmt(“%1 %2”, inventTable.ItemId, inventTable.ItemName()));

}

//2. kaç stok kartım var

setPrefix(“kaç stok kartım var”);

select count(recId) from inventTable;

info(strFmt(“%1”, inventTable.recId));

// 3. Hareket gören stok kartlarım hangileri (sadece stok kartlarım)

setPrefix(“Hareket gören stok kartlarım”);

while select inventTable

exists join inventTrans

where inventTable.ItemId == inventTrans.ItemId

{

info(strFmt(“%1 %2 %3”, inventTable.ItemId,

inventTrans.Qty,

inventTrans.DatePhysical));

}

//4. stok kartı hareket bilgisi

setPrefix(“stok kartı hareket bilgisi”);

while select inventTable

join inventTrans

where inventTable.ItemId == inventTrans.ItemId

{

info(strFmt(“%1 %2 %3”, inventTable.ItemId,

inventTrans.Qty,

inventTrans.DatePhysical));

}

//5. Hiç hareket görmeyen stok kartlarım hangileri ve adedi

setPrefix(“Hiç hareket görmeyen stok kartlarım”);

while select inventTable

notexists join inventTrans

where inventTable.ItemId == inventTrans.ItemId

{

info(strFmt(“%1 %2 %3”, inventTable.ItemId,

inventTrans.Qty,

inventTrans.DatePhysical));

}

setPrefix(“Hiç hareket görmeyen stok kartlarımın adedi”);

select count(recId) from inventTable

notexists join inventTrans

where inventTable.ItemId == inventTrans.ItemId;

info(strFmt(“Hiç hareket görmeyen stok kartlarım : %1 adettir.”, inventTable.recId));

//6. Her bir stok kartı için en yüksek stok hareket miktarını içeren bilgi

setPrefix(“Her bir stok kartı için en yüksek stok hareket miktarını içeren bilgi”);

while select maxof(Qty)

from inventTrans

group by inventTrans.ItemId

{

info(strFmt(“%1 %2”, inventTrans.ItemId,

inventTrans.Qty));

}

}

Bu yazıda sorgu nasıl yazılır temel örneklerle anlatmaya çalıştım. Çok geniş bir konu ve çok ayrıntısı mevcut. Bunu iyi bilmek için veri tabanı yapısına ve temel SQL komutlarına hâkim olmak gerekiyor. SQL yazan birisi burada zorlanmaz. İleriki yazılarımda sorgunun diğer ayrıntılarına değinmeye devam edeceğim.

Selamlar.

Bu konuyla ilgili sorularınızı  alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar:
www.mshowto.org

www.fatihdemirci.net

TAGs: X++,Select, Azure, Azure DevOps, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365

Bu İçeriğe Tepkin Ne Oldu?
  • 0
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

2005 yılında Kocaeli Üniversitesi Bilgisayar Mühendisliğinden mezun oldum. Okulda ve ilk iş tecrübelerimde farklı yazılım dilleri kullandım. 2007 yılında Akşam gazetesinde işe başladım ve Microsoft Dynamics 365 (eski adıyla Axapta) ile orda tanıştım. Hiç duymadığım bir dil olan X++ kullanılıyordu. Kısa sürede adapta oldum ve kariyerimi bu alanda şekillendirdim. Bir kaç iş değişikliğinde sonra kendi firmamı kurdum. Şu anda DMR de yönetici ortak ve Çözüm mimarı olarak çalışmaktayım. 2010 yılında MCT oldum. Birçok faklı ortamda eğitimler verdim. Bloğum ve Youtube kanalımda tecrübelerimi paylaşmaktayım.

Yazarın Profili

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir