How to work with NSSelectableMDOListItem and child items in CRMScript

lock
push_pin
done
Answered
2

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

10 Apr 2024 | 11:53 AM

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

12 Apr 2024 | 08:31 AM
Thanks, that works!
12 Apr 2024 | 08:47 AM

Add reply