8

I was searching for a method to find the count of selected multi-select picklist. My aim is to select multiple options for Known-Languages in a Drop down and to display the selected count in a Counter and reflect the changes of count based on selection from multi-select picklist using Insert-Update before trigger.

But couldn't able to find a direct one and was able to see some workaround way using a List and the split method using ';' and it worked well (Referred Link)

I have written my trigger as below and it worked fine with my test cases.

trigger AccountMultiselect on Account (before insert, before update) {
    for(Account acc:Trigger.new){
        if(String.isNotBlank(acc.Languages_Known__c)){
            List<String> Langs = acc.Languages_Known__c.split(';');
            acc.Counter__c     = Langs.size();
        } else {
            acc.Counter__c     = 0;
        } 

    }
}

Can some one let me know

  1. Are there any direct methods to check the count instead of List and split ? This approach was suggested somewhere 2013 and just want to know any new methods available recently.

  2. Does the above code have any loopholes?

1
  • 1
    As a one-liner, for performance: acc.Counter__c = acc.Languages_Known__c == null? 0: acc.Languages_Known__c.split(';').size();, but there's nothing wrong with the trigger as is.
    – sfdcfox
    Commented Jan 30, 2017 at 2:56

3 Answers 3

4

Is there any direct methods to check the count instead of List and Split method using ';'

Nope, splitting by semicolon and calling size() on the resulting list is pretty much it. There are probably one or two other ways (1 + # of semicolons), but the method you're using now is likely the simplest.

Does the above code have any loop holes?

Probably not. It's a short piece of code that uses pretty common (and standard) methods.

Generally speaking, having a good suite of unit tests is important. Having them would increase one's confidence that a piece of code will behave as expected under a variety of circumstances.

If you don't have tests that verify the following cases, I'd suggest writing tests to cover these cases:

  • What happens when Languages_Known__c is null?
  • What happens when Languages_Known__c is empty (but not null)?
  • Do you get a count of 1 when Languages_Known__c only selects one option (no semicolons)?
  • Do you get a count of 2 when Languages_Known__c selects two options?
  • What happens when Languages_Known__c only contains semicolons?
  • What happens when Languages_Known__c contains duplicate selections?

The second, fifth, and sixth cases shouldn't occur in normal use, but can happen if some other code is writing the value of Languages_Known__c (which is just a semicolon-delimited string, after all).

1
  • 1
    2, 5, and 6 will not occur in Trigger.new, though. There's no practical point in testing those, but otherwise a good answer.
    – sfdcfox
    Commented Jan 30, 2017 at 2:54
3

If you don't have much values in your multi-picklist you could do it with a formula field(Number) :

IF(INCLUDES(Languages_Known__c,"ENGLISH"), 1 , 0) +
IF(INCLUDES(Languages_Known__c,"FRENCH"), 1 , 0) +
IF(INCLUDES(Languages_Known__c,"SPANISH"), 1 , 0)
0

There's the function PICKLISTCOUNT for formulas. So you can write a formula field like so:

PICKLISTCOUNT(Languages_Known__c)

I understand it wasn't available when you asked this question. It's new as of, I believe, Winter 23

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .