Showing posts with label Tips and Tricks. Show all posts
Showing posts with label Tips and Tricks. Show all posts

Wednesday, June 24, 2015

How to do email validation in a Nintex Form using JQuery

Custom validations can be achieved quite easily by writing client side code in JQuery in a Nintex Form. There can be a requirement to check all mandatory fields are filled in the form or an email provided is a valid email or a number entered by user is only numeric. SharePoint allows this OOTB by defining the type of field, required or not required attribute of field but those validations happen server side on a Nintex Form. Lot of times we need to have a client side validation to inform the user then and there regarding wrong input. For example if an email needs to be validated using JQuery here are the steps to achieve this in a Nintex Form.

In Nintex Form designer drag the email field to the form from the list columns. In the control settings of the email field go to Advanced section and select "Store Client ID in JavaScript variable" as "Yes" and assign name as "txtEmail" as shown in below screenshot.


After specifying the control client JavaScript variable include the Form.js script file in the form Settings -> Advanced -> Custom JavaScript Includes

/SiteAssets/jquery-1.8.3.min.js
/SiteAssets/Form.js

Add a label control at the top of the form and set the properties of the control as shown in screenshot below. This label control will display the error message to the end user.



Set the button properties of the submit button of the form to following as shown in the screenshot so that the Validate function is called on the click of the button.

Form.js

function CheckEmailAddressIsValid(emailId) {

    var pattern = new RegExp(/^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/);
    return pattern.test(emailId);
};

function Validate()
{
if($('#'+txtTitle).val() == ''){
  $('.lblErrorMessage').text("Please provide title.");
  $('.lblErrorMessage').css('color', 'red');
  $('.lblErrorMessage').css('font-size', 'small');
  $('.lblErrorMessage').css('font-weight', 'bold');
  $('#'+txtTitle).css('background-color', '#FF9999');
           $('#'+txtTitle).focus();
  return false;
}
else
{
$('#'+txtTitle).css('background-color', '#FFFFFF');
}

var emailAddress = $('#'+txtEmail).val();
      if (emailAddress.trim() == '') 
      {
       $('.lblErrorMessage').text("Please provide email address.");
       $('.lblErrorMessage').css('color', 'red');
       $('.lblErrorMessage').css('font-size', 'small');
       $('.lblErrorMessage').css('font-weight', 'bold');
  
       $('#'+txtEmail).css('background-color', '#FF9999');
       $('#'+txtEmail).focus();
       return false;
   }
   else
   {
if (!CheckEmailAddressIsValid(emailAddress.trim())) {
$('.lblErrorMessage').text("Please provide a valid email address.");
$('.lblErrorMessage').css('color', 'red');
$('.lblErrorMessage').css('font-size', 'small');
$('.lblErrorMessage').css('font-weight', 'bold');
$('#'+txtEmail).css('background-color', '#FF9999');
$('#'+txtEmail).focus();
return false;
   }
  $('#'+txtEmail).css('background-color', '#FFFFFF');
   }
}

Here is the output of validation applied for email address on the Nintex Form

We can do any custom validation using this approach like numeric only, date validations or any other kind of validation.

Happy coding!

Monday, June 15, 2015

How to integrate Nintex Form with JSON REST service using Jquery

Problem/Requirement: In one of my SharePoint project there was requirement to integrate with ATO (ABN Service) web services to validate ABN number provided by the user to be correct and in active state. User should not be able to provide inactive or expired ABN. The validation required to be done client side, before the Nintex form is submitted and sent for approval. Once the form is submitted, a workflow kicks in and the item goes for approval.

Solution: As a solution to this requirement I developed a JSON REST service which acts as a wrapper between external ATO web service and internal SharePoint Nintex Form. This REST service queries the ATO service, get the response, parses the response into an object and then return the object in JSON format to the caller, which in this case is a Nintex Form. User gets instant validation result in an interactive manner that the whether the number provided is valid or not. The benefits of using this approach are light weight data calls, quick real-time validation and ease of parsing results in JQuery.

Steps:
1. Create a WCF JSON REST service for fetching or validating the data input more detail to create such service is here.
2. Create SharePoint custom list.
3. Access the list in SharePoint and open Nintex Form designer from the ribbon control
4. Add two label controls on the form. Set the "CSS class" value to 'lblMessage' and 'lblInstruction' respectively. These will display message to the user.
5. Include following scripts in the custom JavaScript includes in the form settings. Better to keep these files in Site Assets library to refer them easily on the forms.
      jquery-1.11.1.min.js
      FormScript.js
6. Add a button on the form and set the following properties of the control in Nintex Form.

JSON

{
    "ABN": "12345678910",
    "EffectiveFrom": "27/04/1900",
    "EffectiveTo": "1/01/0001",
    "IsValid": true,
    "Status": "Active",
}

FormScript.js

var ABNValidationServiceURL = "http://xxx-xxx-xxx/ABNValidate.svc";
var abn = $('#' + txtABNNumber).val();


function ValidateABN(){

//support cross domain ajax calls
jQuery.support.cors = true;

//URL of the JSON REST service
var url = ABNValidationServiceURL + "/IsValid/" + abn;


//query ATO service for ABN

$.getJSON(url, function (atoData, status) {
  if(status == "success"){
     if(atoData["Status"] != "null" &&  atoData["Status"] == "Active"){
$('.lblMessage').show().fadeOut(4000, "linear");;
$('.lblInstruction').css('color','green');
$('.lblInstruction').css('font-size', 'small');
$('.lblInstruction').text("Please continue filling the address and bank details.").fadeOut(4000, "linear");
}
else
{
   $('.lblMessage').show(); 
$('#' + txtABNNumber).css('border','1px solid red');
$('.lblMessage').css('color','red');
$('.lblMessage').text("Please provide a valid ABN number").fadeOut(4000, "linear");
}
}
});
}
OUTPUT:

This approach has couple of benefits:

1. Data is light weight so quite fast processing.
2. Adds more usability to the form since validation is quick and done client side.
3. Straight forward access of JSON data in JQuery and cleaner JS code.

This is just an example but there can be various other ways in which JQuery can be leveraged in conjunction with Nintex Forms to make the forms more interactive, user friendly and flexible. Hope this helps.

Cheers
Happy coding!

Sunday, April 26, 2015

How to get any user profile property value on a Nintex Form 2010 in seconds

This can be a very helpful and handy feature for getting user profile property values for logged in user on a Nintex Form for example if there is a requirement to auto populate user phone number in a field when the New form loads, or adding First Name and Last Name to a Name field automatically on load or populating user's department in a field.

To achieve this we can use the inbuilt function provided by Nintex. Here is how:

1. Drag a Calculated value on the form and double click on the control to configure.
2. Go to the Formula field and click on the function button.

 

3. Go to Runtime functions tab and select userProfileLookup function. First argument in this function is the user ID of the user. I have taken current user variable which contains existing user login id. Second argument is the property name "WorkPhone" Use it as shown below in the screenshot



and here is the output of this

A complete set of user profile properties can be found at MSDN. Sometimes we are in need of just one property and do not want to use lot of code to bring that value to the form. So this is a precise and cleaner way of getting those properties handy.

However, it should not be over used because every call made by this method hits the user profile service to get the requested value. I will suggest to keep these calls to minimum on your form to avoid performance bottlenecks.

Happy coding.