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
A.ZaykovA.Zaykov 

lightning component quick action

Hi,

I am trying to substitute a quick action (submitting a case for account to be removed) with a lightning component.

I need to prepopulate the Case.ContactId with the id of the internal contact attached to the user.

Here's the component:
 
<aura:component implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId" access="global" controller="caseCreate">
 <!--including lightning styles-->
    <ltng:require styles="{/assets/styles/salesforce-lightning-design-system.css'}"/>
     <ltng:require styles="{/assets/styles/salesforce-lightning-design-system.min.css'}"/>
    <aura:attribute name="contact" type="Contact" 
               default="{ 'sobjectType': 'Contact' }"/>
<aura:handler name="init" value="{!this}" action="{!c.loadContact}" /> 
<!-- Preparation of case object with fields-->
    <aura:attribute name="caseObj" type="Case"  default="{'sobjectType':'Case',
                                                         'Type':'Remove/Merge Account',
                                                            'Subtype':'',
                                                          'Subject':'',
                                                         'Priority':'Medium',
                                                         'Status':'New/Not Started',
                                                       'Description':''}"/> 
   <div class="slds">
       <div class="slds-form-element">
          <label class="slds-form-element__label" for="Type">Type</label>
          <div class="slds-form-element__control">
              <ui:inputText aura:id="type" class="slds-input" value="{!v.caseObj.Type}" placeholder="Remove/Merge Account" />
          </div>
        </div>
       <div class="slds-form-element">
          <label class="slds-form-element__label" for="Subtype">Subtype</label>
          <div class="slds-form-element__control">
            <ui:inputText aura:id="subtype" class="slds-input" value="{!v.casedObj.Subtype__c}" placeholder="--None--" />
          </div>
        </div>
       <div class="slds-form-element">
          <label class="slds-form-element__label" for="Subject">Subject</label>
          <div class="slds-form-element__control">
            <ui:inputText aura:id="subject" class="slds-input" value="{!v.casedObj.Subject}" placeholder="--None--" />
          </div>
        </div>
       <div class="slds-form-element">
          <label class="slds-form-element__label" for="Email">Priority</label>
          <div class="slds-form-element__control">
            <ui:inputText aura:id="priority" class="slds-input" value="{!v.caseObj.Priority}" placeholder="Medium" />
          </div>
        </div>
       <div class="slds-form-element">
          <label class="slds-form-element__label" for="Status">Status</label>
          <div class="slds-form-element__control">
              <ui:inputText aura:id="status" class="slds-input" value="{!v.caseObj.Status}" placeholder="New/Not Started" />
          </div>
        </div>
       <div class="slds-form-element">
          <label class="slds-form-element__label" for="Description">Description</label>
          <div class="slds-form-element__control">
              <ui:inputText aura:id="description" class="slds-input" value="{!v.caseObj.Description}" placeholder="" />
          </div>
        </div>
       <div class="slds-form-element">
          <label class="slds-form-element__label" for="ContactName">Contact Name</label>
          <div class="slds-form-element__control">
             <ui:inputText aura:id="description" class="slds-input" value="{!v.caseObj.ContactId}" placeholder="{!v.contact.Id}" />
          </div>
        </div>
       <div class="slds-form-element">        
          <div class="slds-form-element__control">
            <ui:button label="Save" press="{!c.save}"/>
          </div>
        </div>
 </div>
</aura:component>
The ContactId is internal contact attached to the user.

JS Controller:
 
({  
    
    loadContact : function(component, event, helper) {
    	var action = component.get("c.getContact");
    	action.setCallback(this, function(response) {
    		var state = response.getState();
    			if(state === "SUCCESS") {
    				component.set("v.contact", response.getReturnValue());
    				console.log(response.getReturnValue());
				}
           
		});
		$A.enqueueAction(action);
	},
    
     save : function(component, event, helper) {    
     var action = component.get("c.createCaseRecord");
            action.setParams({"caseObj":component.get("v.caseObj")});
            action.setCallback(this,function(result){
            component.set("v.isShow",true);
            var caseId = result.getReturnValue();
            var toastEvent = $A.get("e.force:showToast");
						toastEvent.setParams({
    					title: "Success!",
   						message: "You have successfully submitted the case",
   						type: "Success"
						});	
			toastEvent.fire();
        });
         $A.enqueueAction(action);
 	}
})
Apex class:
public class caseCreate {
@auraenabled
    public static Id createCaseRecord(Case caseObj){
        upsert caseObj;
        return caseObj.id;
    }
    
    @AuraEnabled
    public static Contact getContact(){
        return [SELECT id, Name FROM Contact WHERE Email=: UserInfo.getUserEmail() LIMIT 1];
    }
}
Any help/advice would be much appreciated.

