Print

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":
copyraw
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.
  1.  RowID    Name                SKU            Account Email 
  2.  0001    Test Product 1        TEST001        This email address is being protected from spambots. You need JavaScript enabled to view it. 
  3.  0002    Test Product 1        TEST001        This email address is being protected from spambots. You need JavaScript enabled to view it. 
  4.  0003    Test Product 1        TEST001        This email address is being protected from spambots. You need JavaScript enabled to view it. 
  5.  0004    Test Product 1        TEST001        This email address is being protected from spambots. You need JavaScript enabled to view it. 
  6.  0005    Test Product 2        TEST002        This email address is being protected from spambots. You need JavaScript enabled to view it. 
  7.  0006    Test Product 1        TEST001        This email address is being protected from spambots. You need JavaScript enabled to view it. 
  8.  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:
copyraw
//  
// 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);
    }	
}
  1.  // 
  2.  // count total products for availability 
  3.  m_ProductCount = Map()
  4.  for each  r_StockRecord in Stock_Upload[ID != 0] 
  5.  { 
  6.      if(m_ProductCount.get(v_SKU) == null) 
  7.      { 
  8.          m_ProductCount.put(v_SKU,1)
  9.      } 
  10.      else 
  11.      { 
  12.          v_PreviousValue = m_ProductCount.get(v_SKU)
  13.          m_ProductCount.put(v_SKU,v_PreviousValue + 1)
  14.      } 
  15.  } 
info m_ProductCount Yields:
copyraw
{
  "TEST001": 6,
  "TEST002": 1
}
  1.  { 
  2.    "TEST001": 6, 
  3.    "TEST002": 1 
  4.  } 

Counting total products per account:
copyraw
//  
// 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);
    }
}
  1.  // 
  2.  // count total products per account 
  3.  m_Accounts = Map()
  4.  m_Products = Map()
  5.  // 
  6.  // loop through each row 
  7.  for each  r_StockRecord in Stock_Upload[ID != 0] 
  8.  { 
  9.      // 
  10.      // create map entry for account 
  11.      if(m_Accounts.get(v_Email) == null) 
  12.      { 
  13.          m_Products.put(v_SKU,0)
  14.          m_Accounts.put(v_Email,m_Products)
  15.      } 
  16.      // 
  17.      // set product count for account 
  18.      if(m_Accounts.get(v_Email).get(v_SKU) == null) 
  19.      { 
  20.          m_Products = m_Accounts.get(v_Email)
  21.          m_Products.put(v_SKU,1)
  22.          m_Accounts.put(v_Email,m_Products)
  23.      } 
  24.      else 
  25.      { 
  26.          v_PreviousValue = m_Accounts.get(v_Email).get(v_SKU)
  27.          m_Products = m_Accounts.get(v_Email)
  28.          m_Products.put(v_SKU,v_PreviousValue + 1)
  29.          m_Accounts.put(v_Email,m_Products)
  30.      } 
  31.  } 
info m_Accounts Yields:
copyraw
{
  "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
  }
}
  1.  { 
  2.    "This email address is being protected from spambots. You need JavaScript enabled to view it.": { 
  3.      "TEST001": 4, 
  4.      "TEST002": 1 
  5.    }, 
  6.    "This email address is being protected from spambots. You need JavaScript enabled to view it.": { 
  7.      "TEST001": 2 
  8.    } 
  9.  } 
Category: Zoho :: Article: 693