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