Les méthodes AuraEnabled ne prennent pas en charge le type de retour de Map <String, Set <String>>

Sep 05 2020

Ceci est mon code dans l'apex, mais ses méthodes Error-AuraEnabled ne prennent pas en charge le type de retour de Map<String, Set<String>>

Je ne comprends map<string, set<string>>pas ce qui ne va pas dans mon code et pourquoi ne pas fonctionner, tout en Map<string, list<string>>fonctionnant bien.

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;
   }
}

Réponses

1 sfdcfox Sep 05 2020 at 21:26

Cette erreur se produit parce que, quelque part en cours de route, Set n'est pas pris en charge envoyé au client, donc plutôt que de casser des choses, ils n'autorisent tout simplement pas ce type de retour pour le moment. Je suppose que salesforce.com a bloqué ce type de retour jusqu'à ce que la conversion sur le client corresponde, plutôt que de le convertir implicitement en un tableau, ce qui pourrait briser leurs plans pour un changement futur lorsque Set est correctement pris en charge (imaginez votre code un jour se brise car le type de client est passé de Array à Set). La solution évidente, pour l'instant, est de renvoyer une liste à la place. Vous pouvez utiliser une méthode d'assistance pour cela:

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;
}

Ce stopgap vous permettra de revenir assez facilement à Map<String, Set<String>>quand / si ce type de données devient supporté, et évite également une réécriture totale de votre code.