• Akshay Shrivastava
  • NEWBIE
  • 154 Points
  • Member since 2021

  • Chatter
    Feed
  • 0
    Best Answers
  • 1
    Likes Received
  • 0
    Likes Given
  • 27
    Questions
  • 20
    Replies
Here is my vf page I want to convert this in the .docx format.
Right now its opening in .doc file which is not opening in mobile.

I want to open this file into Mobile. Can anyone help?


apex:page showHeader="false"
           lightningStyleSheets="true"
           controller="FridayReportController"
           applyHtmlTag="false" applyBodyTag="false"
contentType="application/msword#ManagerReport_{!todaydate}.doc"
           >
    <apex:slds />
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
        
    </head> 

                    <table style="width: 100%;" border="1" >
                        <tbody>
                            <tr>
                                <td style="background-color:#014486;color:white;font-family:Calibri">Event Date:<span style="font-weight:700">&nbsp;</span></td>
                                <td style="background-color:#FFBA0D;font-family:Calibri">Booking Id:<span style="font-weight:700">&nbsp;{</span></td>
                                <td style="background-color:#014486; color:white;font-family:Calibri">Start Time:<span style="font-weight:700">&nbsp;&nbsp;for&nbsp;&nbsp;mins</span></td>
                            </tr>
                        </tbody>
                    </table>
Hello guys,
I am trying to write test class but iam unable to remove error and get more then 75% coverage. Can anyone help me.

Apex class ----->
public class SendEmailCtrl {
    public Set<Id> recordIdSet;
    public List<opportunity> oppList;
    public List<Opportunity> opportunities{get;private set;}
    //public List<EmailTemplate> templateName{get;set;}
    private List<EmailTemplate> allEmailTemplates;
    private List<Folder> allEmailTemplateFolders;
    public Integer numberOfSuccessfulMessages{get;set;}
    public String selectedEmailTemplateFolder {public get; public set;}
    public String selectedEmailTemplate {public get; public set;}
    public EmailTemplate chosenEmailTemplate {public get; private set;}
    public SendEmailCtrl(ApexPages.StandardSetController stdSetController){
        opportunities = (List<Opportunity>) stdSetController.getSelected();
        recordIdSet = new Set<Id>();
        numberOfSuccessfulMessages = 0;
        if(opportunities.size()>0)
        {
            for(Opportunity opp : opportunities) 
            {  
                recordIdSet.add(opp.Id);              
            }
        }else{
            ApexPages.AddMessage(new ApexPages.Message(ApexPages.Severity.ERROR,'Please Select atleast one record'));
            numberOfSuccessfulMessages=1;
        }
        allEmailTemplates = [select Id, Name, Subject, Body, FolderId from EmailTemplate order by Name asc];
        allEmailTemplateFolders = [select Id, Name from Folder where Type = 'Email' order by Name asc];
    }
    
    
    public List<SelectOption> getEmailTemplateFolderOpts() {
        List<SelectOption> opts = new List<SelectOption>();
        opts.add(new SelectOption('null', ' - Select - '));
        for ( Folder f : allEmailTemplateFolders )
            opts.add(new SelectOption(f.Id, f.Name));
        opts.add(new SelectOption(UserInfo.getOrganizationId(), 'Unfiled Public'));
        return opts;
    }
    
    public List<SelectOption> getEmailTemplateOpts() {
        List<SelectOption> opts = new List<SelectOption>();
        if ( selectedEmailTemplateFolder != null ) {
            opts.add(new SelectOption('null', ' - Select - '));
            Id selectedId = (Id) selectedEmailTemplateFolder;
            for ( EmailTemplate et : allEmailTemplates ) {
                if ( et.FolderId == selectedId )
                    opts.add(new SelectOption(et.Id, et.Name));
            }
        }
        return opts;
    }
    
    public PageReference refreshEmailTemplateSection() {
        if ( selectedEmailTemplateFolder == null || selectedEmailTemplateFolder == 'null' ) {
            selectedEmailTemplateFolder = null;
            selectedEmailTemplate = null;
        }
        if ( selectedEmailTemplate == null || selectedEmailTemplate == 'null' ) {
            selectedEmailTemplate = null;
            chosenEmailTemplate = null;
        } else {
            Id selectedId = (Id) selectedEmailTemplate;
            for ( EmailTemplate et : allEmailTemplates ) {
                if ( et.Id == selectedId ) {
                    chosenEmailTemplate = et;
                    break;
                }
            }
        }
        return null;
    }
    
    public void sendEmail(){
        
        list<opportunity> opplist= [SELECT Id,Contact__c from Opportunity where id in :recordIdSet];
        map<Id,opportunity> oppMap = new Map<Id,opportunity>(oppList);
        list<Messaging.SingleEmailMessage> emailtemp = new List<Messaging.SingleEmailMessage>();
        
        //EmailTemplate templateId = [Select id from EmailTemplate where DeveloperName  = 'Rebooking']; 
        for(id oppId : oppMap.keyset()){
            Messaging.SingleEmailMessage message = new Messaging.SingleEmailMessage();
            // message.setToAddresses(new list <string>(oppMap.Get(oppId).Contact__c));    
            
            message.setTemplateID(chosenEmailTemplate.Id);
            message.setSaveAsActivity(true); // Line no. 84
            message.setWhatId(oppId);
            message.setTargetObjectId(oppMap.Get(oppId).Contact__c);
            message.setTreatTargetObjectAsRecipient(true);
            emailtemp.add(message);
            
        } 
        Messaging.SendEmailResult[] results =Messaging.sendEmail(emailtemp);
        
        for(Messaging.SendEmailResult emailresult : results){
            
            if(emailresult.isSuccess()){
                numberOfSuccessfulMessages++;
            }else{
                for (Messaging.Sendemailerror sendEmailError : emailresult.getErrors()){
                    
                    Apexpages.addMessage(new ApexPages.Message (ApexPages.Severity.ERROR,'Send Email Result Error: ' +sendEmailError.Message));
                }
            }
        }
        if(numberOfSuccessfulMessages >0){
            ApexPages.AddMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM,'Number of Emails sent Successfully: '+numberOfSuccessfulMessages));
            
        }else{
            ApexPages.AddMessage(new ApexPages.Message(ApexPages.Severity.ERROR,'NO EMAIL SENT: Something went wrong'));
            numberOfSuccessfulMessages=1;
        }
        /*Integer start = System.Now().millisecond();
        while(System.Now().millisecond()< start+3000){ 
            SendEmailCtrl.redirect();
        }*/
        // return 'done';
        
    }
    public PageReference redirect(){
        PageReference pageRef = new PageReference('/lightning/o/Opportunity/list?filterName=Recent');
        pageRef.setRedirect(true);
        return pageRef;
    }
}

