Activity Forums Salesforce® Discussions How to use Lightning Component to update records on server

  • How to use Lightning Component to update records on server

    Posted by Kay on January 22, 2020 at 10:03 pm

    How can I get values selected on a drop down by a user to save to the records? I believe my issue is in my JS controller "changeDcn"..

    Component:

    <!--massUpdateItemDecision-->
    <aura:component access="global" controller="MassUpdateController" 
                    implements="flexipage:availableForAllPageTypes,force:lightningQuickActionWithoutHeader,force:hasRecordId,force:hasSObjectName">
        <aura:handler name="init" value="{!this}" action="{!c.doInit}"/>
        <aura:attribute name="recordId" type="Id"/>
        <aura:attribute name="relatedItems" type="MassUpdateController.wrapItemRecord[]"/>
        <aura:attribute name="selectedItems" type="MassUpdateController.wrapItemRecord[]"/>
        <aura:attribute name="itemDecisionList" type="String[]"/>
        <aura:attribute name="selectAll" type="boolean" default="false"/>
        <aura:attribute name="selectedDecision" type="String"/>
        <aura:attribute name="RIM__c" type="Object"/>
        <aura:attribute name="RIM_Item__c" type="Object"/>
            <force:recordData aura:id="rRecord"
                      recordId="{!v.recordId}"
                      targetFields="{!v.RIM__c}"
                      layoutType="FULL"
                              mode="EDIT"/>
    
    <lightning:card iconName="custom:custom41" title="{! 'Item List for ' + v.RIM__c.Customer_Name__c}">     
    
    <div class="slds-form slds-p-horizontal_medium" role="list">
    <div class="slds-form__row"><div class="slds-form__item" role="listitem">
    <div class="slds-form-element slds-form-element_horizontal slds-is-editing">    
          <lightning:select name="selectItem" label="Apply Decision to Selected:" value="{!v.selectedDecision}" onchange="{!c.setDcn}">
                   <option text="None" value="{!v.value}"></option>
                   <aura:iteration items="{!v.itemDecisionList}" var="stat">
                         <option text="{!stat}" value="{!stat}"></option>                    
                   </aura:iteration>                    
           </lightning:select>
    </div></div></div></div>  <!-- BEGIN TABLE JUNK -->
    
        <table class="slds-table">
            <thead>
                <tr class="slds-text-title_caps slds-line-height_reset">
                    <th class="" style="width:10px">
                        <ui:inputCheckbox aura:id="box3" value="{!v.selectAll}" change="{!c.onCheck}"/></th>
                    <th class="slds-p-around_xxx-small" scope="col"><div class="" title="Type">Type</div></th> 
                    <th class="slds-p-around_xxx-small" scope="col"><div class="" title="Transaction Amount">Amount</div></th>               
                    <th class="slds-p-around_xxx-small" scope="col"><div class="" title="Decision">Decision</div></th>
                </tr>
            </thead>
            <tbody>
    
    <aura:iteration items="{!v.relatedItems}" var="itm">
    <tr>
        <td><div class="" style="width:10px">
            <ui:inputCheckbox aura:id="boxPack" value="{!itm.itemSelected}"/></div>
        </td>
    
        <td data-label="Type">
        <div class="slds-form-element__control" title="Type">
            <p class="slds-text-body_regular">{!itm.wrapItem.Transaction_Type__c}</p>
        </div></td>
    
        <td data-label="Transaction Amount">
        <div class="slds-form-element__control" title="Transaction Amount">
               <p><lightning:formattedNumber value="{!itm.wrapItem.Transaction_Amount_Detail__c}" style="currency" currencyCode="USD"/></p>
        </div></td>             
    
        <td data-label="Decision">
            <ui:inputSelect  class="slds-select spear-select" aura:id="selectItem" value="{!itm.wrapItem.Decision__c}" updateOn="change" >    
                <aura:iteration items="{!v.itemDecisionList}" var="stat">
                    <ui:inputSelectOption text="{!stat}" label="{!stat}" value="{!stat==itm.wrapItem.Decision__c}" />            
                </aura:iteration>    
            </ui:inputSelect>
    <!-- aura:if isTrue="{!itm.wrapItem.Status__c == ''}"><img src="https://spectatorblogs.imgix.net/files/2016/03/ex.jpg"/>
        </aura:if-->&nbsp;
        </td>               
    </tr></aura:iteration></tbody><br/> </table>    <!--BEGIN BUTTONS-->
    
                <div align="center">
                    <lightning:button variant="neutral" label="Nvm" onclick="{!c.cancel}" />
                    <lightning:button variant="brand" label="GObop!" onclick="{!c.changeDcn}" /> 
                </div>
    
        </lightning:card>
    </aura:component>

    Controller.js

    ({
        doInit : function(component, event, helper) {
            var action = component.get("c.getAllRelatedItems");  
            action.setParams({
                "visitRecordId" : component.get("v.recordId")});
            action.setCallback(this, function(a) {            
                component.set("v.relatedItems", a.getReturnValue());});
            $A.enqueueAction(action); 
            helper.getPrepopulatedValues(component, event, helper);},
    
        onCheck : function(component, event, helper) {
            var selAll = component.get("v.selectAll");
            var newlst =[];    
            var allItems = component.get("v.relatedItems");
            for(var i in allItems){
                var space = allItems[i];                    
                space.itemSelected = selAll;             
                newlst.push(space);}
            component.set("v.selectedItems",newlst);
            component.set("v.relatedItems",newlst);},
    
        setDcn : function(component, event, helper) {
            var selcDcn = component.get("v.selectedDecision");
            var newlst =[];    
            var allItems = component.get("v.relatedItems");
            for(var i in allItems){
                var space = allItems[i];                    
                if(space.itemSelected === true){
                    space.wrapItem.Decision__c = selcDcn;}
                newlst.push(space);}
            component.set("v.relatedItems",newlst);}, 
    //please help! ======================================================
        changeDcn : function(component, event, helper) {
            var allItems = component.get("v.relatedItems");
            for(var i in allItems){
                var space = allItems[i];    
                //alert("Decision: " + space.wrapItem.Decision__c);
            }
    
            var action = component.get("c.saveDcn");
            action.setParams({"dcns": allItems});
            action.setCallback(this, function(response){
                var state = response.getState();
                if (state === "SUCCESS") {
                    var listy = component.get("v.itemDecisionList");
                    listy.push(response.getReturnValue());
                    component.set("v.itemDecisionList", listy);
                }
            });
            $A.enqueueAction(action);
        }, 
    //===================================================================    
        cancel : function (component, event, helper) {
            var action = component.get("c.getAllRelatedItems");  
            action.setParams({
                "visitRecordId" : component.get("v.recordId")});
            action.setCallback(this, function(a) {            
                component.set("v.relatedItems", a.getReturnValue());});
            $A.enqueueAction(action); 
            helper.getPrepopulatedValues(component, event, helper);
        },
    })

    Helper.js

    ({
        getPrepopulatedValues : function(component, event, helper) {
            var action = component.get("c.getDcnValues");
            action.setCallback(this, function(a) {            
                component.set("v.itemDecisionList", a.getReturnValue());
            });
            $A.enqueueAction(action);
        },
    })

    Controller.apxc

    public class MassUpdateController {
        @auraEnabled
        public static List<wrapItemRecord> getAllRelatedItems(Id visitRecordId){
            List<wrapItemRecord> wrapItemRecordList = new List<wrapItemRecord>();
            for(RIM_Item__c itm : [select Id, Name, RIM__r.Name, Decision__c, Transaction_Amount_Detail__c, 
                                   Transaction_Type__c, RIM__r.Customer_Name__c 
                                   from RIM_Item__c where RIM__c = :visitRecordId]){
                wrapItemRecordList.add(new wrapItemRecord(itm));
            }
            return wrapItemRecordList;
        }
        @auraEnabled
        public static List<String> getDcnValues(){
            List<String> options = new List<String>();
            Schema.DescribeFieldResult fieldResult = RIM_Item__c.Decision__c.getDescribe();
            List<Schema.PicklistEntry> ple = fieldResult.getPicklistValues();
            for (Schema.PicklistEntry f: ple) {
                options.add(f.getLabel());
            }
            return options;
        }
        //==================================================================
        @auraEnabled
        public static RIM_Item__c saveDcn(RIM_Item__c dcns){
            UPDATE dcns;
            RETURN dcns;
        }
        //==================================================================
    
        public class wrapItemRecord{
            @auraEnabled
            public boolean itemSelected{get; set;}
    
            @auraEnabled
            public RIM_Item__c wrapItem{get; set;}
    
            @auraEnabled
            public boolean isDecided{get; set;}
    
            public wrapItemRecord(RIM_Item__c itm){
                itemSelected = false;
                wrapItem = itm;
                if(itm.Decision__c == null){
                    isDecided = false;
                }else{
                    isDecided = true;
                }
            }
        }
    }

     

    Saddam replied 4 years, 11 months ago 2 Members · 1 Reply
  • 1 Reply
  • Saddam

    Member
    January 23, 2020 at 10:21 am

    you can use aura:id in component and can get value using component.find('nameOfAuraId').get('v.value')

Log In to reply.

Popular Salesforce Blogs

Popular Salesforce Videos