Print

Zoho CRM: Mapping a Multi-User or Multi-Lookup field using Deluge

What?
This is a very quick article with examples of managing a multi-user or multi-lookup field in CRM using Zoho Deluge.

Why?
Sometimes you might need this when data mapping fields from one module to another, sometimes you need to manage existing multi-lookups/users in a record.

How?
So the key point to remember is that all multi-select lookup and multi-user lookup fields are held in temporary CRM modules called a "LinkingModule" (as opposed to standard modules and custom modules).

Quick way to determine the API name of the linking module:
  1. Go to setup > Developer Space > functions.
  2. Create a standalone function called "Test".
  3. Type in line 1: r_Record = zoho.crm.getRecords
  4. then press Enter (DO NOT START TYPING FOR A MODULE NAME - LET THE SYSTEM POPUP YOUR OPTIONS AS PER THE FOLLOWING SCREENSHOT - USE ARROW KEYS OR MOUSE): Zoho Deluge - Mapping a Multi-Lookup - Quick Select
As you can see from the screenshot above, there are modules concatenated with one module an "X" and then the name of the linked module. A module called "Opportunities_X_Products" is likely to be a linking module which has a multi-select lookup on both the deal/opportunity and products module. A multi-user lookup will tend to have something like "ModuleName_X_Users".

Find records relevant to this module:
copyraw
l_LinkedRecords = zoho.crm.searchRecords("Opportunities_X_Products","(Opportunity:equals:" + v_DealID + ")");
  1.  l_LinkedRecords = zoho.crm.searchRecords("Opportunities_X_Products","(Opportunity:equals:" + v_DealID + ")")

Find records relevant to this user:
copyraw
v_SearchCriteria = "(field0:equals:" + v_UserID + ")";
l_SearchResults = zoho.crm.searchRecords("Vendors_X_Users",v_SearchCriteria);
  1.  v_SearchCriteria = "(field0:equals:" + v_UserID + ")"
  2.  l_SearchResults = zoho.crm.searchRecords("Vendors_X_Users",v_SearchCriteria)

Code to Add a value to a multi-lookup (on Create Record):
copyraw
// sample code when creating a record in a module that contains a lookup
m_Create = Map();
m_Create.put("Name","Joels Amazing Test");
r_Create = zoho.crm.createRecord("Tests", m_Create);

// now take the ID that was created and use the following code to populate the multi-lookup field
if(!isnull(r_Create.get("id")))
{
    m_Link = Map();

    // using record IDs cos there's nothing better
    m_Link.put("Test",r_Create.get("id"));

    // using record IDs cos there's nothing better
    m_Link.put("Joel",123456789012345678);

    // create link
    r_Link = zoho.crm.createRecord("Tests_X_Contacts", m_Link);
}
  1.  // sample code when creating a record in a module that contains a lookup 
  2.  m_Create = Map()
  3.  m_Create.put("Name","Joels Amazing Test")
  4.  r_Create = zoho.crm.createRecord("Tests", m_Create)
  5.   
  6.  // now take the ID that was created and use the following code to populate the multi-lookup field 
  7.  if(!isnull(r_Create.get("id"))) 
  8.  { 
  9.      m_Link = Map()
  10.   
  11.      // using record IDs cos there's nothing better 
  12.      m_Link.put("Test",r_Create.get("id"))
  13.   
  14.      // using record IDs cos there's nothing better 
  15.      m_Link.put("Joel",123456789012345678)
  16.   
  17.      // create link 
  18.      r_Link = zoho.crm.createRecord("Tests_X_Contacts", m_Link)
  19.  } 

Code to Add a value to a multi-lookup (on Update Record):
copyraw
v_DealID = ifnull(input.p_DealID,0);
if(v_DealID != 0)
{
    m_Link = Map();
    m_Link.put("Deal", v_DealID);
    m_Link.put("Product", 123456789012345678);
    r_Link = zoho.crm.createRecord("Deals_X_Products", m_Link);
}
  1.  v_DealID = ifnull(input.p_DealID,0)
  2.  if(v_DealID != 0) 
  3.  { 
  4.      m_Link = Map()
  5.      m_Link.put("Deal", v_DealID)
  6.      m_Link.put("Product", 123456789012345678)
  7.      r_Link = zoho.crm.createRecord("Deals_X_Products", m_Link)
  8.  } 

Code to Delete a value from a multi-lookup:
copyraw
v_ID2Delete = 123456789012345678;
v_SearchCriteria = "(field0:equals:" + v_myRecordID + ")";
l_SearchResults = zoho.crm.searchRecords("Tests_X_Users",v_SearchCriteria);
for each  r_Link in l_SearchResults
{
    if(!isnull(r_Link.get("id")) && r_Link.get("Test").get("id")==v_ID2Delete)
    {
        m_Delete = Map();
        m_Delete.put("module","Tests_X_Users");
        m_Delete.put("id",r_Link.get("id"));
        r_Delete = zoho.crm.invokeConnector("crm.delete", m_Delete);
    }
}
  1.  v_ID2Delete = 123456789012345678
  2.  v_SearchCriteria = "(field0:equals:" + v_myRecordID + ")"
  3.  l_SearchResults = zoho.crm.searchRecords("Tests_X_Users",v_SearchCriteria)
  4.  for each  r_Link in l_SearchResults 
  5.  { 
  6.      if(!isnull(r_Link.get("id")) && r_Link.get("Test").get("id")==v_ID2Delete) 
  7.      { 
  8.          m_Delete = Map()
  9.          m_Delete.put("module","Tests_X_Users")
  10.          m_Delete.put("id",r_Link.get("id"))
  11.          r_Delete = zoho.crm.invokeConnector("crm.delete", m_Delete)
  12.      } 
  13.  } 

Category: Zoho :: Article: 742