test class ---------------------------->
@isTest 
public class SendEmailCtrl_test { 
    @isTest
    public static void getOpportunityList()
    {
        List<Opportunity> oppList = new List<Opportunity>();
        
        //Insert new Account
        Account accObj = new Account();
        accObj.Name = 'New Account';
        insert accObj;
        
        //insert new contact
        Contact conObj = new Contact();
        conObj.AccountId = accObj.id;
        conObj.LastName ='LName_Test1';
        conObj.FirstName='FName_Test1';
        conObj.Email='FName_Test1@yopmail.com';
        insert conObj;
        
        //Insert new opportunity
        Opportunity oppObj = new Opportunity();
        oppObj.Name = 'Opportunity Name Test1';
        oppObj.AccountId = accObj.id;
        oppObj.StageName = 'Prospecting';
        oppObj.Contact__c = conObj.id;
        oppObj.CloseDate = system.Today()+3;
        insert oppObj;
        oppList.add(oppObj);
       
     //System.assert(ApexPages.hasMessages(ApexPages.SEVERITY.ERROR));
        //System.assert(ApexPages.hasMessages(ApexPages.SEVERITY.CONFIRM));
    
  
        //List<Opportunity> opplist = SendEmailCtrl_test.getOpportunityList();
        Test.startTest();
        ApexPages.StandardSetController stdSetControllerObj = new ApexPages.StandardSetController(opplist);
        stdSetControllerObj.setSelected(opplist);
       
        map<Id,opportunity> oppMap = new Map<Id,opportunity>(oppList);
        SendEmailCtrl obj = new SendEmailCtrl(stdSetControllerObj);
        obj.refreshEmailTemplateSection();
        obj.getEmailTemplateOpts();
        obj.getEmailTemplateFolderOpts();
        obj.redirect();
        obj.sendEmail();
        
        Test.stopTest();    
    }
}

Error----------------->
Attempt to derefrence null object.
Class.SendEmailCtrl.sendEmail: line 84, column 1
Class.SendEmailCtrl_test.getOpportunityList: line 46, column 1

AnyOne can help ?
I am trying to create test class of below apex class . can anyone help me on this.

public class SoftWebhookHandler {
    private static final Map<String, Sobject> SOBJECT_LIST_CONST = new Map<String, Sobject>{'Lead'=>new Lead()};
        
        public static void SoftOperationManager(String responseData){
            
        }
    public static Map<String, Object> getSerializeData(String responseData){
        Map<String, Object> returnData = (Map<String, Object>)JSON.deserializeUntyped(responseData);
        return returnData;
    }
    public static wrapper getSobjectFields(String sObjectName){
        String commaSepratedFields = '';
        if(sObjectName != null && sObjectName != ''){
            Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
            Map<String, Schema.SObjectField> fieldMap = schemaMap.get(sObjectName).getDescribe().fields.getMap();
            map<string,string> wrapperMap = New Map<String,string>();
            commaSepratedFields = 'Id';
            for(String fieldName : fieldMap.keyset()){
                Schema.DescribeFieldResult a_Field_Description = fieldMap.get( fieldName ).getDescribe();
                wrapperMap.put(fieldName,string.valueof(a_Field_Description.getType()));
               if(fieldName!='Id')
                    commaSepratedFields = commaSepratedFields + ', ' + fieldName;
            }
            system.debug('before'+wrapperMap.size());
            wrapper returnWrapper = new wrapper(commaSepratedFields,wrapperMap);
            system.debug('after'+returnWrapper.metadata.size());
            return returnWrapper;
            
            
        }
        return null;
    }
    
    //Post
    public static String  SoftPostOperation(String responseData,String URI){
        List<String> responseDataList=URI.split('/'); 
        String EasySoft_Lead_Id='';
        Map<String, Object> returnData = (Map<String, Object>)JSON.deserializeUntyped(responseData);
        String SobjName=responseDataList.get(responseDataList.size()-1);
        map<string,string> getMetaData = SoftWebhookHandler.getSobjectFields(SobjName).metadata;
        system.debug(getMetaData.size());
        Schema.SObjectType convertType = Schema.getGlobalDescribe().get(SobjName);
        Sobject genericObject = convertType.newSObject();
        for(string k : getMetaData.keyset()){
        system.debug('post  =  '+k+'==='+getMetaData.get(k));
        }
        for(string ApiName : returnData.keyset()){
            system.debug('ApiName'+ApiName);
            string ApiNametocheck=ApiName.toLowercase();
            system.debug(getMetaData.get(ApiName));
            if(SobjName=='Note__c' && ApiName=='Soft_Lead_Id__c' && (String)returnData.get(ApiName)!=null){
                
                EasySoft_Lead_Id=(String)returnData.get(ApiName);
            }
            if(getMetaData.get(ApiNametocheck)=='DATETIME'){
                genericObject.put(ApiName,Datetime.valueOf(string.valueOf(returnData.get(ApiName))));
            }
            ELSE if(getMetadata.get(ApiNametocheck)=='DATE'){
                genericObject.put(ApiName,Date.valueOf(string.valueOf(returnData.get(ApiName))));
            }
            ELSE if(getMetadata.get(ApiNametocheck)=='BOOLEAN'){
                genericObject.put(ApiName,Boolean.valueOf(string.valueOf(returnData.get(ApiName)))); 
            }
            else
                genericObject.put(ApiName,returnData.get(ApiName));    
        }
        if(SobjName=='Lead')
            Database.upsert(genericObject,Lead.Soft__c);
        else{
            list<Lead> LeadList=new list<Lead>();
            if(Soft_Lead_Id!=null){
                LeadList=[SELECT id from lead where Soft__c=:Soft_Lead_Id];
                if(LeadList.size()>0){
                    genericObject.put('Lead__c',LeadList[0].Id);
                }
            }
            Database.upsert(genericObject,note__c.Soft_Id__c );
        }
        
        return  JSON.serializePretty(genericObject);
    }
    
    //Get
    public static String SoftGetOperation(String responseData){
        List<String> responseDataList=responseData.split('/');  
        Sobject recordDetails;
        String recordId=responseDataList.get(responseDataList.size()-1);
        String sObjectName=responseDataList.get(responseDataList.size()-2);
        if(recordId!=null){
            wrapper wrpperRes  = SoftWebhookHandler.getSobjectFields(sObjectName);
            string fieldsList= wrpperRes.commaSepratedFields;
            String query = 'select ' + fieldsList + ' from ' + sObjectName + ' WHERE EasySoft__c  =:recordId OR Id =:recordId limit 1 ';
            List<Sobject> queryData = Database.query(query);
            if(!queryData.isEmpty()){
                recordDetails = queryData[0];
                return  JSON.serializePretty(recordDetails);
            }else{
                return 'No record found';
            }
        }
        return null;
    }
    public class wrapper {
        public string commaSepratedFields {get;set;}
        public map<string,string> metadata{get;set;}
        public wrapper(string commaSepratedFields1, map<string,string> metadata1){
            commaSepratedFields=commaSepratedFields1;
            metadata=metadata1;
        }
    }
}

Thanks
<apex:page >
   <iframe height="600px" id="theIframe" name="theIframe" src="https://salesforce.com" width="100%"></iframe>
</apex:page>

