Zoho Deluge - Counting in a Map dataType

What?
A quick article on how to count within a map. I didn't have too much difficulty getting this to work and I'm not sure if there are better ways of counting so I'm documenting it to see if I can refine the code or find a some short codes that will do the same.

Why?
I'm aiming to automate a process which counts the number of products allocated to an account or in total for a purchase order. Let us assume we have the following in a form/report called "Stock_Upload":
RowID	Name	            SKU	        Account Email	
0001	Test Product 1	    TEST001	    This email address is being protected from spambots. You need JavaScript enabled to view it.	
0002	Test Product 1	    TEST001	    This email address is being protected from spambots. You need JavaScript enabled to view it.	
0003	Test Product 1	    TEST001	    This email address is being protected from spambots. You need JavaScript enabled to view it.	
0004	Test Product 1	    TEST001	    This email address is being protected from spambots. You need JavaScript enabled to view it.	
0005	Test Product 2	    TEST002	    This email address is being protected from spambots. You need JavaScript enabled to view it.	
0006	Test Product 1	    TEST001	    This email address is being protected from spambots. You need JavaScript enabled to view it.	
0007	Test Product 1	    TEST001	    This email address is being protected from spambots. You need JavaScript enabled to view it.
The code is a for loop which iterates through each row, assigning an entry for a new product or account, and specifying the quantity for each.

How?
So depending on the number of levels, the count will be with a series if then else statements. See the results/yield section to determine which best fits your scenario:

Counting total products:
//  
// count total products for availability
m_ProductCount = Map();
for each  r_StockRecord in Stock_Upload[ID != 0]
{
    if(m_ProductCount.get(v_SKU) == null)
    {
        m_ProductCount.put(v_SKU,1);
    }
    else
    {
        v_PreviousValue = m_ProductCount.get(v_SKU);
        m_ProductCount.put(v_SKU,v_PreviousValue + 1);
    }	
}    
info m_ProductCount Yields:
{
  "TEST001": 6,
  "TEST002": 1
}

Counting total products per account:
//  
// count total products per account
m_Accounts = Map();
m_Products = Map();
//  
// loop through each row
for each  r_StockRecord in Stock_Upload[ID != 0]
{
    //  
    // create map entry for account
    if(m_Accounts.get(v_Email) == null)
    {
        m_Products.put(v_SKU,0);
        m_Accounts.put(v_Email,m_Products);
    }
    //  
    // set product count for account
    if(m_Accounts.get(v_Email).get(v_SKU) == null)
    {
        m_Products = m_Accounts.get(v_Email);
        m_Products.put(v_SKU,1);
        m_Accounts.put(v_Email,m_Products);
    }
    else
    {
        v_PreviousValue = m_Accounts.get(v_Email).get(v_SKU);
        m_Products = m_Accounts.get(v_Email);
        m_Products.put(v_SKU,v_PreviousValue + 1);
        m_Accounts.put(v_Email,m_Products);
    }
}
info m_Accounts Yields:
{
  "This email address is being protected from spambots. You need JavaScript enabled to view it.": {
    "TEST001": 4,
    "TEST002": 1
  },
  "This email address is being protected from spambots. You need JavaScript enabled to view it.": {
    "TEST001": 2
  }
} 

Related Articles

Joes Revolver Map

Accreditation

Badge - Certified Zoho Creator Associate
Badge - Certified Zoho Creator Associate

Donate & Support

If you like my content, and would like to support this sharing site, feel free to donate using a method below:

Paypal:
Donate to Joel Lipman via PayPal

Bitcoin:
Donate to Joel Lipman with Bitcoin - Valid till 8 May 2022 3QnhmaBX7LQSRsC9hh6Je9rGQKEGNQNfPb
© 2021 Joel Lipman .com. All Rights Reserved.