A really quick article to test when to use isNull and isBlank.
Why?
So I've noticed that looking at people's Zoho Deluge code, there will often be a check on a null before or after the variable: VS isBlank() can be used to check if the string only contains blanks or if a value is null...
How?
Consider the following test function:
copyraw
	
I've tried this in both Zoho Creator and Zoho CRM with the same results.  I don't code with the method appended at the end of the variable but in more complex method chaining, I can see myself accidentally doing this.  It's more that I saw other code like this and when reverse engineering or debugging the code, it may be worthwhile having a definitive idea of what will happen.void fn_Test()
{
	info "---------------------- Value of TEST is a BLANK String";
	v_Test = "";
	if(isBlank(v_Test))
	{
		info "isBlank Preceding is TRUE";
	}
	else 
    {
		info "isBlank Preceding is FALSE";
    }
	if(v_Test.isBlank())
	{
		info "isBlank Succeeding is TRUE";
	}
	else 
    {
		info "isBlank Succeeding is FALSE";
    }
	if(isNull(v_Test))
	{
		info "isNull Preceding is TRUE";
	}
	else 
    {
		info "isNull Preceding is FALSE";
    }
	if(v_Test.isNull())
	{
		info "isNull Succeeding is TRUE";
	}
	else 
    {
		info "isNull Succeeding is FALSE";
    }
	if(v_Test == null)
	{
		info "Equals Null is TRUE";
	}
	else 
    {
		info "Equals Null is FALSE";
	}
	info "---------------------- Value of TEST is NULL";
	v_Test = null;
	if(isBlank(v_Test))
	{
		info "isBlank Preceding is TRUE";
	}
	else 
    {
		info "isBlank Preceding is FALSE";
    }
	try
	{
		if(v_Test.isBlank())
		{
			info "Blank Succeeding is TRUE";
		}
	}
	catch (e)
	{
		info "isBlank Succeeding is FALSE:  " + e;
	}	
	if(isNull(v_Test))
	{
		info "isNull Preceding is TRUE";
	}
	else 
    {
		info "isNull Preceding is FALSE";
    }
	if(v_Test.isNull())
	{
		info "isNull Succeeding is TRUE";
	}
	else 
    {
		info "isNull Succeeding is FALSE";
    }
	if(v_Test == "")
	{
		info "Equals Blank is TRUE";
	}
	else 
    {
		info "Equals Blank is FALSE";
	}
}
//
// yields
/*
---------------------- Value of TEST is a BLANK String
isBlank Preceding is TRUE
isBlank Succeeding is TRUE
isNull Preceding is TRUE
isNull Succeeding is TRUE
Equals Null is FALSE
---------------------- Value of TEST is NULL
isBlank Preceding is TRUE
isBlank Succeeding is FALSE: Error at line : 57, Value is empty and 'isBlank' function cannot be applied
isNull Preceding is TRUE
isNull Succeeding is TRUE
Equals Blank is FALSE
*/
	- void fn_Test()
- {
- info "---------------------- Value of TEST is a BLANK String";
- v_Test = "";
- if(isBlank(v_Test))
- {
- info "isBlank Preceding is TRUE";
- }
- else
- {
- info "isBlank Preceding is FALSE";
- }
- if(v_Test.isBlank())
- {
- info "isBlank Succeeding is TRUE";
- }
- else
- {
- info "isBlank Succeeding is FALSE";
- }
- if(isNull(v_Test))
- {
- info "isNull Preceding is TRUE";
- }
- else
- {
- info "isNull Preceding is FALSE";
- }
- if(v_Test.isNull())
- {
- info "isNull Succeeding is TRUE";
- }
- else
- {
- info "isNull Succeeding is FALSE";
- }
- if(v_Test == null)
- {
- info "Equals Null is TRUE";
- }
- else
- {
- info "Equals Null is FALSE";
- }
- info "---------------------- Value of TEST is NULL";
- v_Test = null;
- if(isBlank(v_Test))
- {
- info "isBlank Preceding is TRUE";
- }
- else
- {
- info "isBlank Preceding is FALSE";
- }
- try
- {
- if(v_Test.isBlank())
- {
- info "Blank Succeeding is TRUE";
- }
- }
- catch (e)
- {
- info "isBlank Succeeding is FALSE: " + e;
- }
- if(isNull(v_Test))
- {
- info "isNull Preceding is TRUE";
- }
- else
- {
- info "isNull Preceding is FALSE";
- }
- if(v_Test.isNull())
- {
- info "isNull Succeeding is TRUE";
- }
- else
- {
- info "isNull Succeeding is FALSE";
- }
- if(v_Test == "")
- {
- info "Equals Blank is TRUE";
- }
- else
- {
- info "Equals Blank is FALSE";
- }
- }
- //
- // yields
- /*
- ---------------------- Value of TEST is a BLANK String
- isBlank Preceding is TRUE
- isBlank Succeeding is TRUE
- isNull Preceding is TRUE
- isNull Succeeding is TRUE
- Equals Null is FALSE
- ---------------------- Value of TEST is NULL
- isBlank Preceding is TRUE
- isBlank Succeeding is FALSE: Error at line : 57, Value is empty and 'isBlank' function cannot be applied
- isNull Preceding is TRUE
- isNull Succeeding is TRUE
- Equals Blank is FALSE
- */
The intended purpose of isBlank()
copyraw
	
