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.
System.Boolean netBool;
[0-9]{1,2}|25[0-5]|2[0-4][0-9]).”
[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|”
System.Text.RegularExpressions.Match
myMatch;
CodeAccessPermission::revertAssert();
System.Boolean netBool;
System.Text.RegularExpressions.Match
myMatch;
CodeAccessPermission::revertAssert();
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
Address using Regex
/// </summary>
class LogiscticsElectronicAddressValidator
{
}
/// <summary>
/// This method accepts a EMail and validates
this using REGEX
this using REGEX
/// </summary>
/// <returns>
/// true or false based on Regex match
/// </returns>
Static Server
boolean validateEMail(EMail _eMail)
boolean validateEMail(EMail _eMail)
{
Boolean
xppBool;
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.Match
myMatch;
;
new
InteropPermission(InteropKind::ClrInterop).assert();
InteropPermission(InteropKind::ClrInterop).assert();
myMatch =
System.Text.RegularExpressions.Regex::Match(_eMail,MatchEmailPattern);
System.Text.RegularExpressions.Regex::Match(_eMail,MatchEmailPattern);
netBool =
myMatch.get_Success();
myMatch.get_Success();
xppBool =
netBool;
netBool;
CodeAccessPermission::revertAssert();
Return
xppBool;
xppBool;
}
/// <summary>
/// This method accepts a URL and validates
this using REGEX
this using REGEX
/// </summary>
/// <returns>
/// true or false based on Regex match
/// </returns>
Static Server
boolean validateURL(URL _url)
boolean validateURL(URL _url)
{
Boolean
xppBool;
xppBool;
System.Boolean netBool;
Str matchURLPattern = “^(https?://)”
+ “?(([0-9a-z_!~*'().&=+$%-]+:
)?[0-9a-z_!~*'().&=+$%-]+@)?” //user@
)?[0-9a-z_!~*'().&=+$%-]+@)?” //user@
+ @”(([0-9]{1,3}.){3}[0-9]{1,3}” // IP- 199.194.52.184
+ “|” //
allows either IP or domain
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
a slash isn’t required if there is no file name
+ “(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$”;
System.Text.RegularExpressions.Match
myMatch;
new
InteropPermission(InteropKind::ClrInterop).assert();
InteropPermission(InteropKind::ClrInterop).assert();
myMatch =
System.Text.RegularExpressions.Regex::Match(_url,matchURLPattern);
System.Text.RegularExpressions.Regex::Match(_url,matchURLPattern);
netBool =
myMatch.get_Success();
myMatch.get_Success();
xppBool =
netBool;
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.