Thanks!


 
Best Answer chosen by A.Zaykov
Raj VakatiRaj Vakati
Change your code as below 

apex class
public class caseCreate {
@auraenabled
    public static Id createCaseRecord(Case caseObj ,String ConId){
caseObj.ContactId =ConId ;
        upsert caseObj;
        return caseObj.id;
    }
    
    @AuraEnabled
    public static String getContact(){
        return [SELECT id, Name FROM Contact WHERE Email=: UserInfo.getUserEmail() LIMIT 1].Id;
    }
}

Component 
 
<aura:component implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId" access="global" controller="caseCreate">
 <!--including lightning styles-->
    <ltng:require styles="{/assets/styles/salesforce-lightning-design-system.css'}"/>
     <ltng:require styles="{/assets/styles/salesforce-lightning-design-system.min.css'}"/>
    <aura:attribute name="contact" type="Contact" 
	
	    <aura:attribute name="contactId" type="String" 

               default="{ 'sobjectType': 'Contact' }"/>
<aura:handler name="init" value="{!this}" action="{!c.loadContact}" /> 
  <aura:attribute name="caseObj" type="Case"  default="{'sobjectType':'Case',
                                                         'Type':'Remove/Merge Account',
                                                            'Subtype':'',
                                                          'Subject':'',
                                                         'Priority':'Medium',
                                                         'Status':'New/Not Started',
                                                       'Description':''}"/> 
													   
													   
													    <div class="slds">
       <div class="slds-form-element">
          <label class="slds-form-element__label" for="Type">Type</label>
          <div class="slds-form-element__control">
              <ui:inputText aura:id="type" class="slds-input" value="{!v.caseObj.Type}" placeholder="Remove/Merge Account" />
          </div>
        </div>
       <div class="slds-form-element">
          <label class="slds-form-element__label" for="Subtype">Subtype</label>
          <div class="slds-form-element__control">
            <ui:inputText aura:id="subtype" class="slds-input" value="{!v.casedObj.Subtype__c}" placeholder="--None--" />
          </div>
        </div>
       <div class="slds-form-element">
          <label class="slds-form-element__label" for="Subject">Subject</label>
          <div class="slds-form-element__control">
            <ui:inputText aura:id="subject" class="slds-input" value="{!v.casedObj.Subject}" placeholder="--None--" />
          </div>
        </div>
       <div class="slds-form-element">
          <label class="slds-form-element__label" for="Email">Priority</label>
          <div class="slds-form-element__control">
            <ui:inputText aura:id="priority" class="slds-input" value="{!v.caseObj.Priority}" placeholder="Medium" />
          </div>
        </div>
       <div class="slds-form-element">
          <label class="slds-form-element__label" for="Status">Status</label>
          <div class="slds-form-element__control">
              <ui:inputText aura:id="status" class="slds-input" value="{!v.caseObj.Status}" placeholder="New/Not Started" />
          </div>
        </div>
       <div class="slds-form-element">
          <label class="slds-form-element__label" for="Description">Description</label>
          <div class="slds-form-element__control">
              <ui:inputText aura:id="description" class="slds-input" value="{!v.caseObj.Description}" placeholder="" />
          </div>
        </div>
       <div class="slds-form-element">
          <label class="slds-form-element__label" for="ContactName">Contact Name</label>
          <div class="slds-form-element__control">
             <ui:inputText aura:id="description" class="slds-input" value="{!v.caseObj.ContactId}" placeholder="{!v.contact.Id}" />
          </div>
        </div>
       <div class="slds-form-element">        
          <div class="slds-form-element__control">
            <ui:button label="Save" press="{!c.save}"/>
          </div>
        </div>
 </div>
 
 
</aura:component>

({  
    
    loadContact : function(component, event, helper) {
    	var action = component.get("c.getContact");
    	action.setCallback(this, function(response) {
    		var state = response.getState();
    			if(state === "SUCCESS") {
    				component.set("v.contactId", response.getReturnValue());
    				console.log(response.getReturnValue());
				}
           
		});
		$A.enqueueAction(action);
	},
    
     save : function(component, event, helper) {    
     var action = component.get("c.createCaseRecord");
            action.setParams({"caseObj":component.get("v.caseObj") ,"ConId":component.get("v.contactId)});
            action.setCallback(this,function(result){
            component.set("v.isShow",true);
            var caseId = result.getReturnValue();
            var toastEvent = $A.get("e.force:showToast");
						toastEvent.setParams({
    					title: "Success!",
   						message: "You have successfully submitted the case",
   						type: "Success"
						});	
			toastEvent.fire();
        });
         $A.enqueueAction(action);
 	}
})