void fn_Test()
{
	info "---------------------- Value of TEST is a String with 2 blank spaces";
	v_Test = "  ";
	if(isBlank(v_Test))
	{
		info "isBlank Preceding is TRUE";
	}
	else 
    {
		info "isBlank Preceding is FALSE";
    }
	if(v_Test.isBlank())
	{
		info "isBlank Succeeding is TRUE";
	}
	else 
    {
		info "isBlank Succeeding is FALSE";
    }
	if(isNull(v_Test))
	{
		info "isNull Preceding is TRUE";
	}
	else 
    {
		info "isNull Preceding is FALSE";
    }
	if(v_Test.isNull())
	{
		info "isNull Succeeding is TRUE";
	}
	else 
    {
		info "isNull Succeeding is FALSE";
    }
	if(v_Test == null)
	{
		info "Equals Null is TRUE";
	}
	else 
    {
		info "Equals Null is FALSE";
	}
}
//
// yields
/*
---------------------- Value of TEST is a String with 2 blank spaces
isBlank Preceding is TRUE
isBlank Succeeding is TRUE
isNull Preceding is FALSE
isNull Succeeding is FALSE
Equals Null is FALSE
*/
	- void fn_Test()
- {
- info "---------------------- Value of TEST is a String with 2 blank spaces";
- v_Test = " ";
- if(isBlank(v_Test))
- {
- info "isBlank Preceding is TRUE";
- }
- else
- {
- info "isBlank Preceding is FALSE";
- }
- if(v_Test.isBlank())
- {
- info "isBlank Succeeding is TRUE";
- }
- else
- {
- info "isBlank Succeeding is FALSE";
- }
- if(isNull(v_Test))
- {
- info "isNull Preceding is TRUE";
- }
- else
- {
- info "isNull Preceding is FALSE";
- }
- if(v_Test.isNull())
- {
- info "isNull Succeeding is TRUE";
- }
- else
- {
- info "isNull Succeeding is FALSE";
- }
- if(v_Test == null)
- {
- info "Equals Null is TRUE";
- }
- else
- {
- info "Equals Null is FALSE";
- }
- }
- //
- // yields
- /*
- ---------------------- Value of TEST is a String with 2 blank spaces
- isBlank Preceding is TRUE
- isBlank Succeeding is TRUE
- isNull Preceding is FALSE
- isNull Succeeding is FALSE
- Equals Null is FALSE
- */
Conclusion
The recommended best practice for checking if the variable is null, contains blanks, or is simply an empty string would be:
copyraw
	
If you're not expecting the user to enter any spaces at all and just want to check if the variable exists or is an empty string, then continue with:
if(isBlank(v_Test))
{
	info "isBlank Preceding is TRUE";
}
	- if(isBlank(v_Test))
- {
- info "isBlank Preceding is TRUE";
- }
copyraw
	
if(isNull(v_Test))
{
	info "isNull Preceding is TRUE";
}
	- if(isNull(v_Test))
- {
- info "isNull Preceding is TRUE";
- }
Additional Note(s):
- I've noticed that if the accepted content on an invokeURL in ZohoCreator is not JSON, then isNull() preceeding will not work. 
 Instead you will need to do something like the following:copyrawm_Header = Map(); m_Header.put("Authorization","Bearer <my_token>"); m_Header.put("Accept","application/vnd.github+json"); m_Header.put("X-GitHub-Api-Version","10-02-2025"); // // query this user's events v_Endpoint_Events = "https://api.github.com/users/joel-the-awesomest/events"; r_Events = invokeurl [ url :v_Endpoint_Events type :GET headers:m_Header ]; for each m_Event in r_Events { if(m_Event.get("id") != null) { ... do stuff } }- m_Header = Map();
- m_Header.put("Authorization","Bearer <my_token>");
- m_Header.put("Accept","application/vnd.github+json");
- m_Header.put("X-GitHub-Api-Version","10-02-2025");
- //
- // query this user's events
- v_Endpoint_Events = "https://api.github.com/users/joel-the-awesomest/events";
- r_Events = invokeUrl
- [
- url :v_Endpoint_Events
- type :GET
- headers:m_Header
- ];
- for each m_Event in r_Events
- {
- if(m_Event.get("id") != null)
- {
- ... do stuff
- }
- }
 
Source(s):
Category: Zoho :: Article: 897
	

 
			      
						  
                 
						  
                 
						  
                 
						  
                 
						  
                 
 
 

 
 
Add comment