Başlarken
Logo Object Designer, Logo Objects gibi ERP ürününün kurulu olduğu klasör içerisinde LOD klasörü altında LOD.exe olarak bulunur.
Lod.exe versiyon bağımsızdır. Ancak TPL bağımlı çalışır. UPL(TPL) klasörü ürünün arayüz tanımlarını içerir.
Genel Görünüm
LOD ile neler yapılabilir?
Tiger ekranlarının görünüm ve davranışlarını değiştirebileceğiniz gibi yeni bir modülde geliştirebilirsiniz.
LOD ve UPL(TPL) Arasındaki ilişki nedir?
LOD klasöründe uyarlama yapacağımız araç (LOD.EXE) yer almaktadır.
UPL(TPL) klasörü ise uyarlama yapacağımız ürünün LOD projesi ile ilgili arayüz tanımlarını içeren klasördür.
Bu klasör içeirisinde, iligli versiyona ait aşağıdaki tanımlar yer alır;
- Form tanımları (Malzeme Kartı görüntüsü, Satış faturası görüntüsü gibi)
- Tablo tanımları (_ITEMS, _CLCARD, _ORFICHE gibi tablo ve tablo alan tanımları)
- Menü ağacı (Modül ve alt modul yerleşimleri)
- LVSL Kod kütüphanesi
LOD ile Uyarlama Formuna Bağlı Ek Bilgi Formu
Malzeme kartına bağlı ek bilgi formu oluşturma adımları
- Önce Form tasarım işlemini gerçekleştirilir.
- Sonra tablo oluşturulur.
- Form ile tablo arasında ilişki kurulur.
- Tablo oluşturma işleminde Table Nr. Önemli çakışma yaşanmamalıdır.
- Veri tabanında bu numaraya göre isimlendirilmektedir.
- Ek bilgi Formunda kod yazılmasına gerek yoktur. Tablo alanları componentlere bağlanarak veri tabanına kayıt sağlanır.
Malzeme Kartına Arayüz Uyarlama
- Arayüz uyarlamanın Ek Bilgi Formundan tek farkı
- formlardan veri girişi sağlanıp bu alanların browserda’da gösterilmesidir.
- Ek Bilgi Formu sadece sağ tuş menüsü ile açılan formdan veri girişi sağlanıp bunlar browserda gösterilmez.
- Hem arayüz uyarlamanın çalışması hemde LOD ile yapılan uyarlamanın çalışması için AllowCustomizeForm() methodu kullanılır.
- Arayüz uyarlamaya Ürün destek kısmı destek vermektedir.
- Burada anlatılmasının nedeni Ek bilgi formu ile arayüz uyarlamanın arasındaki farkları göstermek içindir.
Malzeme Kartını Uyarlama
Aşağıdaki tasarımda gösterildiği gibi ürün malzeme kartına ek tab ve alanlar tanımlanabilir.
Sub FormShow()
AllowCustomizeForm()
AppTables[1].GetIntFieldR(RecHandle, "LOGICALREF", intLRef)
CustTables[1].Search(2, 2, intLRef)
if DBErr <> 0 then
CustTables[1].NewRecord()
CustTables[1].SetIntField("PARLOGREF", intLRef)
end if
CustTables[1].SetIntField("A_NUM", 999)
CustTables[1].SetTxtField("A_STR", "Patates")
CustTables[1].UpdateRecord()
End Sub
Sub ButtonClick(ctrl as String)
if ctrl = "LButton1" then
GetTextVal("LTextEdit8", strTxt)
warn(strTxt)
SetTextVal("LTextEdit8", "Domates")
'SetIntVal("LNumEdit4", 999)
SetNumProp("LTextEdit8", 27, 0)
end if
if ctrl = "LButton2" then
p=POS("t","umutcan")
warn(p)
end if
End Sub
Sub BeforeSave(proceed as Integer)
GetTextVal("LTextEdit8", strTxt)
if strTxt = "" then
warn("Text alanı boş geçilemez.")
proceed = 0
end if
End Sub
Sub AfterSave()
AppTables[1].GetIntFieldR(RecHandle, "LOGICALREF", intLRef)
warn(intLRef)
End Sub
Parametre
AppTables : Uygulama tarafından oluşturulan ve açılan tüm tablo nesnelerine bu özellik ile ulaşılabilir.
GetIntFieldR : İlgili kaydın belirteci yerine harici bir kayıt belirtecinde (record handle) çalışmasıdır.
Search : Belirtilen anahtar değerine ve koşula sahip kaydı arar.
Parametreleri :1. Kullanılacak indeksi belirler. 2. Koşul 0 Küçük,1 Küçük veya eşit
2 Eşit,4 Büyük veya eşit,5 Büyük 3. Anahtar değeri. Tek bir indeks için birden fazla alan
birleştirilecekse, değerler noktalı virgül ile ayrılmalıdır.
SetIntField : İlgili kaydın belirtilen alanı için tamsayı (integer) değeri atar.
GetTextVal : Form nesnesine ait bir görsel denetiminde düzenlenen metni döndürür.
SetNumProp : Form nesnesine ait bir görsel denetimin numerik özellik değerini belirler.
POS : Metin içerisindeki pozisyon indeksini verir.
Free Form Oluşturma
Sub FormShow()
SetPopup("LTextEdit1", "LPopupMenu1")
MNAddItem("LPopupMenu1", "Değiştir", 2)
MNAddItem("LPopupMenu1", "Sil", 3)
End Sub
Sub DoubleClick(ctrl as String, index as Integer)
if ctrl = "LTextEdit1" then
Application.CreateAppForm(1017, 0, 0, 0, 0, 2, 1, 1, intLRef, tmpFrm)
if intLRef <> 0 then
AppTables[1].SearchByRef(intLRef)
if DBErr = 0 then
AppTables[1].GetTxtField("CODE", strCode)
setTextVal("LTextEdit1",strCode)
end if
end if
end if
End Sub
Sub ButtonClick(ctrl as String)
if ctrl = "LButton1" then
ShellExecuteX("Notepad.exe", "", "C:\\WINDOWS")
end if
if ctrl = "LButton2" then
mgrid = "LGridList1"
tbrt=Application.GetTableName(1,Application.CompanyId,Application.FiscPerdId)
sqlTxt = "SELECT CODE, NAME FROM "+tbrt+" WHERE CARDTYPE <> 22"
CreateQuery(qry)
qry.SetSqlText(sqlTxt)
qry.executeDirect()
i=0
if qry.ready = 1 then
res = qry.First()
do while res = 1
qry.GetFieldValue(1, 4, strItmCode)
qry.GetFieldValue(2, 4, strItmName)
SetMGridRow(mgrid, i)
InsertGridRow(mgrid, 1)
SetCellText(mgrid, i, 10001, strItmCode)
SetCellText(mgrid, i, 10002, strItmName)
InvalidateGrid(mgrid)
RefreshControl(mgrid, 1)
i=i+1
res = qry.next()
loop
end if
end if
Sub ...
if ctrl = "LButton3" then
UnityApp = OleObject("UnityObjects.UnityApplication")
if UnityApp.Login("","",1) = true then
end if
ADO = OleObject("ADODB.Connection")
end if
End Sub
Sub PopupMenuClick(ctrl as String, index as Integer, result as Integer)
if ctrl = "LPopupMenu1" and index = 3 then
warn("Sil tıklandı....")
end if
End Sub
SetPopup : Popup menüyü ayarlar.
MNAddItem : Popup menüsüne öğe (item) ekler.
CreateAppForm : Uygulama formunu açar.
Parametreleri;
SearchByRef: Verilen referansa göre sorgu sonuçlarını araştırır.
GetTxtField: İlgili kaydın belirtilen alanına ait metin değerini getirir.
ShellExecuteX: Shell, diğer uygulamaları etkinleştiren bir uygulamadır.
GetFieldValue:İlgili satırda yer alan bir alanın değerini okur.
Parametreleri;
SetMGridRow: Memory grid kontrolünün ilgili satırını ayarlar .
InsertGridRow: Memory Gird'e ait ilgili satırın üstüne veya altına bir satır ekler.
SetCellText: Memory Grid kontrolünün belirlenen hücresinde saklanan metin değerini atar.
InvalidateGrid: Veri ızgarasını yeniler.
RefreshControl:Veritabanındaki değer değiştiyse, kontrolün değerini yeniler. (Özellikle de kayıt belirtecini kullanan SetIntFieldR gibi yordamlarla).
Custom Rapor Oluşturma
prints(2)
tblName = Application.GetTableName(1, Application.CompanyID, Application.FiscPerdId)
sqlTxt = "SELECT CODE, NAME FROM " + tblName + " WHERE CARDTYPE <> 22"
CreateQuery(qry)
qry.SetSqlText(sqlTxt)
qry.executeDirect()
if qry.ready = 1 then
res = qry.First()
do while res = 1
qry.GetFieldValue(1, 4, strItmCode)
qry.GetFieldValue(2, 4, strItmName)
SetVarValue(4, strItmCode)
SetVarValue(5, strItmName)
prints(3) 'ilgili section yazdırmak için kullanılır.
res = qry.next()
loop
end if
Sub ReportCreate()
SetHeaderSects([1]) 'Üst başlık
SetFooterSects([4]) 'Alt başlık
End Sub
if FltActive(1) = true then
if FltRange(1) = true then
strBeg = FltStrBeg(1) 'Filtre başlangıç
strEnd = FltStrEnd(1) 'Filtre son
sqlTxt = sqlTxt + " AND (CODE BETWEEN '" + strBeg + "' AND '" + strEnd + "')"
else
strBeg = FltStrVal(1)
sqlTxt = sqlTxt + " AND (CODE = '" + strBeg + "')"
end if
end if
DataGrid kolon ekleme
Sub DBGPrepareQuery(ctrl as String, ID as Integer)
DBGGetQuery("StDataGrid", qry)
'viewName = Application.GetViewName(11 ,Application.CompanyID, Application.FiscPerdId)
viewName = "LV_001_02_GNTOTST"
qry.jointable("GNTOT", viewName, "LGMAIN", "LOGICALREF", "=", "STOCKREF", "GNTOT.INVENNO = 0", 1)
qry.AddSelFieldAsc("GNTOT", "ONHAND", 1, 0, 10018)
End Sub
Sub DBGSetRow(ctrl as String, ID as Integer, row as Long)
DBGGETFetchMode("StDataGrid",ModeID)
if ctrl="StDataGrid" and ModeID=0 then
qry.GetFieldValueAsc(10018, 1, intOnHand)
DBGSetField("StDataGrid", row, 10018, intOnHand)
end if
End Sub
DBGGetQuery: Bir veri ızgarasının sorgu ifadesini alır.
Jointable:Tabloları sorgu için birleştirir.
Parametreleri;
AddSelFieldAsc:Bir veri ızgarasına ait (data grid) sorguya yeni bir alan ekler.
Parametreleri;
GetFieldValueAsc:Bir veri ızgarasının (data grid) sorgusuna eklenen alanın değerini alır.
DBGSetField :Verilen metin değerini, veri ızgarasının bir hücresine atar.
LEFT OUTER JOIN LV_001_02_GNTOTST GNTOT ON(LGMAIN.LOGICALREF=GNTOT.STOCKREF)
AND (GNTOT.INVENNO=0)
GNTOT.ONHAND