Hi,
I am unable to get a nested contact/company interest set to selected using CRMScript, a interest without a heading works correctly.
How should this be done?
Sample script to test:
#setLanguageLevel 4;
Integer contactId = 6827;
NSContactAgent contactAgent;
NSContactEntity contactEntity = contactAgent.GetContactEntity(contactId);
NSSelectableMDOListItem[] contactInterests = contactEntity.GetInterests();
Integer interestToSelectId = 6;
// enable
for (Integer i = 0; i < contactInterests.length(); i++)
{
    NSSelectableMDOListItem interest = contactInterests[i];
      
    if (interest.GetId() == interestToSelectId)
    {
        interest.SetSelected(true);
        printLine("found main " + interest.GetName() + " => " + interest.GetId().toString());
    }
    NSSelectableMDOListItem[] childItems = interest.GetChildItems();
    for (Integer y = 0; y < childItems.length(); y++)
    {
        NSSelectableMDOListItem subInterest = childItems[y];
              
        if (subInterest.GetId() == interestToSelectId)
        {
            subInterest.SetSelected(true);
            printLine("found an enabled sub " + subInterest.GetName() + " => " + subInterest.GetId().toString());
        }
    }
}
// check what is enabled
for (Integer i = 0; i < contactInterests.length(); i++)
{
    NSSelectableMDOListItem interest = contactInterests[i];
    if (interest.GetSelected() == true)
    {  
        printLine(interest.GetName() + " => " + interest.GetId().toString() + " ENABLED");
    }
    NSSelectableMDOListItem[] childItems = interest.GetChildItems();
    for (Integer y = 0; y <  childItems.length(); y++)
    {
        NSSelectableMDOListItem subInterest = childItems[y];
        if (subInterest.GetSelected() == true)
        {
            printLine(subInterest.GetName() + " => " + subInterest.GetId().toString() + " ENABLED");
        }
    }
}
contactEntity.SetInterests(contactInterests);
contactEntity = contactAgent.SaveContactEntity(contactEntity);
Can be enabled/selected:
Can't be enabled/selected:
Tested on SOD SuperOffice CRM Online 10.3 Build main_10.3.5_2024.04.10-01
All Replies (2)
Hi David, 
I believe you are missing the step where you actually set the childItems back to the interest.
You should be able to set the childInterests with this script/code, look at line 33 and 37:
#setLanguageLevel 4;
Integer contactId = 6;
NSContactAgent contactAgent;
NSContactEntity contactEntity = contactAgent.GetContactEntity(contactId);
NSSelectableMDOListItem[] contactInterests = contactEntity.GetInterests();
Integer interestToSelectId = 5;
// enable
for (Integer i = 0; i < contactInterests.length(); i++)
{
  NSSelectableMDOListItem interest = contactInterests[i];
  if (interest.GetId() == interestToSelectId)
  {
    interest.SetSelected(true);
    printLine("found main " + interest.GetName() + " => " + interest.GetId().toString());
  }
  NSSelectableMDOListItem[] childItems = interest.GetChildItems();
  for (Integer y = 0; y < childItems.length(); y++)
  {
    NSSelectableMDOListItem subInterest = childItems[y];
    if (subInterest.GetId() == interestToSelectId)
    {
      subInterest.SetSelected(true);
      printLine("found an enabled sub " + subInterest.GetName() + " => " + subInterest.GetId().toString());
      //HERE
      childItems[y] = subInterest;
    }
  }
  //HERE
  interest.SetChildItems(childItems);
}
// check what is enabled
for (Integer i = 0; i < contactInterests.length(); i++)
{
  NSSelectableMDOListItem interest = contactInterests[i];
  if (interest.GetSelected() == true)
  {  
    printLine(interest.GetName() + " => " + interest.GetId().toString() + " ENABLED");
  }
  NSSelectableMDOListItem[] childItems = interest.GetChildItems();
  for (Integer y = 0; y <  childItems.length(); y++)
  {
    NSSelectableMDOListItem subInterest = childItems[y];
    if (subInterest.GetSelected() == true)
    {
      printLine(subInterest.GetName() + " => " + subInterest.GetId().toString() + " ENABLED");
    }
  }
}
contactEntity.SetInterests(contactInterests);
contactEntity = contactAgent.SaveContactEntity(contactEntity);Hope this helps! 
//E