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(@[email protected]) 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()