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.

Telif HakkıKullanım KoşullarıGizlilik
Copyright © 2018 Logo Yazılım