Performanslı ve güvenli bir script yazmak için ipuçları
Elinizdeki bir nesneyi başka bir nesneye kopyalamak istediğinizde, bu işlemi Set komutuyla veritabanına gitmeden yapabilirsiniz.
// Kaynak taşıma kabının Id si ile hedef taşıma kabı veritabanından okunuyor
Container.Get(@
@Container
.Id,@
@Container2
)
// Veritabanına gitmeden, kaynak taşıma kabı nesnesi hedef taşıma kabına atanıyor
Set(@
@Container2
, @
@Container
)
Get işlemi, okunan nesnenin içindeki bağlantılı nesneleri de otomatik doldurur. Eğer sadece ana nesneye ihtiyacınız varsa, Get komutunun 2. parametresine nesnenin adını yazabilirsiniz.
// Bu işlem @@Address nesnesi ile birlikte ilgili @@Warehouse, @@WarehouseFloor, @@WarehouseZone, @@WarehouseBlock nesnelerini de veritabanından okuyup doldurur.
Address.Get(
"Address='@AdresBarkod'"
)
// Bu işlem sadece @Adres nesnesini veritabanından okuduğu adres bilgisiyle doldurur.
Address.Get(
"Address='@AdresBarkod'"
,
@Adres
)
Scriptteki tüm nesneler globaldir. Yani bir kez dolduğunda, boşaltılmadığı ya da başka bir komutla doldurulmadığı müddetçe dolu kalır. Kayıt hataları yaşamamak için, işlem öncesinde işlemi etkileyecek değişkenleri boşaltmalısınız.
// ResetVariables komutu hafızadaki değişkenleri boşaltır.
ResetVariables({
"name"
:[
"@@ProductionOrder"
,
"@@ProductionOrderLine"
,
"@@WorkOrder"
,
"@@WorkOrderLine"
,
"@@OrderSlip"
,
"@@OrderSlipLine"
,
"@@Arp"
]})
Sık yaptığınız işlemleri ortak bir forma taşıyarak oradan çağırabilir, scriptinizin daha kısa ve derli toplu olmasını sağlayabilirsiniz.
Set(
@YetkiKodu
,
"GIRIS"
)
// Adres için kullanılacak yetki kodu değişkene atanıyor
CallForm(AdresListeleSec)
// Adres seçim formu çağrılıyor
If(
@AdresSecimSonucu
= -
1
,Goto(BasaDon))
// Formdan hatalı sonuç dönmüşse script yönlendiriliyor
BeginForm(AdresListeleSec)
// Ortak adres seçim formu
Set(
@AdresSecimSonucu
,
0
)
// Sonuç değişkeni sıfırlanıyor
Address.List(
"AuthCode='@YetkiKodu'"
,
""
,
@AdresListesi
)
If(
@AdresListesi
.rowCount<
1
)
ShowMessage({
"title"
:
"UYARI"
,
"message"
:
"Tanımlı Adres Bulunamadı"
,
"buttons"
:
"TAMAM"
},
@Secenek
)
Set(
@AdresSecimSonucu
, -
1
)
// Sonuç değişkeni hatalı olarak belirleniyor
Else()
If(
@AdresListesi
.rowCount =
1
)
// Tek adres varsa direkt @@Address değişkenine atanıyor
Address.Get(
@AdresListesi
.rows.
1
.Id)
Else()
// Birden çok adres varsa listeden seçip yaptırılıyor
PopupView(
@AdresListesi
.rows,{
"mode"
:
"list"
,
"title"
:
"Kabul Adres Listesi"
,
"fields"
:[
"Address|Adres Tanımı|15|L"
]},
@sira
)
Address.Get(
@AdresListesi
.rows.
@sira
.Id)
EndIf()
EndIf()
ReturnForm()
// Bu formu çağıran satıra geri dönülüyor
EndForm()
Sık kullandığınız sabitleri bir kez tanımlayıp, scriptin her yerinde kullanabilirsiniz.
// Set komutu JSON yapısında değişken atamasını destekler.
Set(
@EmirDurum
, {
"Bekliyor"
:
12
,
"IslemeAlindi"
:
13
,
"Tamamlandi"
:
14
})
// Emir statüsü tamamlandı olarak belirleniyor. JSON nesnelerin alt nesnelerine . (nokta) ile erişilebilir.
CustomState.Get(
@EmirDurum
.Tamamlandi)
Gerekmedikçe, nesneleri veritabanından doldurmak için Sql komutu kullanmayın. List ve Get komutları, yetkiler dahil bir çok kontrolü yaparak verileri getirir.
// Kullanıcının yetkisi olduğu-olmadığı, aktif firmaya ait olan-olmayan, kullanımda olan-olmayan bütün depoları getirir.
Sql(
"SELECT * FROM SysWarehouse"
,
@Depolar
)
// Sadece aktif firmaya ait, kullanımda olan ve o kullanıcının yetkisi olan depoları getirir.
Warehouse.List(
""
,
""
,
@Depolar
)
Gerekmedikçe, veritabanında güncelleme işlemleri için Sql komutu kullanmayın. Save komutu kaydetme sırasında bir çok kontrolü yapar.
// Fiş statüsünü Entegre Edildi olarak günceller ama entegrasyonu tetiklemez.
Sql(
"UPDATE Slip SET StateId=19"
,
@sonuc
)
// Fiş statüsünü Entegre Edildi olarak günceller ve o statünün otomatik eylemi olarak ERP'ye entegre olmasını sağlar.
CustomState.Get(
19
)
Slip.Save()