When I am trying to preview the above Visualforce page. it shows error
www.salesforce.com refused to connect.
 Can anyone help me with this.
Thanks
I have a requirement for outlook integration with salesforce. I have seen many videos on youtube but it did not resolve my issue. can anyone suggest to me the right way?
I need if anyone send email then it should be shown on record activity page
trigger OrderOfExecutionBeforeTrigger on OrderOfExecution__c (before update) {
    list<OrderOfExecution__c> OexString= new list<OrderOfExecution__c>();
    
    for(OrderOfExecution__c Oex : trigger.new)
    {
        OexString=Oex.execute__c;
        Oex.Execute__c= OexString + 'BeforeTrigger';
        update Oex.Execute__c;
    }
    
}


can anyone help me
On click on submit button, I want to check that field have some value.
if the field does not have value then do not save the detail
Quiery1= 'select Required_car__c,Email from Lead where Status = Car Not Available';

Quiery2='select Car_Details_c from Available_c';

Now I want
Quiery3= Required_car__c==Car_details__c
can anyone help
 I want to Make a picklist called "Reason" to be mandatory when the value on another picklist called "Status" equals to decline. How can this achieve on visualforce page?
price : function(component, event, helper){
         var list = component.get("v.ProductList");
        var length = list.length;
        var select = component.find("PName").get("v.value");
        
        
        for(var i= 0;i<length;i++){
           
            if(select == list[i].Name){
              var pr = list[i].Price__c;
               component.find("price").set("v.ItemInstance.Price__c",pr);
              
            }



error---

This page has an error. You might just need to refresh it.
Assertion Failed!: This component does not allow set on nested properties: false
Failing descriptor: {markup://c:DynamicRowitemCmp}


can anyone help me on this
 
In lead object a field (product detail) and a picklist (status)
now if the product is not available then the picklist value is Product is not available.
Another object Available product
if After the inquiry of the user if the product is available then an email should be sent to that user that your product is available.
Basically, I want a batch class whose work is to check the lead object records if the picklist value is set to Not Available then
match the product detail field of the lead object and the Name field of the available object. and if a match found then email that user
 
I have a custom object.
if Name field of Custom object is same as the name field of Contact object.then email of that contact should be in custom object email field
I am fetching all the Name field values of records but there are duplicate names.
so I want to show without duplication.
I have created a picklist(Record choice set) in the flow
 
This is trigger for email and it is working perfectly . But i want to Send mail like that...
Dear Name,
your car bill  details is given below....
Car name : Car_name__c
Car model: Car_Model__c
etc..
like this email should received to the recepitant..


trigger EmailBill on Create_Bill__c (After insert, after update) {
    
    if(trigger.isAfter){
        if(trigger.isInsert || trigger.isUpdate){
            set<Id> conSetId=new set<Id>();
            for(Create_Bill__c obj:trigger.new){
                if(obj.Email_ID__c != null){
                    conSetId.add(obj.id);
                }
            }
            List<Create_Bill__c> conList=new List<Create_Bill__c>();
            conList=[select id,Email_ID__c,BuyerId__c,Name,Car_Name__c,Colour__c,Contact_No__c,Address__c,Date_Time__c,Engine_No__c,Model_Name__c,Total_Price__c from Create_Bill__c where id in: conSetId];
            for(Create_Bill__c cObj: conList){
                if(cObj.Email_ID__c !=null)
                    EmailManager.sendMail(cObj.Email_ID__c,'Dear ','Your Car bill details is below' + cObj.Contact_No__c);
            }
        }
        
    }
}
i have created a app ..in which iam using standard objects..i want to restrict user not to see the records created by admin  
I had 2 objects with 3 fields in each..
now i want if the first 2 field  of  object2 is same as object1 then the 3rd field of object2 is updated same as object1 3rd field.User-added image
i want to show records based on picklist selection..
if i select 2 then .. two accounts show
if select 4 then.. four accounts show.

component....---

<aura:component implements="flexipage:availableForAllPageTypes" 
                controller="GetAccountChild"
                access="global" >
    
    <aura:attribute name="accList"
                    type="List"/>
    <aura:attribute name="Accounts" type="Account[]"/>
     <aura:attribute name="mycolumns" type="List"/>

    
    <aura:handler name="init"
                  value="{!this}"
                  action="{!c.doInit}"/>
    <lightning:select name="cStat" label="select a value" value="New" aura:id="statusPicklist" >
        <option value="2">2</option>
        <option value="4">4</option>
        <option value="10">10</option>
    </lightning:select>

    <br/><br/>
    <lightning:datatable data="{! v.acctList }"
                         columns="{! v.mycolumns }"
                         keyField="id"
                         hideCheckboxColumn="true"/>

    <aura:attribute name="searchResult" type="List" description="use for store and display account list return from server"/>
    <aura:attribute name="searchKeyword" type="String" description="use for store user search input"/>
    <aura:attribute name="activeSections" type="List"/>
    <div class="slds-border_bottom">
        <h1>Accounts</h1></div>  
    <div class="slds-scrollable_y">
        <div class="slds-text-longform">
            <lightning:input value="{!v.searchKeyword}"
                             placeholder="search Accounts.."
                             aura:id="searchField"
                             label="Account Name"/>
            
            <lightning:button onclick="{!c.Search}"
                              variant="brand"
                              label="Search"
                              iconName="utility:search"/>
            
            
            <lightning:accordion allowMultipleSectionsOpen="true" activeSectionName="{! v.activeSections }" onsectiontoggle="{! c.handleSectionToggle }">
                <div class="demo-only demo-only--sizing slds-grid slds-wrap">
                    <div class="slds-size_1-of-2">
                        <div class="slds-box slds-box_x-small slds-text-align_left slds-m-around_x-small">
                            
                            <aura:iteration items="{!v.accList}" 
                                            var="acc">
                                
                                <lightning:accordionSection name="{!acc.Name}" 
                                                            label="{!acc.Name}">
                                    
                                    
                                    <div class="slds-scrollable" style="height:10rem;width:24rem">
                                        <div class="slds-text-longform" style="width:150%">
                                            
                                            <lightning:tabset selectedTabId="one">
                                                
                                                <lightning:tab label="Contacts" id="one">
                                                    <aura:iteration items="{!acc.Contacts}" var="con" indexVar="index">
                                                        <li>Contact {!index + 1} Name : {!con.Name}</li>
                                                        <li>Contact Phone :</li>
                                                        <p><lightning:formattedPhone value="{!con.Phone}"></lightning:formattedPhone></p>
                                                        <br></br>
                                                    </aura:iteration>
                                                </lightning:tab>
                                                
                                                <lightning:tab label="Opportunities" id="two">
                                                    <aura:iteration items="{!acc.Opportunities}" var="opp" indexVar="index">
                                                        <li>Opportunities {!index + 1} Name : {!opp.Name}</li>
                                                        <li>ID : {!opp.Id}</li>
                                                        <br></br>
                                                    </aura:iteration>
                                                </lightning:tab>
                                            </lightning:tabset>
                                        </div>
                                    </div>
                                </lightning:accordionSection>
                            </aura:iteration>
                        </div>
                    </div>
                </div>
            </lightning:accordion>
        </div>
    </div>
    
</aura:component>

controller----

({
    doInit : function(component, event, helper) {
        
        helper.accordHelper(component,event,helper)
        
   
    },
    handleSectionToggle: function (component, event, helper) {
        var openSections = event.getParam("openSections");
        
        if (openSections.length === 0) {
            alert("All sections are closed");
        } else {
            alert(openSections);
        }
    },
     Search: function(component, event, helper) {
            helper.accordHelper(component, event);
     },
     onChange: function (cmp, event, helper) {
        var selectedPicklistValue= component.find("statusPicklist").get("v.value");
        alert("selectedPicklistValue ==>" +selectedPicklistValue)

    }

})



helper..---

({
    accordHelper :function(component, event, helper) {
         component.set('v.mycolumns');
        var action=component.get("c.showAccountsForAccordion");
             action.setParams({ searchKey : component.get("v.searchKeyword") });
        action.setCallback(this,function(response){
            var state = response.getState();
            if(state === "SUCCESS"){
                var allValues = response.getReturnValue();
                console.log("allValues--->>> " + JSON.stringify(allValues));
                component.set('v.activeSections', allValues.Name);
                component.set('v.accList', allValues);
            }
            else if(state === "ERROR") {
                var errors = response.getError();
                if(errors){
                    if(errors[0] && errors[0].message){
                        console.log("Error Message: " + errors[0].message);
                    }
                }
                else{
                    console.log("Unknown Error");
                }
            }
        });
        $A.enqueueAction(action);
    }
    
    
})


can anyone help on this
In the below code filter showing accounts list..and accordian also showing account list.. i want to show filter on accordian list only. 


<aura:component implements="flexipage:availableForAllPageTypes" 
                controller="GetAccountChild"
                access="global" >
    
    <aura:attribute name="accList"
                    type="List"/>
    <aura:attribute name="Accounts" type="Account[]"/>
    
    
    <aura:handler name="init"
                  value="{!this}"
                  action="{!c.doInit}"/>
    <lightning:card title="Filtered Accounts">
        <div class="search-field">
            <lightning:input aura:id="nameFilter" label="Filter names" onchange="{!c.handleNameFilterChange}" />
        </div>
        <div class="results">
            <aura:if isTrue="{!v.Accounts.length > 0}">
                <p class="has-results">
                    Showing {!v.Accounts.length} accounts(s):
                </p>
                <ol class="slds-list_dotted">
                    <aura:iteration items="{!v.Accounts}" var="Account">
                        <li>
                            <a class="Account-name" onclick="{!c.handleClickAccountName}" data-sfid="{!Account.Id}">
                                {!Account.Name}
                            </a>
                        </li>
                    </aura:iteration>
                </ol>
                <aura:set attribute="else">
                    <p class="no-results">Nothing to show.</p>
                </aura:set>
            </aura:if>
        </div>
    </lightning:card>
    <aura:attribute name="activeSections" type="List"/>
    <div class="slds-border_bottom">
        <h1>Accounts</h1></div>  
    <div class="slds-scrollable_y">
        <div class="slds-text-longform">
            
            <lightning:accordion activeSectionName="{! v.activeSections }" onsectiontoggle="{! c.handleSectionToggle }">
                <div class="demo-only demo-only--sizing slds-grid slds-wrap">
                    <div class="slds-size_1-of-2">
                        <div class="slds-box slds-box_x-small slds-text-align_left slds-m-around_x-small">
                            
                            <aura:iteration items="{!v.accList}" 
                                            var="acc">
                                
                                <lightning:accordionSection name="{!acc.Name}" 
                                                            label="{!acc.Name}">
                                    
                                    
                                    <div class="slds-scrollable" style="height:10rem;width:24rem">
                                        <div class="slds-text-longform" style="width:150%">
                                            
                                            <lightning:tabset selectedTabId="one">
                                                
                                                <lightning:tab label="Contacts" id="one">
                                                    <aura:iteration items="{!acc.Contacts}" var="con" indexVar="index">
                                                        <li>Contact {!index + 1} Name : {!con.Name}</li>
                                                        <li>Contact Phone :</li>
                                                        <p><lightning:formattedPhone value="{!con.Phone}"></lightning:formattedPhone></p>
                                                        <br></br>
                                                    </aura:iteration>
                                                </lightning:tab>
                                                
                                                <lightning:tab label="Opportunities" id="two">
                                                    <aura:iteration items="{!acc.Opportunities}" var="opp" indexVar="index">
                                                        <li>Opportunities {!index + 1} Name : {!opp.Name}</li>
                                                        <li>ID : {!opp.Id}</li>
                                                        <br></br>
                                                    </aura:iteration>
                                                </lightning:tab>
                                            </lightning:tabset>
                                        </div>
                                    </div>
                                </lightning:accordionSection>
                            </aura:iteration>
                        </div>
                    </div>
                </div>
            </lightning:accordion>
        </div>
    </div>
    
</aura:component>


this code is working properly.. i just want to put filter 
I have accounts names and their child object name also like,, contacts and opportunity.. 
i want that when i click any account name ,, then a alert is shown on page showing the name of that account name. 
this is my lightning component code,, it is in working condition now i only want to add above feature. 


   
    <aura:attribute name="accList"
                    type="List"/>
    
    <aura:handler name="init"
                  value="{!this}"
                  action="{!c.doInit}"/>
    
    <div class="slds-border_bottom">
        <h1>Accounts</h1></div>  
    <div class="slds-scrollable_y">
        <div class="slds-text-longform">
            
            <lightning:accordion>
                <div class="demo-only demo-only--sizing slds-grid slds-wrap">
                    <div class="slds-size_1-of-2">
                        <div class="slds-box slds-box_x-small slds-text-align_left slds-m-around_x-small">
                            
                            <aura:iteration items="{!v.accList}" 
                                            var="acc">
                                
                                <lightning:accordionSection name="{!acc.Name}" 
                                                            label="{!acc.Name}">
                                    
                                    
                                    <div class="slds-scrollable" style="height:10rem;width:24rem">
                                        <div class="slds-text-longform" style="width:150%">
                                            
                                            <lightning:tabset selectedTabId="one">
                                                
                                                    <lightning:tab label="Contacts" id="one">
                                                        <aura:iteration items="{!acc.Contacts}" var="con" indexVar="index">
                                                            <li>Contact {!index + 1} Name : {!con.Name}</li>
                                                            <li>Contact Phone :</li>
                                                            <p><lightning:formattedPhone value="{!con.Phone}"></lightning:formattedPhone></p>
                                                            <br></br>
                                                        </aura:iteration>
                                                    </lightning:tab>
                                                
                                                    <lightning:tab label="Opportunities" id="two">
                                                        <aura:iteration items="{!acc.Opportunities}" var="opp" indexVar="index">
                                                            <li>Opportunities {!index + 1} Name : {!opp.Name}</li>
                                                            <li>ID : {!opp.Id}</li>
                                                            <br></br>
                                                        </aura:iteration>
                                                    </lightning:tab>
                                            </lightning:tabset>
                                        </div>
                                    </div>
                                </lightning:accordionSection>
                            </aura:iteration>
                        </div>
                    </div>
                </div>
            </lightning:accordion>
        </div>
    </div>
    
</aura:component> 
i have created a app ..in which iam using standard objects..i want to restrict user not to see the records created by admin  
Hello guys,
I am trying to write test class but iam unable to remove error and get more then 75% coverage. Can anyone help me.

Apex class ----->
public class SendEmailCtrl {
    public Set<Id> recordIdSet;
    public List<opportunity> oppList;
    public List<Opportunity> opportunities{get;private set;}
    //public List<EmailTemplate> templateName{get;set;}
    private List<EmailTemplate> allEmailTemplates;
    private List<Folder> allEmailTemplateFolders;
    public Integer numberOfSuccessfulMessages{get;set;}
    public String selectedEmailTemplateFolder {public get; public set;}
    public String selectedEmailTemplate {public get; public set;}
    public EmailTemplate chosenEmailTemplate {public get; private set;}
    public SendEmailCtrl(ApexPages.StandardSetController stdSetController){
        opportunities = (List<Opportunity>) stdSetController.getSelected();
        recordIdSet = new Set<Id>();
        numberOfSuccessfulMessages = 0;
        if(opportunities.size()>0)
        {
            for(Opportunity opp : opportunities) 
            {  
                recordIdSet.add(opp.Id);              
            }
        }else{
            ApexPages.AddMessage(new ApexPages.Message(ApexPages.Severity.ERROR,'Please Select atleast one record'));
            numberOfSuccessfulMessages=1;
        }
        allEmailTemplates = [select Id, Name, Subject, Body, FolderId from EmailTemplate order by Name asc];
        allEmailTemplateFolders = [select Id, Name from Folder where Type = 'Email' order by Name asc];
    }
    
    
    public List<SelectOption> getEmailTemplateFolderOpts() {
        List<SelectOption> opts = new List<SelectOption>();
        opts.add(new SelectOption('null', ' - Select - '));
        for ( Folder f : allEmailTemplateFolders )
            opts.add(new SelectOption(f.Id, f.Name));
        opts.add(new SelectOption(UserInfo.getOrganizationId(), 'Unfiled Public'));
        return opts;
    }
    
    public List<SelectOption> getEmailTemplateOpts() {
        List<SelectOption> opts = new List<SelectOption>();
        if ( selectedEmailTemplateFolder != null ) {
            opts.add(new SelectOption('null', ' - Select - '));
            Id selectedId = (Id) selectedEmailTemplateFolder;
            for ( EmailTemplate et : allEmailTemplates ) {
                if ( et.FolderId == selectedId )
                    opts.add(new SelectOption(et.Id, et.Name));
            }
        }
        return opts;
    }
    
    public PageReference refreshEmailTemplateSection() {
        if ( selectedEmailTemplateFolder == null || selectedEmailTemplateFolder == 'null' ) {
            selectedEmailTemplateFolder = null;
            selectedEmailTemplate = null;
        }
        if ( selectedEmailTemplate == null || selectedEmailTemplate == 'null' ) {
            selectedEmailTemplate = null;
            chosenEmailTemplate = null;
        } else {
            Id selectedId = (Id) selectedEmailTemplate;
            for ( EmailTemplate et : allEmailTemplates ) {
                if ( et.Id == selectedId ) {
                    chosenEmailTemplate = et;
                    break;
                }
            }
        }
        return null;
    }
    
    public void sendEmail(){
        
        list<opportunity> opplist= [SELECT Id,Contact__c from Opportunity where id in :recordIdSet];
        map<Id,opportunity> oppMap = new Map<Id,opportunity>(oppList);
        list<Messaging.SingleEmailMessage> emailtemp = new List<Messaging.SingleEmailMessage>();
        
        //EmailTemplate templateId = [Select id from EmailTemplate where DeveloperName  = 'Rebooking']; 
        for(id oppId : oppMap.keyset()){
            Messaging.SingleEmailMessage message = new Messaging.SingleEmailMessage();
            // message.setToAddresses(new list <string>(oppMap.Get(oppId).Contact__c));    
            
            message.setTemplateID(chosenEmailTemplate.Id);
            message.setSaveAsActivity(true); // Line no. 84
            message.setWhatId(oppId);
            message.setTargetObjectId(oppMap.Get(oppId).Contact__c);
            message.setTreatTargetObjectAsRecipient(true);
            emailtemp.add(message);
            
        } 
        Messaging.SendEmailResult[] results =Messaging.sendEmail(emailtemp);
        
        for(Messaging.SendEmailResult emailresult : results){
            
            if(emailresult.isSuccess()){
                numberOfSuccessfulMessages++;
            }else{
                for (Messaging.Sendemailerror sendEmailError : emailresult.getErrors()){
                    
                    Apexpages.addMessage(new ApexPages.Message (ApexPages.Severity.ERROR,'Send Email Result Error: ' +sendEmailError.Message));
                }
            }
        }
        if(numberOfSuccessfulMessages >0){
            ApexPages.AddMessage(new ApexPages.Message(ApexPages.Severity.CONFIRM,'Number of Emails sent Successfully: '+numberOfSuccessfulMessages));
            
        }else{
            ApexPages.AddMessage(new ApexPages.Message(ApexPages.Severity.ERROR,'NO EMAIL SENT: Something went wrong'));
            numberOfSuccessfulMessages=1;
        }
        /*Integer start = System.Now().millisecond();
        while(System.Now().millisecond()< start+3000){ 
            SendEmailCtrl.redirect();
        }*/
        // return 'done';
        
    }
    public PageReference redirect(){
        PageReference pageRef = new PageReference('/lightning/o/Opportunity/list?filterName=Recent');
        pageRef.setRedirect(true);
        return pageRef;
    }
}

test class ---------------------------->
@isTest 
public class SendEmailCtrl_test { 
    @isTest
    public static void getOpportunityList()
    {
        List<Opportunity> oppList = new List<Opportunity>();
        
        //Insert new Account
        Account accObj = new Account();
        accObj.Name = 'New Account';
        insert accObj;
        
        //insert new contact
        Contact conObj = new Contact();
        conObj.AccountId = accObj.id;
        conObj.LastName ='LName_Test1';
        conObj.FirstName='FName_Test1';
        conObj.Email='FName_Test1@yopmail.com';
        insert conObj;
        
        //Insert new opportunity
        Opportunity oppObj = new Opportunity();
        oppObj.Name = 'Opportunity Name Test1';
        oppObj.AccountId = accObj.id;
        oppObj.StageName = 'Prospecting';
        oppObj.Contact__c = conObj.id;
        oppObj.CloseDate = system.Today()+3;
        insert oppObj;
        oppList.add(oppObj);
       
     //System.assert(ApexPages.hasMessages(ApexPages.SEVERITY.ERROR));
        //System.assert(ApexPages.hasMessages(ApexPages.SEVERITY.CONFIRM));
    
  
        //List<Opportunity> opplist = SendEmailCtrl_test.getOpportunityList();
        Test.startTest();
        ApexPages.StandardSetController stdSetControllerObj = new ApexPages.StandardSetController(opplist);
        stdSetControllerObj.setSelected(opplist);
       
        map<Id,opportunity> oppMap = new Map<Id,opportunity>(oppList);
        SendEmailCtrl obj = new SendEmailCtrl(stdSetControllerObj);
        obj.refreshEmailTemplateSection();
        obj.getEmailTemplateOpts();
        obj.getEmailTemplateFolderOpts();
        obj.redirect();
        obj.sendEmail();
        
        Test.stopTest();    
    }
}

Error----------------->
Attempt to derefrence null object.
Class.SendEmailCtrl.sendEmail: line 84, column 1
Class.SendEmailCtrl_test.getOpportunityList: line 46, column 1

AnyOne can help ?
I am trying to create test class of below apex class . can anyone help me on this.

public class SoftWebhookHandler {
    private static final Map<String, Sobject> SOBJECT_LIST_CONST = new Map<String, Sobject>{'Lead'=>new Lead()};
        
        public static void SoftOperationManager(String responseData){
            
        }
    public static Map<String, Object> getSerializeData(String responseData){
        Map<String, Object> returnData = (Map<String, Object>)JSON.deserializeUntyped(responseData);
        return returnData;
    }
    public static wrapper getSobjectFields(String sObjectName){
        String commaSepratedFields = '';
        if(sObjectName != null && sObjectName != ''){
            Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
            Map<String, Schema.SObjectField> fieldMap = schemaMap.get(sObjectName).getDescribe().fields.getMap();
            map<string,string> wrapperMap = New Map<String,string>();
            commaSepratedFields = 'Id';
            for(String fieldName : fieldMap.keyset()){
                Schema.DescribeFieldResult a_Field_Description = fieldMap.get( fieldName ).getDescribe();
                wrapperMap.put(fieldName,string.valueof(a_Field_Description.getType()));
               if(fieldName!='Id')
                    commaSepratedFields = commaSepratedFields + ', ' + fieldName;
            }
            system.debug('before'+wrapperMap.size());
            wrapper returnWrapper = new wrapper(commaSepratedFields,wrapperMap);
            system.debug('after'+returnWrapper.metadata.size());
            return returnWrapper;
            
            
        }
        return null;
    }
    
    //Post
    public static String  SoftPostOperation(String responseData,String URI){
        List<String> responseDataList=URI.split('/'); 
        String EasySoft_Lead_Id='';
        Map<String, Object> returnData = (Map<String, Object>)JSON.deserializeUntyped(responseData);
        String SobjName=responseDataList.get(responseDataList.size()-1);
        map<string,string> getMetaData = SoftWebhookHandler.getSobjectFields(SobjName).metadata;
        system.debug(getMetaData.size());
        Schema.SObjectType convertType = Schema.getGlobalDescribe().get(SobjName);
        Sobject genericObject = convertType.newSObject();
        for(string k : getMetaData.keyset()){
        system.debug('post  =  '+k+'==='+getMetaData.get(k));
        }
        for(string ApiName : returnData.keyset()){
            system.debug('ApiName'+ApiName);
            string ApiNametocheck=ApiName.toLowercase();
            system.debug(getMetaData.get(ApiName));
            if(SobjName=='Note__c' && ApiName=='Soft_Lead_Id__c' && (String)returnData.get(ApiName)!=null){
                
                EasySoft_Lead_Id=(String)returnData.get(ApiName);
            }
            if(getMetaData.get(ApiNametocheck)=='DATETIME'){
                genericObject.put(ApiName,Datetime.valueOf(string.valueOf(returnData.get(ApiName))));
            }
            ELSE if(getMetadata.get(ApiNametocheck)=='DATE'){
                genericObject.put(ApiName,Date.valueOf(string.valueOf(returnData.get(ApiName))));
            }
            ELSE if(getMetadata.get(ApiNametocheck)=='BOOLEAN'){
                genericObject.put(ApiName,Boolean.valueOf(string.valueOf(returnData.get(ApiName)))); 
            }
            else
                genericObject.put(ApiName,returnData.get(ApiName));    
        }
        if(SobjName=='Lead')
            Database.upsert(genericObject,Lead.Soft__c);
        else{
            list<Lead> LeadList=new list<Lead>();
            if(Soft_Lead_Id!=null){
                LeadList=[SELECT id from lead where Soft__c=:Soft_Lead_Id];
                if(LeadList.size()>0){
                    genericObject.put('Lead__c',LeadList[0].Id);
                }
            }
            Database.upsert(genericObject,note__c.Soft_Id__c );
        }
        
        return  JSON.serializePretty(genericObject);
    }
    
    //Get
    public static String SoftGetOperation(String responseData){
        List<String> responseDataList=responseData.split('/');  
        Sobject recordDetails;
        String recordId=responseDataList.get(responseDataList.size()-1);
        String sObjectName=responseDataList.get(responseDataList.size()-2);
        if(recordId!=null){
            wrapper wrpperRes  = SoftWebhookHandler.getSobjectFields(sObjectName);
            string fieldsList= wrpperRes.commaSepratedFields;
            String query = 'select ' + fieldsList + ' from ' + sObjectName + ' WHERE EasySoft__c  =:recordId OR Id =:recordId limit 1 ';
            List<Sobject> queryData = Database.query(query);
            if(!queryData.isEmpty()){
                recordDetails = queryData[0];
                return  JSON.serializePretty(recordDetails);
            }else{
                return 'No record found';
            }
        }
        return null;
    }
    public class wrapper {
        public string commaSepratedFields {get;set;}
        public map<string,string> metadata{get;set;}
        public wrapper(string commaSepratedFields1, map<string,string> metadata1){
            commaSepratedFields=commaSepratedFields1;
            metadata=metadata1;
        }
    }
}

Thanks
<apex:page >
   <iframe height="600px" id="theIframe" name="theIframe" src="https://salesforce.com" width="100%"></iframe>
</apex:page>

When I am trying to preview the above Visualforce page. it shows error
www.salesforce.com refused to connect.
 Can anyone help me with this.
Thanks
I have a requirement for outlook integration with salesforce. I have seen many videos on youtube but it did not resolve my issue. can anyone suggest to me the right way?
I need if anyone send email then it should be shown on record activity page
On click on submit button, I want to check that field have some value.
if the field does not have value then do not save the detail
Quiery1= 'select Required_car__c,Email from Lead where Status = Car Not Available';

Quiery2='select Car_Details_c from Available_c';

Now I want
Quiery3= Required_car__c==Car_details__c
can anyone help
I have a custom object.
if Name field of Custom object is same as the name field of Contact object.then email of that contact should be in custom object email field
i want to show records based on picklist selection..
if i select 2 then .. two accounts show
if select 4 then.. four accounts show.

component....---

<aura:component implements="flexipage:availableForAllPageTypes" 
                controller="GetAccountChild"
                access="global" >
    
    <aura:attribute name="accList"
                    type="List"/>
    <aura:attribute name="Accounts" type="Account[]"/>
     <aura:attribute name="mycolumns" type="List"/>

    
    <aura:handler name="init"
                  value="{!this}"
                  action="{!c.doInit}"/>
    <lightning:select name="cStat" label="select a value" value="New" aura:id="statusPicklist" >
        <option value="2">2</option>
        <option value="4">4</option>
        <option value="10">10</option>
    </lightning:select>

    <br/><br/>
    <lightning:datatable data="{! v.acctList }"
                         columns="{! v.mycolumns }"
                         keyField="id"
                         hideCheckboxColumn="true"/>

    <aura:attribute name="searchResult" type="List" description="use for store and display account list return from server"/>
    <aura:attribute name="searchKeyword" type="String" description="use for store user search input"/>
    <aura:attribute name="activeSections" type="List"/>
    <div class="slds-border_bottom">
        <h1>Accounts</h1></div>  
    <div class="slds-scrollable_y">
        <div class="slds-text-longform">
            <lightning:input value="{!v.searchKeyword}"
                             placeholder="search Accounts.."
                             aura:id="searchField"
                             label="Account Name"/>
            
            <lightning:button onclick="{!c.Search}"
                              variant="brand"
                              label="Search"
                              iconName="utility:search"/>
            
            
            <lightning:accordion allowMultipleSectionsOpen="true" activeSectionName="{! v.activeSections }" onsectiontoggle="{! c.handleSectionToggle }">
                <div class="demo-only demo-only--sizing slds-grid slds-wrap">
                    <div class="slds-size_1-of-2">
                        <div class="slds-box slds-box_x-small slds-text-align_left slds-m-around_x-small">
                            
                            <aura:iteration items="{!v.accList}" 
                                            var="acc">
                                
                                <lightning:accordionSection name="{!acc.Name}" 
                                                            label="{!acc.Name}">
                                    
                                    
                                    <div class="slds-scrollable" style="height:10rem;width:24rem">
                                        <div class="slds-text-longform" style="width:150%">
                                            
                                            <lightning:tabset selectedTabId="one">
                                                
                                                <lightning:tab label="Contacts" id="one">
                                                    <aura:iteration items="{!acc.Contacts}" var="con" indexVar="index">
                                                        <li>Contact {!index + 1} Name : {!con.Name}</li>
                                                        <li>Contact Phone :</li>
                                                        <p><lightning:formattedPhone value="{!con.Phone}"></lightning:formattedPhone></p>
                                                        <br></br>
                                                    </aura:iteration>
                                                </lightning:tab>
                                                
                                                <lightning:tab label="Opportunities" id="two">
                                                    <aura:iteration items="{!acc.Opportunities}" var="opp" indexVar="index">
                                                        <li>Opportunities {!index + 1} Name : {!opp.Name}</li>
                                                        <li>ID : {!opp.Id}</li>
                                                        <br></br>
                                                    </aura:iteration>
                                                </lightning:tab>
                                            </lightning:tabset>
                                        </div>
                                    </div>
                                </lightning:accordionSection>
                            </aura:iteration>
                        </div>
                    </div>
                </div>
            </lightning:accordion>
        </div>
    </div>
    
</aura:component>

controller----

({
    doInit : function(component, event, helper) {
        
        helper.accordHelper(component,event,helper)
        
   
    },
    handleSectionToggle: function (component, event, helper) {
        var openSections = event.getParam("openSections");
        
        if (openSections.length === 0) {
            alert("All sections are closed");
        } else {
            alert(openSections);
        }
    },
     Search: function(component, event, helper) {
            helper.accordHelper(component, event);
     },
     onChange: function (cmp, event, helper) {
        var selectedPicklistValue= component.find("statusPicklist").get("v.value");
        alert("selectedPicklistValue ==>" +selectedPicklistValue)

    }

})



helper..---

({
    accordHelper :function(component, event, helper) {
         component.set('v.mycolumns');
        var action=component.get("c.showAccountsForAccordion");
             action.setParams({ searchKey : component.get("v.searchKeyword") });
        action.setCallback(this,function(response){
            var state = response.getState();
            if(state === "SUCCESS"){
                var allValues = response.getReturnValue();
                console.log("allValues--->>> " + JSON.stringify(allValues));
                component.set('v.activeSections', allValues.Name);
                component.set('v.accList', allValues);
            }
            else if(state === "ERROR") {
                var errors = response.getError();
                if(errors){
                    if(errors[0] && errors[0].message){
                        console.log("Error Message: " + errors[0].message);
                    }
                }
                else{
                    console.log("Unknown Error");
                }
            }
        });
        $A.enqueueAction(action);
    }
    
    
})


can anyone help on this
In the below code filter showing accounts list..and accordian also showing account list.. i want to show filter on accordian list only. 


<aura:component implements="flexipage:availableForAllPageTypes" 
                controller="GetAccountChild"
                access="global" >
    
    <aura:attribute name="accList"
                    type="List"/>
    <aura:attribute name="Accounts" type="Account[]"/>
    
    
    <aura:handler name="init"
                  value="{!this}"
                  action="{!c.doInit}"/>
    <lightning:card title="Filtered Accounts">
        <div class="search-field">
            <lightning:input aura:id="nameFilter" label="Filter names" onchange="{!c.handleNameFilterChange}" />
        </div>
        <div class="results">
            <aura:if isTrue="{!v.Accounts.length > 0}">
                <p class="has-results">
                    Showing {!v.Accounts.length} accounts(s):
                </p>
                <ol class="slds-list_dotted">
                    <aura:iteration items="{!v.Accounts}" var="Account">
                        <li>
                            <a class="Account-name" onclick="{!c.handleClickAccountName}" data-sfid="{!Account.Id}">
                                {!Account.Name}
                            </a>
                        </li>
                    </aura:iteration>
                </ol>
                <aura:set attribute="else">
                    <p class="no-results">Nothing to show.</p>
                </aura:set>
            </aura:if>
        </div>
    </lightning:card>
    <aura:attribute name="activeSections" type="List"/>
    <div class="slds-border_bottom">
        <h1>Accounts</h1></div>  
    <div class="slds-scrollable_y">
        <div class="slds-text-longform">
            
            <lightning:accordion activeSectionName="{! v.activeSections }" onsectiontoggle="{! c.handleSectionToggle }">
                <div class="demo-only demo-only--sizing slds-grid slds-wrap">
                    <div class="slds-size_1-of-2">
                        <div class="slds-box slds-box_x-small slds-text-align_left slds-m-around_x-small">
                            
                            <aura:iteration items="{!v.accList}" 
                                            var="acc">
                                
                                <lightning:accordionSection name="{!acc.Name}" 
                                                            label="{!acc.Name}">
                                    
                                    
                                    <div class="slds-scrollable" style="height:10rem;width:24rem">
                                        <div class="slds-text-longform" style="width:150%">
                                            
                                            <lightning:tabset selectedTabId="one">
                                                
                                                <lightning:tab label="Contacts" id="one">
                                                    <aura:iteration items="{!acc.Contacts}" var="con" indexVar="index">
                                                        <li>Contact {!index + 1} Name : {!con.Name}</li>
                                                        <li>Contact Phone :</li>
                                                        <p><lightning:formattedPhone value="{!con.Phone}"></lightning:formattedPhone></p>
                                                        <br></br>
                                                    </aura:iteration>
                                                </lightning:tab>
                                                
                                                <lightning:tab label="Opportunities" id="two">
                                                    <aura:iteration items="{!acc.Opportunities}" var="opp" indexVar="index">
                                                        <li>Opportunities {!index + 1} Name : {!opp.Name}</li>
                                                        <li>ID : {!opp.Id}</li>
                                                        <br></br>
                                                    </aura:iteration>
                                                </lightning:tab>
                                            </lightning:tabset>
                                        </div>
                                    </div>
                                </lightning:accordionSection>
                            </aura:iteration>
                        </div>
                    </div>
                </div>
            </lightning:accordion>
        </div>
    </div>
    
</aura:component>


this code is working properly.. i just want to put filter 
I want to create Tab between accordian.
i want to do... when i click on that tab it shows contacts details

basically i am fatching account name and contacts and oppoertunity associted with the account.
>Account name
   Tab1   Tab2
  > contacts details if Tab1 selected
  > oppoertunity deatils if Tab2 selected


 <lightning:accordion>
        <aura:iteration items="{!v.accList}" 
                        var="acc">
            
            <lightning:accordionSection name="{!acc.Name}" 
                                        label="{!acc.Name}">    
                <lightning:accordion>
                    <aura:iteration items="{!acc.Contacts}" 
                                    var="con">
                        <lightning:accordionSection name="{!con.Name}" 
                                                    label="{!con.Name}">
                            
                            <aura:set attribute="body">
                                
                                <p>FirstName : {!con.FirstName}</p>
                                <p>LastName : {!con.LastName}</p>
                                <p>Phone: {!con.Phone}</p>
                            </aura:set>
                        </lightning:accordionSection>
                    </aura:iteration>
                </lightning:accordion> 
                
                <lightning:accordion>
                    <aura:iteration items="{!acc.Opportunities}" 
                                    var="opp">
                        <lightning:accordionSection name="{!opp.Name}" 
                                                    label="{!opp.Name}">
                            
                            <aura:set attribute="body">
                                
                                <p>Id : {!opp.Id}</p>
                                
                            </aura:set>
                        </lightning:accordionSection>
                    </aura:iteration>
                </lightning:accordion>
                
            </lightning:accordionSection>
        </aura:iteration>
    </lightning:accordion>
    

this is working but only need to show details when tab selected
 
public class Processor 
{
  @future
  public static void count(Set<id> setId) 
  {
      List<parent__c> lst = [select id,noOfrecords__c , (select id from childs__r) from parent__c where id in :setId ];
      for( parent__c acc : lst )
      {
          List<child__c> lstCount = acc.childs__r ;
          
          acc.noOfrecords__c = lstCount.size();
      }
      update lst;
  }
}
Hello!
   I have a CloudPage which consist fields of salescloud objects Contact, Account and vehicle. I am using a RetrieveSalesforceObjects() call to pre-populate the data on the page, but now I want to update the data using the UpdateSingleSalesforceObject() call when the user presses the Submit button. What I am trying to figure out is can i update muliple salesforce object fields in a single html form.?
Vf page:
--------------------------


<apex:page controller="Account_Tasks">
    <apex:form>
    <apex:pageBlock id="pb">
        <apex:pageBlockButtons location="top">
        <apex:commandButton value="Save" action="{!save}" rerender="pb"/>
        </apex:pageBlockButtons>
        <apex:pageBlockSection title="Account Details">
        <apex:inputField value="{!acc.Name}"/>
            <apex:inputField value="{!acc.Industry}"/>
            <apex:inputField value="{!acc.Phone}"/>
            <apex:inputField value="{!acc.ownership}"/>
            <apex:inputField value="{!acc.rating}"/>
        </apex:pageBlockSection>
        <apex:pageBlockSection title="Task Details" columns="1" id="pbs">
            <apex:pageBlockTable value="{!tsks}" var="t">
                <apex:column headerValue="Priority">
        <apex:inputField value="{!t.Priority}"/>
                    </apex:column>
                <apex:column headerValue="Status">
            <apex:inputField value="{!t.status}"/>
                    </apex:column>
                <apex:column headerValue="Status">
            <apex:inputField value="{!t.Tasksubtype}"/>
                    </apex:column>
                    <apex:column headerValue="Status">
            <apex:inputField value="{!t.calltype}"/>
                        </apex:column>
                        <apex:column headerValue="Status">
            <apex:inputField value="{!t.createdDate}"/>
                            </apex:column>
                <apex:column >
                <apex:commandButton value="ADD" action="{!AddTask}" rerender="pbs"/>
                </apex:column>
                </apex:pageBlockTable>
        </apex:pageBlockSection>
        <apex:pageBlockSection columns="1" id="pbs1">
            <apex:pageBlockTable value="{!attch}" var="att">
                <apex:column headerValue="File Name">
            <apex:inputField value="{!att.name}"/>
                    </apex:column>
                                <apex:column headerValue="Body">
            <apex:inputtext value="{!str}"/>
                    </apex:column>
                <apex:column>
                <apex:commandButton value="Add Attachment" action="{!AddAttachmnt}" rerender="pbs1"/>
                </apex:column>
         </apex:pageBlockTable>
        </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:form>
</apex:page>



Apex code:
----------------------------

public class Account_Tasks {
    public account acc{set;get;}
    public task tsk{set;get;}
    public string str{set;get;}
    public list<attachment> attch{set;get;}
    public list<task>tsks{set;get;}
    public Account_Tasks(){
        attch=new List<attachment>();
        tsks=new list<task>();
        acc=new account();
        tsk=new Task();
        AddTask();
        AddAttachmnt();
    }
    public void AddTask(){
        tsk=new task();
        tsks.add(tsk);
    }
    public void AddAttachmnt(){
        str=null;
        attachment a=new attachment();
        attch.add(a);
    }
    
    public PageReference save(){
        insert acc;
       list<task> tasks=new list<task>();
        for(task t:tsks){
            t.whatid=acc.id;
            tasks.add(t);
        }
        insert tasks;
        list<attachment> attaches=new list<attachment>();
        for(attachment at:attch){
        at.ParentId=acc.Id;
        at.Name=acc.Name+'.pdf';
        at.Body=blob.toPdf(str);
            attaches.add(at);
     }
        insert attaches;
        Pagereference p=new Pagereference('/'+acc.id);
        return p;
        }
    
}