1. Dizi Öğeleri Ekleme
Örn: Örnek tablosundaki CODE, DEFINITION_, TOTAL alanları
arr = array(0) 'declaration
'Yeni öğe ekleme Metodu 1 (Klasik Metot)
arr.size = arr.size + 1
arr[arr.size - 1] = {CODE = "KOD", DEFINITION_ = "AÇIKLAMA", TOTAL = 3500000}
Warn(arr[arr.size - 1].CODE)
'Yeni öğe ekleme Metodu 2 (1. Metot ile Aynı)
arr.Append({CODE = "KOD2", DEFINITION_ = "AÇIKLAMA2", TOTAL = 8500000})
Warn(arr[arr.size - 1].CODE)
' Yeni öğe ekleme Metodu 3 ( insert into whatever area and under slide to other elements)
arr.Insert({CODE = "KOD3", DEFINITION_ = "AÇIKLAMA3", TOTAL = 9500000}, 0)
Warn(arr[0].CODE)
'Öğe Silme
Warn(arr.size)
arr.Remove(0)
Warn(arr.size)
'Öğe İndeksi Bulma
idx = -1
idx = arr.Index({CODE = "KOD3", DEFINITION_ = " AÇIKLAMA3", TOTAL = 9500000})
Warn(idx)
2. Özel Tablolar
Özel Tablo Kaydetme
GetTextVal("TextEdit1", STRField)
GetIntVal("NumEdit1", INTField)
CustTables[3].NewRecord()
CustTables[3].SetTxtField("A_STR",STRField)
CustTables[3].SetIntField("A_INT",INTField)
CustTables[3].UpdateRecord()
Özel Tabloda Arama Yapma
MyWhereCond = "CODE = 'TOMATO"
CreateQuery(Qry)
tblName = Application.GetCustTableName( 3 , Application.CompanyId, Application.FiscPerdId)
Qry.AddTable("A", tblName)
Qry.AddSelField("A", "CODE")
Qry.AddWhereCond(MyWhereCond,0)
Qry.Execute()
if Qry.Ready = 1 then
res = Qry.First()
Do while res = 1
Qry.GetFieldValue(1, 4, MyCode)
warn(MyCode) 'Query Control
res = Qry.Next()
Loop
Qry.Clear()
end if
Özel Tabloya Kayıt Ekleme
CreateQuery(Qry)
Qry.QueryType = 3
tblName = Application.GetCustTableName(3 , Application.CompanyId, Application.FiscPerdId)
Qry.MainTable = tblName
warn(tblName)
MyLogRef=Qry.GenerateLogref()
str(MyLogRef, MyLogRefStr)
warn(MyLogRefStr)
Qry.AddInsField("LOGREF, CODE, QUANTITY")
Qry.AddInsValue(MyLogRefStr + ", 'TOMATO', 1000")
if Qry.Execute() then
warn("OK")
else
warn("ERROR")
end if
Özel Tabloda Kayıt Silme
MyWhereCond = "CODE = 'TOMATO'"
CreateQuery(Qry)
tblName = Application.GetCustTableName( 1, Application.CompanyId, Application.FiscPerdId)
Qry.AddTable("A", tblName)
Qry.AddSelField("A", "LOGREF,")
Qry.AddSelField("A", "TOMATO")
Qry.AddWhereCond(MyWhereCond,0)
Qry.Execute()
if Qry.Ready = 1 then
res = Qry.First()
Do while res = 1
Qry.GetFieldValue(1, 1, MyLref)
Qry.GetFieldValue(2, 4, MyCode)
CustTables[1].SearchByRef(MyLref)
CustTables[1].DeleteRecord()
res = Qry.Next()
Loop
end if
Qry.Clear()
Try..Catch
Örnek 1
a = 1
b = 0
try
Warn("before Exception")
c = a/b
catch
Warn("Catch")
End try
Örnek 2
try
...
throw "Invalid input"
catch
if lastError = "Invalid input" then warn(lastError)
...
end try
Kaydederken Durum Bilgisini Kontrol Etme (Sipariş Fişleri için)
Sub SaveData(proceed as Integer)
hnd = RecHandle
AppTables[12].GetIntFieldR(hnd,"STATUS", myStatu)
If myStatu = 1 Then
WARN("Proposal")
Else
If myStatu = 4 then
WARN("Ready for shipment")
Else
WARN("Not ready for shipment ")
End if
End If
End Sub
Fiş üzerinde SET – GET memory grid (bellek ızgarası)
Formda ;
Sub FormShow()
Call GetData()
End Sub
Sub BeforeSave(proceed as Integer)
Call SetLineArray()
End Sub
Sub AfterSave()
AppTables[8].GetIntFieldR(RecHandle,"LOGICALREF",gSETLOGREF)
Call SetData(gSETLOGREF)
End Sub
Modülde ;
Dim LineDataArr(128) as string
gSETLOGREF=0
sub Global()
End Sub
'Daha önceden girilmiş kayıtların gösterilmesi
Sub GetData()
MaxGridLine=MGridLines("StFicheGrid")
for i=0 to MaxGridLine-1
GetGridRowHandle("StFicheGrid",i,recH)
AppTables[9].GetFltFieldR(recH,"OUTCOST",fltDummy)
SetCellFloat("StFicheGrid",i,10001,fltDummy)
next i
End Sub
'Kayıtların veri tabanına yazılması
Sub SetData(intLogref as Long)
i=0
CreateQuery(Qry)
tblName = Application.GetTableName(9, Application.CompanyId, _ Application.FiscPerdId)
Qry.AddTable("A", tblName)
Qry.AddSelField("A", "LOGICALREF,")
Qry.AddSelField("A", "STFICHELNNO ")
Str(gSETLOGREF,LogRefTxt)
MyWhereCond = "STFICHEREF = " + LogRefTxt
Qry.AddWhereCond(MyWhereCond,1)
Qry.Execute()
if Qry.Ready = 1 then
res = Qry.First()
Do while res = 1
Qry.GetFieldValue(1, 1, MyLineRef)
Qry.GetFieldValue(2, 1, MyLineNo)
if MyLineRef<>0 then
'STLINE tablosundaki OUTCOST alanı set ediliyor
AppTables[9].SearchByRef(MyLineRef)
AppTables[9].SetFltField("OUTCOST",LineDataArr[MyLineNo-1])
AppTables[9].UpdateRecord()
end if
res = Qry.Next()
Loop
end if
End Sub
'Malzeme fişi satırına girilen OUTCOST değer(ler)inin Array'de tutulması
Sub SetLineArray()
MaxGridLine=MGridLines("StFicheGrid")
i=0
for i=0 to MaxGridLine-1
GetCellFloat("StFicheGrid",i,10001,LineDataArr[i])
next i
End Sub
Rights (Haklar) için örnek:
'Rights Types
'12- Merge : Kullanıcı ve Group haklarının birleşimidir.
'1 - Group Rights : Grup haklarının okur
'3 - User Rights : Kullanıcı haklarını okur.
'Kullanıcı haklarını okumak için kullanılır
Rights = Application.NewRightsObject(3)
'Right Type
'1-AR_TERM : Terminal yetkilerine ulaşmak için kullanılır.
'2-AR_PROC : İşlem yetkilerine ulaşmak için kullanılır.
'3-AR_FIRM : Firma yetkilerine ulaşmak için kullanılır.
'4-AR_DEPT : Firmanın Bölüm yetkilerine ulaşmak için kullanılır.
'5-AR_DIVIS : Firmanın İşyerleri yetkilerine ulaşmak için kullanılır.
'6-AR_WAREH : Firmanın Ambar yetkilerine ulaşmak için kullanılır.
'7-AR_FACT : Firmanın Fabrika yetkilerine ulaşmak için kullanılır.
'1 numaralı kullanıcının 3 numaralı firmaya ait ambar yetkileri okunuyor.
Rights.GetRightsByNumber(1,6,3)
'Ambar yetkilerinden 1 numaralı ambarın yetkisi okunuyor.
OK = Rights.Get(1)
warn(OK)
'Ambar yetkilerinden 1 numaralı ambara yetki veriliyor.
Rights.Set(1,1)
Rights.Update()
Quilt Input/Output Fonksiyonları
Bu dokümanda tanımlanan fonksiyonlar ve türleri Quilt kernel ile uygulanmış olup, dilin tüm kullanımlarında mevcuttur.
Genel Bakış
"io.stream" girdi/çıktı nesnelerinin temel türüdür. Diğer türler, io.file, io.socket ve io.memFile, io.stream türüne ait temel arayüzü paylaşırlar ve birkaç ek fonksiyonu destekleyebilirler. io.stream türü, girdi/çıktı nesneleri için abstract base türü görevini görür. Gerçek nesneler alt türlerden birine ait olmak zorundadır.
Dosya Açma ve Oluşturma
io.file.Open(pathname)
io.file.Open(pathname, access)
Open fonksiyonu, pathname isimli dosya mevcutsa ve açılabiliyorsa, bir dosya nesnesi döndürür. Aksi takdirde, Open fonksiyonu boş (null) dönecektir.
Tercihe bağlı ikinci parametre, bir tamsayı (integer) olabilir. Eğer 0'a eşit ise, dosya read/write modunda, yani öndeğer modunda açılır. Eğer 1'e eşitse, dosya read-only modunda açılır.
io.file.Create(pathname)
Create fonksiyonu, pathname isimli bir dosya oluşturur ve dosyanın oluşturulabilmesi durumunda bir dosya nesnesi döndürür. Aksi takdirde, Create fonksiyonu boş (null) dönecektir. Yeni oluşturulan bir dosyaya ait bir dosya nesnesi her zaman read/write modunda açılır.
io.OpenFile(pathname)
io.OpenFile(pathname, access)
io.CreateFile(pathname)
Son üç fonksiyon, yukarıda tanımlanan fonksiyonların diğer isimleridir.
Bir dosya açıldığında veya oluşturulduğunda döndürülen dosya nesnesi bir değişkene atanmalıdır.
All other input/output functions are accessed as method calls to this variable.
stream = io.OpenFile(pathname)
Tüm akışlar (stream) ihtiyaç ortadan kalktığında kapatılmalıdır.
stream.Close()
Close fonksiyonu, her stream nesnesinde en son yapılan işlem olmalıdır..
Binary okuma/yazma işlemleri
stream.Read(count)
Read fonksiyonu tek bir tamsayı (integer) parametresi alır. Akıştan (stream) bayt sayımını okumaya çalışır (It tries to read count bytes from the stream) ve bunları bir dizgi (string) olarak döndürür. Eğer okunacak bayt sayısı yetersizse, Read fonksiyonu uzunluk bakımından sayımdan (count) daha kısa bir dizgi döndürebilir. Read may return a string of length less than count, if there are not that many bytes to read. Özellikle de bir dosyanın sonunda çağırılırsa, Read fonksiyonu sıfır uzunluğunda boş bir dizgi (string) döndürür.
stream.Write(string1, ..., stringN)
Write fonksiyonu string (dizgi) olması gereken herhangi bir sayıdaki bağımsız değişkeni (argument) alır ve bu dizgileri baytlar dizisi olarak akışa (stream) yazar. Write fonksiyonu yazılan baytların toplam sayısını döndürür.
stream.ReadByte()
ReadByte fonksiyonu tek bir bayt olur ve bir tamsayı (integer) olarak geri döndürür. Dosyanın sonunda, ReadByte fonksiyonu boş (null) dönecektir.
stream.ReadWord()
ReadWord fonksiyonu word tipindeki baytları okur ve bir tamsayı (integer) olarak geri döndürür. Dosyanın sonunda, ReadWord fonksiyonu boş (null) dönecektir.
stream.WriteByte(byte1, ..., byteN)
WriteByte fonksiyonu, tamsayı (integer) olması gereken birkaç parametreyi alır ve bu değerleri bayt dizileri olarak akışa (stream) yazdırır.
stream.WriteWord(word1, ..., wordN)
WriteWord fonksiyonu, tamsayı (integer) olması gereken birkaç parametreyi alır ve bu değerleri word tipinde bayt dizisi olarak akışıa (stream) yazdırır.
Açık bir dosyanın göstergesi (pointer) vardır. Bu gösterge girdi ve çıktıların yerini gösterir. Göstergenin değerini değiştirerek dosya içerisinde rasgele yerlere ulaşabiliriz.
stream.pointer
Bu alan akışın (stream) gösterge değerini bir tamsayı (integer) olarak verir. Göstergenin değeri bu alana atayarak değiştirilebilir.
stream.pointer = newValue
Not: Gösterge (pointer) alanı tüm akışlar (streams) için tanımlanabilir; ancak bu, tüm akış türleri için anlamlı olmaz. Örneğin, soketlere bağlı göstergeler yoktur. Ağ iletişiminde ileri ve geri gidemezsiniz. Bu durumda gösterge alanı her zaman -1 değerinde olacaktır ve bu alana yapılan atamaların bir etkisi olmayacaktır. Bir soket akışındaki (socket stream) bayt sayısını söylemek de mümkün değildir. Bu not aşağıdaki fonksiyonlar için de geçerlidir.
stream.GetSize()
GetSize fonksiyonu, bir dosya içerisindeki bayt sayısını döndürür. Intrinsic (yapıiçi) boyuta sahip olmayan akışlar için ise -1 değer döner.
stream.SetSize(newSize)
SetSize fonksiyonu bir dosyanın boyutunu değiştirir.
Eğer yeni boyut, asıl boyuttan daha az ise, dosyanın yeni belirlenen sonundan sonraki veriler kaybolur.
If the new size is less than the original size, the data beyond the new end of file is lost.
Intrinsic (yapıiçi) boyuta sahip olmayan akışlar için, SetSize etki etmez..
SetSize fonksiyonu, boyut değiştirilebiliyorsa true olarak döner. Aksi takdir false döndürecektir.
Character oriented input/output (Karaktere Yönelik Girdi/Çıktı)
Tüm stream (akış) fonksiyonları herhangi bir Quilt stream üzerinde birlikte kullanılabilir. Bununla birlikte bu bölümde tanımlanan fonksiyonlar genellikle okunabilir metin içeren dosyalarla işlem gerçekleştirirken kullanılır.
stream.Print(object1, ..., objectN)
Quilt nesnelerini okulabilir formda görüntüler. Sayılar ondalık formatta yazılır; diziler (arrays), dizi öğelerini köşeli parantezler içerisinde listeleyerek yazılır; ve yapılar (structure) süslü parantez kullanılarak yazılır.
Aynı işlem "<<" operatörünü kullanarak da yapılabilir. Örneğin:
"stream << object1 << ... << objectN" yukarıdaki stream.Print çağrısına eşittir.
stream.PutChar(chr1, ..., chrN)
PutChar fonksiyonu birkaç tamsayı (integer) parametresini alır ve bir dizi karakter formatında akışa (stream) yazdırır.
stream.Put(param1, ..., paramN)
Put fonksiyonunun parametreleri integer veya string değerleri alabilir. Integer parametreler akışa (stream) karakterler olarak, dizgilere (strings) ise karakter dizileri olarak yazdıdırlır. (Integer parameters are written to the stream as characters, strings as sequence of characters.)
Not: Aşağıdaki iki çağrı arasındaki fark, ikinci çağrının ara belleğe alınmış olmasıdır. Bunun haricinde iki çağrı da akşına (stream) aynı şeyi yazabilir.
stream.WriteByte(chr1, ..., chrN)
stream.PutChar(chr1, ..., chrN)
Aşağıdaki iki çağrı arasındaki fark, ilk çağrı ilk dört hardi (stra) akışa yazdırırken, ikinci çağrının ilk üç harften sonra (str) karakter kodunu yazdırmasıdır. ("str97" gibi).
stream.Put(”str”, ’a’)
stream.Print(”str”, ’a’)
PurChar yerine Put da kullanılabilir.
stream.GetChar()
GetChar fonksiyonu akıştan bir sonraki karakteri okur. Dosyanın sonunda -1 değeri döndürür.
stream.PeekChar()
GetChar fonksiyonu akıştan bir sonraki karakteri okur. Dosyanın sonunda -1 değeri döndürür. Karakter akışta (stream) daha sonra okunmak üzere kalır. GetChar ve PeekChar fonksiyonları tekrar çağırıldığında da aynı değer döner.
stream.Unget()
Son GetChar fonksiyonunu geri alır. GetChar tarafından döndürülen son karakteri akışa geri koyar. Böylece GetChar ve PeekChar fonksiyonları tekrar çağırıldığında karakteri geri döndürür.
stream.ReadLine()
Akıştan bir satır okur ve dizgi (string) olarak geri döndürür. ReadLine fonksiyonu dosyanın sonunda boş bir dizgi döndürür. Satırlar CR karakteri, LF karakteri veya CR/LF çifti ile biter. Bu karakterler döndürülen dizgiye dahil edilir.
A line ends with a CR character, LF character, or a CR/LF pair. These characters are included in the returned string. One can copy a file exactly by calling ReadLine followed by Print repeatedly.
stream.Flush()
Karaktere yönelik girdi ve çıktılar ara belleğe alınır. Flush fonksiyonu akış için tututan arabelliği temizler. Bu fonksiyon nadiren kullanılır. Arabelleğe alınan girdiden (buffered input) ara belleğe alınan çıktıya (buferred output) geçildiğinde, veya tam tersi yapıldığında, akışlar (streams) arabelleklerini uygun bir şekilde temizler; ve bu genellikle Flush fonksiyonunu kullanmak isteyeceğiniz tek senaryodur.
Fancier tipi giriş fonksiyonları
stream.GetToken()
GetToken fonksiyonu tek bir nesneyi girdi akışından ayrıştırır. Örneğin, GetToken fonksiyonu bir dizi basamağı bir tamsayıya (integer) dönüştürecek ve integer değeri döndürecek. GetToken, integer ve gerçek değerleri, çift tırnak ile ayrılan dizgileri (string), ad ve ayraçları algılar. Ayraçlar (delimiters), döndürüldüklerinde isimlere dönüştürülür. GetToken dosyanın sonunda veya ayrıştırmada bir sorunla karılaşılırsa (bir dizgide kapama tırnak işaretinin eksik olması gibi) boş (null) döner.
stream.GetObject()
Basit nesnelere (simple objects) ek olarak, GeObject, köşeli ve süslü parantezlerle çevrelenen dizileri (arrays) ve yapıları (structs) da ayrıştırabilir.
Memory Streams (Bellek Akışları)
io.memFile türü dosya gibi davranan bir bellek bloğunu temsil eder. Bir bellek akışı (memory stream) gerektiği ölçüde büyür veya küçülür ve tüm akış (stream) fonksiyonları ile kullanılabilir. Bir bellek akışı, io.memFile türünün fonksiyon olarak çağırılmasıyla oluşur.
mstream = io.memFile()
Başlangıçta boş olan bir bellek akışı oluşturur.
mstream = io.memFile(string)
Dizgi (string) parametresi tarafından verilen baytları içeren bir bellek akışı oluşturur.
mstream.string
Bu read-only alanı, bir bellek akışının içeriğini dizgi (string) olarak döndürür.
Bir bellek akışına ait tek baytlara (individual byte) indeksleme operatörünü kullanarak erişilebilir ve bu şekilde değiştirilebilirler.
mstream[index]
mstream[index] = newValue
Soketler
Soketler ağ iletişimlerindeki akışlardır. Bir soket, aşağıdaki fonksiyonlardan birini kullanarak oluşturulur.
sock = io.socket.Create()
sock = io.CreateSocket()
Bir soket üzerinde girdi/çıktı fonksiyonlarını kullanmak için, bir peer'a bağlı olmalıdır. Bunu istemci tarafında yapmak için, Connect fonksiyonunu kullanmak yeterli olacaktır.
sock.Connect(address)
where address is a string containing an IP address or domain name and a port number separated by a semicolon. sock.Connect(”www.abcd.com:80”) fonksiyonunun HTTP sunucusuna host (www.abcd.com) üzerinden bağlanmaya çalıştığını varsayalım. Bu durumda Connect, bağlantının kurulması halinde true, kurulamaması durumunda ise false dönecektir.
Soket oluşturma ve bağlantısını sağlama işlemleri aşağıdaki fonksiyonları kullanarak tek adımda gerçekleştirilebilir.
sock = io.socket.Open(address)
sock = io.OpenSocket(address)
sock = io.socket.Open(”www.abcd.com:80”) veya diğer fonksiyondan sonra, sunucudan bilgi almak için geçerli bir HTTP talebi göndermeniz gerektiğini unutmayın. Bu işlem aşağıdaki fonksiyonu kullanarak daha uygun bir şekilde gerçekleştirilebilir.
stream = io.OpenURL(url)
Örneğin, aşağıdaki fonksiyondan hemen sonra, dosya indeksinin içeriğini sunucudan okumaya başlayabilirsiniz.
stream = io.OpenURL(”http://www.abcd.com/index.htm”)
To handle the other side of the connection we use the following functions.
sock.Bind(port)
Bu fonksiyon, soketi verilen port numarasından dinlemeye hazırlar.
sock.Listen()
Soket, Bind çağrısıyla verilen port üzerinde dinlemeye başlar. Listen çağrısından sonra, istemciler Connect çağrısını kullanarak bağlantı kurmayı deneyebilirler.
otherSock = sock.Accept()
Bu fonksiyon Connect çağrısını deneyen istemciyle bağlantı kurar. Accept çağrısından dönen değer, istemciyle iletişim sağlamak için kullanılan bir başka sokettir. Dinleyen soket için Accept veya Close çağrısını yalnızca bir kez kullanabilirsiniz. Accept çağrısının döndürülen değeri, istemciyle iletişimi sağlamak için kullanılan bir başka sokettir.
(The return value of the Accept call is another socket that is used for communication with the client. You can only call Accept another time or Close with the listening socket.)
Connect henüz kimse denenmemiş ise, Accept çağrısı, Connect çağrılıncaya kadar bekleyecektir. Çoğu zaman bu istemediğimiz bir durumdur. Bunun gibi bekleme sürelerinden kaçınmak için, Select fonksiyonunu kullanırız.
io.socket.Select(socketArray)
Select parametresi bir soketler dizisidir. Bu parametreden dönen değer de, parametrenin bir alt kümesi olan soketler dizisidir. Bir soket, yalnızca bekleme yapmadan soket üzerinde bir çağrı gerçekleştirdiğimizde, döndürülen dizide yer alır. Normal soketler için bu durum, o an soketten en az bir bayt okuyabileceğimiz anlamına gelir. Soketleri dinlemek açısından ise bu durum, sokete gelen bir bağlantı olduğu ve Accept çağrısını beklemeden yapabileceğimiz anlamına gelir.
Soketler, tüm akışlar (streams) gibi sock.Close() fonksiyonu çağırarak kapatılmalıdır.
Dosya Sistem Fonksiyonları
io.currentDirectory
Bu değişken ilgili dizinin tam yolunu verir. İlgili dizini bu değişkene atama yaparak değiştirebilirsiniz.
io.CreateDirectory(path)
Dizgi (string) yolu ile adlandırılan bir dizin oluşturur. Dizin (directory) oluşturulursa true, oluşturulmazsa false döner.
io.DeleteFile(path)
Belirtilen dosyayı siler.
io.MoveFile(sourcePath, destPath)
Bir dosyayı taşır veya yeniden adlandırır.
io.FullPathName(name)
Verilen dosya adının tam yol adını göreceli yol adı için döndürür Not that the given file or directory need not exist to compute the full path name.
io.FindFiles(name, option)
İlk parametre bir dosya adı, göreceli veya tam yol adıdır. Bu ad, joker karakterler (wildcards) içerebilir. Sonuç olarak, parametreyle eşleşen dosya isimlerinin bir dizisi (array) ortaya çıkacaktır. İkinci parametre ise, döndürülen dosya adlarının formunu belirleyecek bir tamsayıdır (integer). Eğer bu parametre 0 ise, yalnızca dosya adları döndürülür. Eğer 1 ise, göreceli dosya adlarını ilgili dizinden döndürülür. Eğer 2 ise, tam dosya adları döndürülür.