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
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.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.
- 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.
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
info m_ProductCount Yields:
//
// 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);
}
}
- //
- // 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);
- }
- }
Counting total products per account:
copyraw
info m_Accounts Yields:
//
// 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);
}
}
- //
- // 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);
- }
- }
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
}
}
- {
- "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
- }
- }
Category: Zoho :: Article: 693



Add comment