I metodi AuraEnabled non supportano il tipo restituito di Map <String, Set <String>>

Sep 05 2020

Questo è il mio codice in apex, ma mostra i metodi Error-AuraEnabled non supportano il tipo di ritorno di Map<String, Set<String>>

Non capisco cosa c'è di sbagliato nel mio codice e perché map<string, set<string>>non funziona, mentre Map<string, list<string>>funziona bene.

public class testmap {
    @AuraEnabled
   Public static Map<string,set<string>> getmap() {
        Map<string,set<string>> accountmap=new Map<string,set<string>>();
        set<string> valueset=new set<string>();
        
        valueset.add('Value1');
        accountmap.put('Key1',valueset);
        system.debug('Maptest'+accountmap);
        return accountmap;
   }
}

Risposte

1 sfdcfox Sep 05 2020 at 21:26

Questo errore si verifica perché, da qualche parte lungo la strada, Set non è supportato inviato al client, quindi invece di rompere le cose, semplicemente non consentono quel tipo di ritorno per ora. Presumo che salesforce.com abbia bloccato questo tipo di restituzione fino a quando la conversione sul client non corrisponde, piuttosto che convertirla implicitamente in un array, il che potrebbe interrompere i loro piani per una modifica futura quando Set è adeguatamente supportato (immagina che il tuo codice un giorno si interrompa perché il tipo di client è cambiato da Array a Set). La soluzione più ovvia, per ora, è invece restituire un List. Puoi usare un metodo di supporto per questo:

static Map<String, List<String>> convertToMapList(Map<String, Set<String>> source) {
  Map<String, List<String>> result = new Map<String, List<String>>();
  for(String key: source.keySet()) {
    result.put(key, new List<String>(source.get(key)));
  }
  return result;
}

Questo tamponamento ti consentirà di tornare abbastanza facilmente a Map<String, Set<String>>quando / se questo tipo di dati diventa supportato ed evita anche una riscrittura totale del codice.