public with sharing class SurveyFormCtrl {

    @AuraEnabled
    public static List<WrapperSurvey> getSurveyData(String recordId){
        List<WrapperSurvey>WrapperSurveyLst = new List<WrapperSurvey>();
        Map<String,Question__c>quesIdMap = new Map<String,Question__c>();
        Map<String,List<Question_Option__c>> quesOptionMap = new Map<String,List<Question_Option__c>>();
        List<Question__c>questionLst =[select id,name,Question__c,Survey__r.Name,Survey__r.Description__c,
                                                Survey__r.Header__c,Survey__r.Footer__c,Type__c,
                                                Survey__r.Response_Through__c
                                                from Question__c where Survey__c=:recordId];
        for(Question__c ques :questionLst){
            quesIdMap.put(ques.id,ques);
        }
        system.debug('==questionLst=='+questionLst);
        system.debug('==quesIdMap=='+quesIdMap);
        List<Question_Option__c> optionLst= [select id,Question__c,name,Option__c from 
                                                      Question_Option__c where Question__c IN:quesIdMap.keyset()];
        system.debug('==optionLst23=='+optionLst);
        List<Question_Option__c> optionData = new List<Question_Option__c>();
        for(Question_Option__c quesOpt:optionLst){
            if(quesOpt.Option__c!=null || quesOpt.Option__c!=''){
                optionData.add(quesOpt);
                system.debug('==28=optionData=='+quesOpt.Option__c);
                system.debug('==32=optionData=='+optionData);
                quesOptionMap.put(quesOpt.Question__c,optionData);
            } 

        }
        system.debug('==quesOptionMap=='+quesOptionMap);
        system.debug('==38=optionData=='+optionData);                                             
        for(Question__c qst:questionLst){
            WrapperSurvey wrap = new WrapperSurvey();
            QuestionWrap queWrap = new QuestionWrap();
            wrap.Id =qst.Id;
            wrap.Name =qst.Survey__r.Name;
            wrap.Header=qst.Survey__r.Header__c;
            wrap.Footer=qst.Survey__r.Footer__c;
            wrap.Question= qst.Question__c;
            wrap.Type =qst.Type__c;
            system.debug('questionid'+qst.Question__c);
            if(quesOptionMap.containskey(qst.id)){
                system.debug('==39=='+qst.id);
                //wrap.optionLstData=quesOptionMap.get(qst.id);
                //wrap.optionMapData.put(qst.Id,quesOptionMap.get(qst.Id));
                queWrap.questionId=qst.id;
                queWrap.optionNames=quesOptionMap.get(qst.Id);
                List<Question_Option__c>quesOptionLst =quesOptionMap.get(qst.Id);
                String id=qst.id;
                wrap.questionWithOptions.put(id,queWrap);
            }
            WrapperSurveyLst.add(wrap);
        }

        return WrapperSurveyLst;
    }
    @AuraEnabled
    public static void save(String tempArr){
      List<WrapperSurvey> surveyWrapLst = (List<WrapperSurvey>)System.JSON.deserialize(tempArr, List<WrapperSurvey>.class);
        List<Answer__c>answerLst = new List<Answer__c>();
        for(integer i=0;i<surveyWrapLst.size();i++){
            Answer__c ans = new Answer__c();
            system.debug('==30=='+surveyWrapLst[i].Id);
            //system.debug('==31=='+surveyWrapLst[i].Name);
            system.debug('==32=='+surveyWrapLst[i].answer);
            ans.Answer__c=surveyWrapLst[i].answer;
            ans.Question__c=surveyWrapLst[i].Id;
            answerLst.add(ans);
        }
        if(!answerLst.IsEmpty()){
            system.debug('==answerLst='+answerLst);
            insert answerLst;
        }
    }
    public class WrapperSurvey {
        @AuraEnabled public Id Id;
        @AuraEnabled public String Name;
        @AuraEnabled public String Header;
        @AuraEnabled public String Footer;
        @AuraEnabled public String Question; 
        @AuraEnabled public String Type;   
        @AuraEnabled public String answer;   
        @AuraEnabled public Map<Id,List<Question_Option__c>>optionMapData;
        @AuraEnabled public Map<Id,QuestionWrap> questionWithOptions;
    }
    public class QuestionWrap{
         @AuraEnabled public Id questionId;
         @AuraEnabled public List<Question_Option__c> optionNames;

        }
}

Я пытаюсь заполнить оболочку ==QuestionWrap== с помощью questionid и optionnames, но получаю System.NullPointerException: попытка отменить ссылку на нулевой объект в строке № 50. Можете ли вы помочь мне в решении этой проблемы. Любая помощь будет оценена по достоинству.

-3
David Reed 23 Апр 2020 в 01:10
1
Привет Рахул. Пожалуйста, отредактируйте свой пост, чтобы показать нам, что такое Line 50. Но я также рекомендую вам поискать в SFSE вопросы о NullPointerException. Это проблема, которую вы можете и должны решить, просто проследив путь null в своем коде.
 – 
David Reed
23 Апр 2020 в 00:22
Строка № 50 = wrap.questionWithOptions.put(id,queWrap);
 – 
RAHUL KUMAR
23 Апр 2020 в 00:23
В вашем WrapperClass создайте конструктор, который инициализирует как optionMapData, так и questionWithOptions новую карту(). Тогда оба идентификатора равны нулю.
 – 
manjit5190
23 Апр 2020 в 00:27

1 ответ

Это просто вопрос того, что вы фактически не построили карту для получения данных queWrap.

Когда вы объявляете карту, вы также можете инициализировать ее следующим образом:

@AuraEnabled public Map<Id,QuestionWrap> questionWithOptions = new Map<Id, QuestionWrap>();

У вас есть другие карты и списки, которым также, вероятно, нужно присвоить значение.

4
Phil W 23 Апр 2020 в 00:27
На самом деле я не могу правильно получить параметры, связанные с questionid. У меня есть 3 записи в качестве вопросов, а 1 запись имеет тип текста вопроса. Поэтому, конечно, он не вернет значение параметра. Но при восстановлении этих 2 вопросов у меня есть 5 вариантов в записи объекта 1-го вопроса и 2 варианта в записи 2-го вопроса, но, к сожалению, я получаю счет 7 в обеих 2-х записях вопросов. Я вставил свой json выше.
 – 
RAHUL KUMAR
23 Апр 2020 в 00:33
1
На этот вопрос был дан ответ. Если у вас есть дополнительные вопросы, пожалуйста, откройте новый пост; SFSE просит не открывать новые вопросы в комментариях и не заниматься итеративной отладкой.
 – 
David Reed
23 Апр 2020 в 00:46