How to validate Email and URL through X++
With default functionality in AX, Email address and URL can be of any format and these do not get validated as per their respective correct formats.
Existing functionality
Accounts receivable | Common/Customers | All customers | Customer form | Under Contact information fast tab
Someone can put Email address in any format as I did "faisal" which is not a correct format of email address. Same applies for URL under contact information for customers.
Customized functionality
I created a new class with two static methods to validate these attributes as follows by taking concept from this blog post
Existing functionality
Accounts receivable | Common/Customers | All customers | Customer form | Under Contact information fast tab
Someone can put Email address in any format as I did "faisal" which is not a correct format of email address. Same applies for URL under contact information for customers.
Customized functionality
I created a new class with two static methods to validate these attributes as follows by taking concept from this blog post
/// <summary>
/// Class to validate Logistics Electronic Address using Regex
/// </summary>
class LogiscticsElectronicAddressValidator
{
}
/// <summary>
/// This method accepts a EMail and validates this using REGEX
/// </summary>
/// <returns>
/// true or false based on Regex match
/// </returns>
Static Serverboolean validateEMail(EMail _eMail)
{
Boolean xppBool;
System.Boolean netBool;
Str MatchEmailPattern =
@"^(([\w-]+\.)+[\w-]+|([a-zA-Z]{1}|[\w-]{2,}))@"
+ @"((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?
[0-9]{1,2}|25[0-5]|2[0-4][0-9])\."
+ @"([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?
[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|"
+ @"([\w-]+\.)+[a-zA-Z]{2,4})$";
System.Text.RegularExpressions.MatchmyMatch;
;
newInteropPermission(InteropKind::ClrInterop).assert();
myMatch = System.Text.RegularExpressions.Regex::Match(_eMail,MatchEmailPattern);
netBool = myMatch.get_Success();
xppBool = netBool;
CodeAccessPermission::revertAssert();
ReturnxppBool;
}
/// <summary>
/// This method accepts a URL and validates this using REGEX
/// </summary>
/// <returns>
/// true or false based on Regex match
/// </returns>
Static Serverboolean validateURL(URL _url)
{
Boolean xppBool;
System.Boolean netBool;
Str matchURLPattern = "^(https?://)"
+ "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" //user@
+ @"(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP- 199.194.52.184
+ "|" // allows either IP or domain
+ @"([0-9a-z_!~*'()-]+\.)*" // tertiary domain(s)- www.
+ @"([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." // second level domain
+ "[a-z]{2,6})" // first level domain- .com or .museum
+ "(:[0-9]{1,4})?" // port number- :80
+ "((/?)|" // a slash isn't required if there is no file name
+ "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
System.Text.RegularExpressions.MatchmyMatch;
newInteropPermission(InteropKind::ClrInterop).assert();
myMatch = System.Text.RegularExpressions.Regex::Match(_url,matchURLPattern);
netBool = myMatch.get_Success();
xppBool = netBool;
CodeAccessPermission::revertAssert();
Return xppBool;
}
To call these methods you need to override two methods (ModifiedField and ValidateField) in LogisticsElectronicAddress table.
After implementing this solution you will get error on entering invalid email and URL addresses.
*This post is locked for comments