Skip to main content

Notifications

Dynamics 365 Community / Blogs / The Dynamics 365 Library / How to validate Email and U...

How to validate Email and URL through X++

Faisal Fareed Profile Picture Faisal Fareed 10,794 User Group Leader
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

/// <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.


Comments

*This post is locked for comments