X++ :15- ValidateField Metodu Ne İşe Yarar?
Bu yazıda Dynamics 365 Finance and Operations tablo metotlarından validateField() metodunu anlatacağım. validateField() bir alanın verisi değiştirildiğinde doğrulamaların yapıldığı metottur. Metodun tetiklenmesi için alandan odağın çıkması gerekir. Bir örnek yapalım.
FDBookTable tablosunda metotlara sağ tıklayıp validateField () metodunu Override ettim.
Resim-1
Metoda parametre olarak alan kodu geliyor ona bağlı bir Switch Case yazdım. BookCount Sıfır olarak güncellenmeye çalışıldığında hata verdin diye bir kod yazdım. Hata mesajı için CheckFailed() kullandım.
Resim-2
Tablo tarayıcısıyla açtım ve BookCount sıfır olarak güncellemeye çalıştım ve hata mesajını ekranda gördüm. Bu hatayı düzeltmeden kaydetme veya başka işlem yapamazsınız.
Resim-3
boolean validateField(FieldId p1)
{
boolean ret;
#isoCountryRegionCodes
int lengthAgencyLocationCode;
ret = super(p1);
if (ret)
{
switch (p1)
{
case fieldNum(CustTable, CreditMax) :
if (this.CreditMax < 0)
{
ret = checkFailed(“@SYS69970″);
}
break;
case fieldNum(CustTable, InventLocation) :
ret = this.InventStorageDimMap::validateField(fieldNum(InventStorageDimMap, InventLocationId));
break;
case fieldNum(CustTable, Rfc_MX) :
if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoMX]))
{
ret = taxRegistrationValidator.validateRFC(this.Rfc_MX, this.CompanyType_MX);
}
break;
case fieldNum(CustTable, MainContactWorker) :
if (this.MainContactWorker)
{
ret = smmUtility::isValidWorkerInCurrentCompany(this.MainContactWorker);
}
break;
case fieldNum(CustTable, Blocked) :
ret = this.validateBlocked(this.Blocked);
break;
case fieldNum(CustTable, EinvoiceEANNum):
if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoDK]))
{
ret = CustTable::checkEInvoiceEAN(this.EinvoiceEANNum);
}
break;
}
}
return ret;
}
CustTable validateField () metodunu inceleyelim. Burada uzun validasyonların metotlara taşındığını ve genelde tek satırlı kontroller olduğunu görüyoruz. checkFailed direk veya metotların içinde kullanılıyor. validateField () metodu sadece girişi bitip başka bir nesneye odaklanmak istediğinizde çalışır. Genelde o nesneden ayrılmadan çalışması isteniz ancak bu mümkün değil.
Selamlar.
www.fatihdemirci.net
TAGs: X++, validateField, Azure, Azure DevOps, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365