function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
KRITI LAHA 8KRITI LAHA 8 

Generate CSV with proper format

Hello, I have this below code,the CSV file is generating but not in proper format. How to generate the CSV file to show full list? 

public class UserService {
    private static String profileName = 'Chatter Free User';
    private static String ps7Name = 'Test Chatter Free7';
   
    private static List<String> ps1_ps10NameList = new List<String>{
        'Test Chatter Free1','Test Chatter Free2','Test Chatter Free3','Test Chatter Free4','Test Chatter Free5','Test Chatter Free6','Test Chatter Free7','Test Chatter Free8','Test Chatter Free9','Test Chatter Free10'};
    
    
    public static List<UserDetail> getUserPermissionDetails()

        Map<Id, User> userMap = new Map<Id, User>([SELECT Id
                                FROM User
                                WHERE Profile.Name = :profileName and Id IN (SELECT AssigneeId 
                                                 FROM PermissionSetAssignment
                                                 WHERE PermissionSet.label = :ps7Name and PermissionSet.IsOwnedByProfile =false)]);
        //System.debug(usermap);
     Map<Id, List<String>> permissionSetMap = new Map<Id, List<String>>();
        
        for(PermissionSetAssignment psa : [SELECT AssigneeId, PermissionSet.label
                                            FROM PermissionSetAssignment
                                            WHERE AssigneeId = : userMap.keySet()
                                              AND (PermissionSet.label IN :ps1_ps10NameList
                                                     OR PermissionSet.label NOT IN :ps1_ps10NameList)and PermissionSet.IsOwnedByProfile =false
                                            ORDER BY AssigneeId, PermissionSet.label])
        {
            List<String> tempList = new List<String>();
             if(permissionSetMap.containsKey(psa.AssigneeId))
                tempList = permissionSetMap.get(psa.AssigneeId);
            
            tempList.add(psa.PermissionSet.label);
            
            permissionSetMap.put(psa.AssigneeId, tempList);
                    
        }

        return evaluateUser(permissionSetMap);
        
    }
    
    
    private static List<UserDetail> evaluateUser(Map<Id, List<String>> permissionSetMap){

        Boolean additional;

    List<UserDetail> userDetailList = new List<UserDetail>();

        List<String> foundList = new List<String>();        
        for(Id id : permissionSetMap.keySet())
        {
      UserDetail ud = new UserDetail();
            additional = false;
            /*system.debug(permissionSetMap.get(id));*/
            foundList.clear();

            for(String str : permissionSetMap.get(id)){
            
                if(!ps1_ps10NameList.contains(str)){
                    additional = true;
                }else{
                    foundList.add(str);
                }
                /*system.debug(userDetailList);*/
            }            
            
            ud.Id = id;
            ud.permissionSetList = permissionSetMap.get(id);
            
            if(additional && ps1_ps10NameList.size() == foundList.size())
                ud.status = 'No Change And Additional';
            else if(additional && ps1_ps10NameList.size() != permissionSetMap.get(id).size())
                ud.status = 'Missing And Additional';
            else if(!additional && ps1_ps10NameList.size() != foundList.size())
                ud.status = 'Missing';
      else if(!additional && ps1_ps10NameList.size() == foundList.size())          
                ud.status = 'No Change';
                
            userDetailList.add(ud);
        }
        System.debug(JSON.serializePretty(userDetailList));
        
            return userDetailList;
       
       
    }
    
    public class UserDetail {
        
        public Id id;
        public List<String> permissionSetList;
        public String status;
    } 
    public static void createcsv(){
      List<UserDetail> theListReturnedFromMethod2 =getUserPermissionDetails(); 
        String req = json.serialize(theListReturnedFromMethod2);
        Blob csvBlob = blob.valueOf(req);
        String csvname='Persona Report'+'.xls';
        Document doc= new document();
        doc.name=csvname;
        doc.folderId=[Select Id, Name from Folder where Name='Persona'].Id;
        doc.body=csvBlob;
        doc.description='Persona';
        insert doc;
    
    }
    
}
SwethaSwetha (Salesforce Developers) 
HI Kriti,

What is the expected vs actual CSV file being generated? Can you include a screenshot? Thanks
KRITI LAHA 8KRITI LAHA 8
Hi Swetha,

All Results are coming in one row but it should come in proper format, for ID it would be one coloumn, for status another column and then for permission set list it would be another. Now, the results are not coming with proper row, coloumn wise format. Thanks