• Naveen KN
  • SMARTIE
  • 871 Points
  • Member since 2017
  • Salesforce Consultant
  • IBM


  • Chatter
    Feed
  • 27
    Best Answers
  • 0
    Likes Received
  • 7
    Likes Given
  • 1
    Questions
  • 385
    Replies
I have this trigger in which, when a new quote record is inserted, I am updating couple records, which works fine in the after insert serction.

But when an approval process updates a record, I want some records to be updated in the after update section, which is causing the recurssive error: 

QuoteTrigger: execution of AfterUpdate caused by: System.DmlException: Update failed. First exception on row 0 with id 0Q05D0000007jBySAI; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, QuoteTrigger: maximum trigger depth exceeded Quote trigger event AfterUpdate Quote trigger event 

How can I get around this error and implement my logic? Trigger code is below. Error occours on update qtList; line. I am trying to implement in the // If the quote is approved unmark - section.

 
trigger QuoteTrigger on Quote (after insert,after update) {
    
    Set<String> oppIds = new Set<String>();
    for(Quote q : Trigger.New){
        oppIds.add(q.opportunityId);  
    }
    
    public static Boolean preventRecursive = true;
    if(preventRecursive){
        preventRecursive = false;
        
        // To mark the newly inserted quote as latest and unmark the previous quote if there is any
        if(Trigger.isInsert && Trigger.isAfter){
            List<Quote> quoteList = [select id,opportunityId,Latest_quote__c from quote where opportunityId IN :oppIds ORDER BY CreatedDate DESC LIMIT 2];
            if(quoteList.size() == 1){
                quoteList[0].Latest_quote__c = true;
                update quoteList;
            } else if (quoteList.size() > 1) {
            quoteList[0].Latest_quote__c = true;
                quoteList[1].Latest_quote__c = false;
                update quoteList;
            }
        }
        
        if(Trigger.isAfter && Trigger.isUpdate){
            if(trigger.new != null){
                for(quote qt:trigger.new){
                    if(Trigger.new[0].Status== 'Approved' && qt.Quote_Link__c == Null && qt.Proposal_PDF__c == Null && qt.Site_Services_PDF__c == Null){                
                       // Quote_Lcs.sendemailtemplate(qt.id);
                    } 
                } 
                
                // If the quote is approved unmark all as latest and mark last updated (approved) quote as latest
                if(Trigger.new[0].Status== 'Approved'){ 
                    System.debug('Approved');
                    List<Quote> qtList = [select id,opportunityId,Latest_quote__c from quote where opportunityId IN :oppIds  ORDER BY LastModifiedDate DESC];
                    if (qtList.size() > 1) {
                        for(Integer i = 0; i < qtList.size(); i++){ // uncheck all from being latest
                            qtList[i].Latest_quote__c = false;
                        }
                    }
                    qtList[0].Latest_quote__c = true; // mark only the last updated/approved quote as latest
                    update qtList;
                }
            }
        }
    }
}

 
We had a vendor create a Aura component to insert an iFrame into one of our community pages to allow an end user to upload attachments.  This is not working because we need to be using ".secure.fore.com" in the URL.  It is getting the URL like this:  "cmp.get('c.getFileUploadSiteURL');  But in the cmp file I do not see "getFileUploadSiteUrl", so I am trying to understand where this field is coming from???
Hi Everyone,

I have JSON data. I wish to store this JSON data in my custom object field.
Is this possible in salesforce? Any idea?
Thanks in Advance.
how to send list<strings> from parent component  to child component  using aura attribute in lightning
 (note : I dont want aura methods or events ) 
I have an issue with lightning bottom menu item's that is within a data table whereby the menu items are not visible if the menu item appears as the last record of the data table (see the 2nd image) or if the data table consists of only 1 record (see the last image). Below is the sample code of the data table with the lightning button menu

Sample Code
<div class="slds-table--header-fixed_container" style="height: 100%">
        <div class="slds-card__body slds-card__body_inner slds-scrollable--y" style="height: 100%">
    
            <table class="slds-table slds-table--bordered slds-table--header-fixed">
                <thead>
                <tr class="slds-text-title--caps">
                    <aura:iteration items="{!v.columns}" var="col">
                        <th scope="col">
                            <div onclick="{!c.updateColumnSorting}"
                                 class="slds-truncate slds-cell-fixed"
                                 title="{! col.fieldName}" data-field="{! col.fieldName}">
                                {! col.label }
                                <span>
                                    <aura:if isTrue="{!v.sortedBy == col.fieldName}">
                                            {! v.sortAsc ? '&#8593;' : '&#8595;'}
                                    </aura:if>
                                </span>
                            </div>
                        </th>
                    </aura:iteration>
                    <th scope="col"></th>
                </tr>
                </thead>
                <tbody>
                <aura:iteration items="{!v.data}"
                                var="record" indexVar="indexVar">
                    <tr>
                        <th data-label="Title" class="{! 'popover_'+record.Id +' cell-solution-title-width'}">
                            <div class="slds-truncate cell-solution-title-width" title="{!record.Solution_Title__c}"
                                 data-recordid="{!record.Id}" data-record="{! record}">
                                {!record.Solution_Title__c}
                            </div>
                        </th>
                        <th data-label="Category" class="{! 'popover_'+record.Id +' cell-solution-number-width'}">
                            <div class="slds-truncate cell-solution-number-width" title="{! record.Solution_Sub_Category__c}"
                                 data-recordid="{!record.Id}" data-record="{! record.Solution_Sub_Category__c}">
                                {! record.Solution_Sub_Category__c}
                            </div>
                        </th>
                        <th data-label="Status" class="{! 'popover_'+record.Id}">
                            <div class="slds-truncate" title="{!record.Status__c}"
                                 data-recordid="{!record.Id}" data-record="{! record}">
                                {!record.Status__c}
                            </div>
                        </th>
                        <th data-label="Author" class="{! 'popover_'+record.Id}">
                            <div class="slds-truncate" title="{!record.CreatedBy.Name}"
                                 data-recordid="{!record.Id}" data-record="{! record}">
                                {!record.CreatedBy.Name}
                            </div>
                        </th>
                        <th>
                            <lightning:buttonMenu aura:id="menu" onselect="{! c.handleSelect }"
                                                  alternativeText="Menu" value="{!record.Id}" menuAlignment="right">
                                <lightning:menuItem value="{! 'E,'+record.Id +','+indexVar}" label="Edit"/>
                                <lightning:menuItem value="{! 'A,'+record.Id +','+indexVar}" label="Approve"/>
                            </lightning:buttonMenu>
                        </th>
                    </tr>
                </aura:iteration>
                </tbody>
            </table>
    
        </div>
    </div>

User-added image
User-added imageUser-added image
Hi 
Greetings of the day...

I am designing a Lightning component using Developer console and on adding it to Lightning App Builder, I am not finding any custom tab to add my component to the Lightning page.


User-added image


Plz. help us to add a lightning component in the custom section.
Hi, 

I'm a green Salesforce Admin.

I'm trying to close this Booking (Opportunity) by changing the stage fom 'Closed Won' to 'Closed', but gettign the error: 

Object (id = 0060I00000dElwv) is currently in trigger OpportunityTrigger, therefore it cannot recursively update itself

I can see the Apex Trigger in the Object Manager, but I don't have any experience with development, so I can;t tell why this error is occuring. 

 
Hi Team,

In my project i have the urgent requirement.

At the lookup Field we have an option to create New Record in Lightning View.  
Creating the New Record at Look-Up Field is a Standard Salesforce Out of the box functionality.
1)How can i restrict the user while trying to create the Record at Look-Up in lightning View ?

FYI:

User-added imageThanks in Advance...

Thanks,
Venkat.
I am trying to create a view to show activity information. However the below code is not displaying any information, only header is showing. Please help.
HTML Component :

<template>
    <lightning-card class="slds-text-title_bold"  title = "Activity Information">
        <div class="slds-p-around_medium lgc-bg" style="height: 300px;">
            <lightning-datatable
                    key-field="id"
                    data={data}
                    columns={columns}>
            </lightning-datatable>
        </div>
    </lightning-card>
</template>
 
JS File:

import { LightningElement,api,wire,track} from 'lwc';
import ActivitySearchController from '@salesforce/apex/ActivityLeadPage.ActivitySearchController'

const columns = [
    { label: 'Subject', fieldName: 'Subject' },
    { label: 'Due Date', fieldName: 'ActivityDate' },
    { label: 'Status', fieldName: 'Status' },
];

export default class ActivityLeadPageComponent extends LightningElement {
    @api recordId;
    @track data = [];
    @track columns = columns;
    @wire(ActivitySearchController, { currentID: '$recordID'})
    TaskList;
}
 
Controller :

public class ActivityLeadPage{
    
    @AuraEnabled(cacheable=true)
    public static List<Task> ActivitySearchController(String currentID){
        List<Task> TaskList = new List<Task>();
        Map<Id,Lead> leadMap = new Map<Id,Lead>();
        if(currentID.startsWith('00Q')){
            try{
                List <Lead> leadList = [SELECT id, Email FROM Lead WHERE ID=:currentId];
                String ldEmail       = leadList[0].Email;
                Set<String> emailIds = new Set<string>();
                if(ldEmail!=null){
                    emailIds.add(ldEmail);
                }               
                
                TaskList = getTaskList(emailIds);
                
            }           
            catch(Exception e){
                system.debug('getlinenumber-->'+ e.getMessage() +' line '+ e.getLineNumber());
            } 
        }
        return TaskList;
    }
    
    public static List<Task> getTaskList (Set<String> emailIds) {  
        Map<Id,Lead> leadMap = new Map<Id,Lead>();      
        leadMap = new Map<Id,Lead>([SELECT id, Email FROM Lead Where Email IN:emailIds]);       
        
        Set<Id> leadID = new Set<Id>(); 
        for(Lead lE : leadMap.values()){
            leadID.add(lE.id);            
        }  
        
        List<Task> TaskList = [Select id, Subject, Description, who.Type, What.Type, Priority, Status, ActivityDate,CreatedDate, LastModifiedDate FROM Task 
                               WHERE whoId IN:leadID ORDER BY createddate DESC LIMIT 20];
        
        if(TaskList.size() == 0){
            Apexpages.addMessage(new ApexPages.Message(ApexPages.Severity.INFO,''+'No Tasks to Display'));
        }
        
        return TaskList;
    }   
}
What should i do with this error? Does not let me send quotes by email from the PDF page of the quote...
 
Hi All,

I have created a lightning component to display a public site from which we can get customers sigup.
I have created the Lightning component for this and able to view the page but, I am unable to fire the toast messages in this.
And also my Save button is not getting disabled after clicking on it. 
This is my code. Any help to solve this is appreciated. Thanks in advance.
Lightning component:
<aura:component controller="CreateContactrecordController" 
implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:lightningQuickAction,
            flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,lightning:isUrlAddressable,
            lightning:actionOverride,force:hasRecordId"
             access="global" >
    <!-- Include Static Resource-->
    <ltng:require styles="/resource/bootstrap/css/bootstrap.min.css" 
scripts="/resource/bootstrap/js/jquery.js,/resource/bootstrap/js/bootstrap.min.js"/>
    <!--aura:attribute name="isSpinner" type="boolean" default="false"/-->
    <aura:attribute name="FirstName" type="String" default="" />
    <aura:attribute name="LastName" type="String" default="" />
    <aura:attribute name="Mobile" type="String" default="" />
    <aura:attribute name="Email" type="String" default="" /> 
    <aura:attribute name="Store" type="String" />
    <aura:attribute name="LanguageList" type="List" />
    <aura:attribute name="SelectedLanguage" type="String" />
    <aura:attribute name="isHide" type="Boolean" default="false" />
    
     <aura:handler name="onSaveSuccess" event="force:recordSaveSuccess" action="{!c.handleSaveSuccess}"/>
 <force:recordEdit aura:id="edit" recordId=""/>
 <ui:button label="Save" press="{!c.save}"/>
    
    <div class="slds-page-header">
        <div class="slds-align_absolute-center">
            <div class="slds-text-heading_large">
                <div class="slds-m-top_xx-large">
                    Customer Subscription Form
                </div>
            </div>
        </div>
    </div>
    <br/>
    <aura:handler name="init" action="{!c.doinIt}" value="{!this}"/> 
    <div class="slds-form-element__control">
         <lightning:input label="First Name" name="firstname" type="text" required="true" value="{!v.FirstName}" />
        <br/>
        <lightning:input label="Last Name" name="lastname" type="text" required="true" value="{!v.LastName}" />
        <br/>
        <lightning:input label="Mobile" type="tel" value="{!v.Mobile}"/>
        <br/>
        <lightning:input label="Email" name="email" type="email" required="true" value="{!v.Email}" />
        <br/> 
        <lightning:input label="Store" type="Text" name="Store" value="{!v.Store}" />
        <br/> 
        <lightning:select label="Language" name="Language" value="{!v.SelectedLanguage}">
            <aura:iteration items="{!v.LanguageList}" var="Language">
                <option value="{!Language}" text="{!Language}"></option>
            </aura:iteration>
        </lightning:select>
        <br/>
   <lightning:button variant="brand" disabled="{!v.isHide}" label="{!v.isHide == true ? 'Save' : 'Save'}" onclick="{!c.savecustomerForm}" /> 
    <!--lightning:button variant="brand" disabled="{!v.isSpinner}" label="{!v.isSpinner == true ? 'Saving...' : 'Save'}" onclick="{!c.savecustomerForm}" /--> 

    </div>       
</aura:component>

Controller.js:

({
    doinIt: function(component, event, helper){ 
        var action = component.get('c.getPickListValuesIntoList');          
         // method name i.e. getEntity should be same as defined in apex class         
         // params name i.e. entityType should be same as defined in getEntity method        
        //action.setParams({ "entityType" : component.get('v.componentString') });         
            action.setCallback(this, function(a){             
            var state = a.getState(); // get the response state             
            if(state == 'SUCCESS') {
               component.set('v.LanguageList',a.getReturnValue()); 
            }        
            });         
            $A.enqueueAction(action); 
    },
     savecustomerForm: function(component, event, helper) {
        console.log('Create record');
         var action = component.get("c.save");
        //Setting the Apex Parameter
         action.setParams({"FirstName":component.get("v.FirstName"), "LastName":component.get("v.LastName"),
                           "Email":component.get("v.Email"), "Mobile":component.get("v.Mobile"), 
                           "Store":component.get("v.Store"), "Language":component.get("v.Language")
            });
        //Setting the Callback
        action.setCallback(this,function(a){
            //get the response state
            var state = a.getState();
            var isContactexists = a.getReturnValue();
            //check if result is successfull
           
            if(state == "SUCCESS"){
                //Reset Form
                var newContact = {'sobjectType': 'Contact','FirstName': '','LastName': '','Email': '',
                                  'Mobile': '', 'Store__C': '','Language__c' : ''};
                //resetting the Values in the form
                component.set("v.Contact",newContact);
                if(isContactexists===true){
              //alert('Record Created Successfully');
                    component.find("edit").get("e.recordSave").fireeSuccess : function(cmp, event) {
                     // Display the save status
                     var toastEvent = $A.get("e.force:showToast");
                     toastEvent.setParams({
                     "title": "true!",
                     "message": "My Custom Record Saved Successfully"
 });
 toastEvent.fire();
                    }
                    
                component.set('v.isHide', true);  
                }
                else { 
                   alert('Record already exists'); 
                   
                }
            }
            else if(state == "ERROR"){
            alert('Error in calling server side action');
           
            }
            
        });
                
         $A.enqueueAction(action);}

})

Apex controller:

public class CreateContactrecordController {
@AuraEnabled
     public static List<String> getPickListValuesIntoList()
     {
       List<String> pickListValuesList= new List<String>();
        Schema.DescribeFieldResult fieldResult = Contact.Language__C.getDescribe();
        List<Schema.PicklistEntry> ple = fieldResult.getPicklistValues();
        for( Schema.PicklistEntry pickListVal : ple){
            pickListValuesList.add(pickListVal.getLabel());
        }    
        return pickListValuesList;
    }
 @AuraEnabled   
    public static Boolean save(String FirstName, String LastName, String Email, String Mobile, String Store, String Language )
    {
        List<Contact> Contact = [SELECT Id, Email From Contact WHERE Email=:Email];
         if(contact.size() > 0){
             return false;
        }else{
            Contact con=new Contact(); 
            con.FirstName = FirstName;
            con.LastName = LastName;
            con.Email = Email;
            con.MobilePhone = Mobile;
            con.Store__c = Store;
            con.Language__c = Language;
            insert con;
            return true;
        }
    }
    }
 
Hi Community!

So I made a flow for closing a feedback case that works as a standard lightning component. However, when I put the flow in as part of a guided action list. The flow runs but doesn't update anything.

I noticed that this iw why the standard version works is because of this check mark where I pass my feedbackcaseID variable as the recordID:

User-added image

What would be the best way to grab the current record ID in my flow so that I can run it through the guided action list?

More than happy to attach screenshots of my current flow if that helps.

Thank you all this would be amazing if I can get this solved!!

 
trigger Prefix_Dr on Lead (before insert,before update) {
    for(lead L:trigger.new){
       L.FirstName='Dr.'+L.FirstName;
        }
}
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
@istest
public class Prefix_Dr_test {
    testmethod static void test(){
        Lead L=New Lead();
        L.FirstName='Dr.Midul';
        L.LastName='ahmed';
        L.Company='sfdc';
        L.Status='Working-contacted'; 
        insert L;
        
        Lead Le=[select Id,firstname,lastname from lead where company='sfdc'];
       System.assertEquals(Le.FirstName.ContainsIgnoreCase('Dr.'),'Dr.');
           
    }


here test class is showing error
Has anyone got simple examples of where they were able to add a 3rd column to a section in Lightning? 
 
What is the difference between Salesforce Lightning and Classic.

Guys I have joined a startup coming which is asking me to learn Salesforce and start working on it. As I have learned Java and have also worked in a small firm for 1 year on Java. Now should I start learning Salesforce or look for other job in Java. Is learning Salesforce worth for long run or should I get expertise in java
Hi all,

I would like to implement component having a background color change feature.
I tried to get some information on how to change CSS using Lightning Component controller, I couldn't get much about it.
Please advise me if you have any idea to solve this.

Thanks for your help in advance.

Component :
<aura:component>
<div>
        <lightning:input type="color" label="Color" name="color" value="" onchange="{!c.colorChanger}" aura:id="color"/>
</div>
</aura:component>
Controller :
({
	colorChanger : function(component, event, helper) {
		var color = component.find("color").get("v.value");
        this.css({"background" : color})
    }
})
*tried this.style.background = color;
 
We have a custom lightning component that takes advantage of an external stylesheet (stored in the static resources).

It is included with 
<ltng:require styles="{! $Resource.STYLESHEETNAMEHERE}"/>

My thinking is that the developer adds a sort of 'onExit' handler to unlink the file, but I can't find any documentation for unloading a static resource, or I could be completely wrong and it just be a caching issue

The issue is that some of the styles in that external resource are being carried over to other components that don't explicitly include the file
How can we tackle this?

A screen recording of the issue
  • Open a default modal (FINE)
  • Open a custom component that includes the CSS file named 'fullModalBypass.css'
  • Re-open the first modal, the modal contains the CSS file that was included in the component of the previous step
There is a requirement where we need to group the business field by rows and group status field by column, In this process, we get a matrix report with business as rows and different status as columns

shown below in the screenshot 
User-added image
this is the exported report from salesforce. 

Now we have a requirement to display pending column after Due column in the above-shown screenshot and the value of the pending column is calculated by the subtraction of Due and delivered columns. how to achieve this?

Appreciate your inputs on this. 

- Naveen K N
Hi Friends,
I have a custom field defined as a picklist. 
I would like to set the values of my picklist based on a SOQL query on List view. 
That way my users will be able to assign an opportunity to a specific list view.

how could I do that using apex ? 
Hi folks:

Im trying to upload a bunch of test opportunities to an account in our dev instance but Im not able to get any data to appear. Im using the python lib simple_salesforce (https://github.com/simple-salesforce/simple-salesforce) via the following code. The lib works great for querying data but I haven't had much success uploading opportunities. 
 
def generateTestData(sf_handle):
    load_data = pd.read_csv('qordata 10 opportunities.csv')
    bulk_data = []
    for row in load_data.itertuples():
        d = row._asdict()
        del d['Index']
        bulk_data.append(d)
    try:
        sf_handle.bulk.Opportunity.upsert(bulk_data,external_id_field='Name')
    except ValueError:
        print("We have a problem")
I have this csv file of opportunities that I want to add to the existing account Qordata but nothing gets added. 
User-added image

Any guidance would be much appreciated. 

thanks,
-aasif
 
Hi everyone,

I'd like to know if it's possible to send mail in custom object please
I have this trigger in which, when a new quote record is inserted, I am updating couple records, which works fine in the after insert serction.

But when an approval process updates a record, I want some records to be updated in the after update section, which is causing the recurssive error: 

QuoteTrigger: execution of AfterUpdate caused by: System.DmlException: Update failed. First exception on row 0 with id 0Q05D0000007jBySAI; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, QuoteTrigger: maximum trigger depth exceeded Quote trigger event AfterUpdate Quote trigger event 

How can I get around this error and implement my logic? Trigger code is below. Error occours on update qtList; line. I am trying to implement in the // If the quote is approved unmark - section.

 
trigger QuoteTrigger on Quote (after insert,after update) {
    
    Set<String> oppIds = new Set<String>();
    for(Quote q : Trigger.New){
        oppIds.add(q.opportunityId);  
    }
    
    public static Boolean preventRecursive = true;
    if(preventRecursive){
        preventRecursive = false;
        
        // To mark the newly inserted quote as latest and unmark the previous quote if there is any
        if(Trigger.isInsert && Trigger.isAfter){
            List<Quote> quoteList = [select id,opportunityId,Latest_quote__c from quote where opportunityId IN :oppIds ORDER BY CreatedDate DESC LIMIT 2];
            if(quoteList.size() == 1){
                quoteList[0].Latest_quote__c = true;
                update quoteList;
            } else if (quoteList.size() > 1) {
            quoteList[0].Latest_quote__c = true;
                quoteList[1].Latest_quote__c = false;
                update quoteList;
            }
        }
        
        if(Trigger.isAfter && Trigger.isUpdate){
            if(trigger.new != null){
                for(quote qt:trigger.new){
                    if(Trigger.new[0].Status== 'Approved' && qt.Quote_Link__c == Null && qt.Proposal_PDF__c == Null && qt.Site_Services_PDF__c == Null){                
                       // Quote_Lcs.sendemailtemplate(qt.id);
                    } 
                } 
                
                // If the quote is approved unmark all as latest and mark last updated (approved) quote as latest
                if(Trigger.new[0].Status== 'Approved'){ 
                    System.debug('Approved');
                    List<Quote> qtList = [select id,opportunityId,Latest_quote__c from quote where opportunityId IN :oppIds  ORDER BY LastModifiedDate DESC];
                    if (qtList.size() > 1) {
                        for(Integer i = 0; i < qtList.size(); i++){ // uncheck all from being latest
                            qtList[i].Latest_quote__c = false;
                        }
                    }
                    qtList[0].Latest_quote__c = true; // mark only the last updated/approved quote as latest
                    update qtList;
                }
            }
        }
    }
}

 
In the below code I am trying to remove the element from the array, the splice method is failing for some reason.
 // this.productId =  {
    //     [
    //         {
    //             "Id": "a001700000802ZJAAY",
    //             "Name": "Medium Pizza",
    //             "Price__c": 9
    //         },
    //         {
    //             "Id": "a0017000007ztMUAAY",
    //             "Name": "Large Pizza",
    //             "Price__c": 10
    //         }
    //     ]
    // }
    
    handleDeleteSelected(event){
        console.log('handle Delete', JSON.stringify(event.detail))
    //    handle Delete {"Id":"a001700000802ZJAAY","Name":"Medium Pizza","Price__c":9}
        var del = event.detail.Id
        const productIndex = this.productId.findIndex(e => e.Id === del);
         const productupdate = this.productId;
  // delete the Medium Pizza from the productupdate array
        productupdate.splice(productIndex, 1)
       
      console.log('productIndex', productIndex)
        
      console.log(productupdate)
    }
Hello All,

 I have a field with data type "long Text Area". I have updated the "# of Visible Lines" for that field from 3 to 8. 
Even after updating the field, the system display only 3 lines while on Edit/New mode in lightning. 
Please provide the inputs.

Thank you!
Hi All,
i am new to apex programming. in apex code below i have to pass one dml statement(opplist) to pass account id along with json string (parentOppJson) can anybody let me know how to do that.

/**
 * Controller used by the "scheduleOppsLwc" Lightning Web Component.
 
 * @since   2021-10-05
 * @version 2021-10-05
 */
public class ScheduleOppsCC {

    /**
     * Creates new child installment Opportunities related to the Opportunity
     * used for the "Schedule Opportunities" quick action and updates the parent
     * as needed to CPQ-related details.
     * @param   parentOpp       ID of Opportunity from quick action context
     * @param   parentOppJson   JSON string-representation of the parent opportunity with new values for update
     * @param   childOppsJson   JSON string-representation of a list of child opportunities to create
     */
    @AuraEnabled
    public static void createChildrenUpdateParent(String parentOpp, String parentOppJson, String childOppsJson) {
    
     system.debug('--> Schema.Opportunity.SObjectType '  + Schema.Opportunity.SObjectType);
     
        
     Id parentOppId = Id.valueOf( String.escapeSingleQuotes(parentOpp) );
     system.debug('--> parentOppId '  + parentOppId);
     
        
       if ( Schema.Opportunity.SObjectType == parentOppId.getSObjectType() )
       
      
        {
           try {
           
            List<Opportunity> parentOp = (List<Opportunity>)JSON.deserialize(parentOppJson, List<Opportunity>.class);
         System.debug( '-> parentOp = ' + parentOp );
         
           //List<Opportunity> oppList = [ SELECT Id, AccountId , RecordTypeId , StageName, Name,CloseDate  FROM Opportunity  WHERE Id = :parentOppId ];
           
                                          
                                           
                                           
        if ( (parentOp != null) && !parentOp .isEmpty() ) {
            List<Opportunity> childOpps = (List<Opportunity>)JSON.deserialize(childOppsJson, List<Opportunity>.class);
            system.debug('--> childOpps after deserialize ' + childOpps);
            List<Opportunity> insertingChildren = new List<Opportunity>();
            for ( Integer i = 0; i < childOpps.size(); ++i ) {
           
            
              Opportunity opp = new Opportunity(AccountId = parentOp [0].AccountId, RecordTypeId = parentOp [0].RecordTypeId  );
              opp.Is_Child__c = true;
              opp.Parent_OpportunityID__c = parentOppId;
              opp.StageName = parentOp[0].StageName;
              opp.Name = parentOp[i].Name;
              opp.CloseDate = childOpps[i].CloseDate;
              opp.Primary_Contact__c = childOpps[i].Primary_Contact__c;
              opp.First_Installment_Date__c = parentOp [0].First_Installment_Date__c;
              opp.Installment_Period__c =  parentOp [0].Installment_Period__c;
              opp.Last_Installment_Date__c = parentOp [0].Last_Installment_Date__c;  
              opp.Number_of_Installments__c = parentOp [0].Number_of_Installments__c; 

              opp.MINT_Lines_Magenta_IoT__c = childOpps[i].MINT_Lines_Magenta_IoT__c;
              opp.Probability = parentOp [0].Probability;
              opp.Scheduled_as_Child__c = childOpps[i].Scheduled_as_Child__c;
              opp.Scheduled_with_Children__c = childOpps[i].Scheduled_with_Children__c;
              opp.Schedule_Type__c = parentOp [0].Schedule_Type__c;
              
              opp.Voice_Lines__c = childOpps[i].Voice_Lines__c;
              opp.Yellow_IoT_Lines__c = childOpps[i].Yellow_IoT_Lines__c;                     

                // update opp with records from childOpps[i] //
               
                insertingChildren.add(opp);
                 
            } 
            System.debug( '-> insertingChildren1 = ' + insertingChildren);
            try{
                   insert insertingChildren;
                    System.debug( '-> insertingChildren2 = ' + insertingChildren);
           } catch(DmlException e) 
           { System.debug('The following exception has occurred: ' + e.getMessage()); }
        } 
              
             
                List<OpportunityLineItem> oliList = [ SELECT Id
                           FROM OpportunityLineItem
                          WHERE OpportunityId = :parentOppId ];
                System.debug( '-> oliList = ' + oliList );
                delete oliList;
                /* insert (List<Opportunity>)JSON.deserialize(childOppsJson, List<Opportunity>.class);
                delete [ SELECT Id
                           FROM OpportunityLineItem
                          WHERE OpportunityId = :parentOppId ]; */

                
                   for( Opportunity op : parentOp  ){
                    
                   op.StageName = 'Discovery';
                 }
                
                
                System.debug( '-> parent = ' + parentOp );
                update parentOp  ;
          } catch (Exception ex) {
                System.debug( 'EXCEPTION @ ' + ex.getLineNumber() + ' (' + ex.getLineNumber() + ': ' +
                        ex.getMessage() + '): ScheduleOppsCC.createChildrenUpdateParent()\n -> parentOpp = ' +
                      parentOpp + '\n -> parentOppJson = ' + parentOppJson +
                       '\n -> childOppsJson = ' + childOppsJson);
              throw new AuraHandledException('An error occurred, please reach out to your administrator for assistance.');
            }
       }
       throw new AuraHandledException('This action is only available for Opportunity records.');
   }

}
    
     

              
              
         
              
            
                
                
             
             
               
I am trying to create a lightning component which gets a URL from a field using SOQL. This URL is returned to the aura component which navigates to the external website in which a document is saved.
But my aura component is not invoking my apex class. Not able to figure the error. Please help in finding the error. Thanks in error.

This is my Lightning component
<aura:component implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,force:lightningQuickAction" access="global" 
                controller="RedirectToSP">
    
    <lightning:card title='Redirect to Sharepoint Form new' >
       <div class="slds-grid slds-m-around--small" style="width:400px;">
    <lightning:button class="slds-m-left_x-small" variant="brand" label="Sharepoint" title="Sharepoint" onclick="{!c.fetchRecord}" />
      </div>
  </lightning:card>  
</aura:component>


This is my controller
({
    fetchRecord: function(component, event, helper) {
        console.log('==3==>' + component.get("v.recordId"));
        helper.recordSearch(component, event, helper)        
    }
})


My helper
({
    recordSearch : function(component, event) {
        var recordId = component.get("v.recordId");
        var action = component.get("c.fetchRecord");
        console.log('==5==>' + recordId);
        action.SetParams({
            recordId : component.get("v.recordId")
        });
         action.setCallback(this, function(response) {
           var state = response.getState();
            if (state === "SUCCESS"){
                var urlEvent = $A.get("e.force:navigateToURL");
            console.log('Response ==60 '+response.getReturnValue());
            urlEvent.setParams({ "url": response.getReturnValue()
                               });
            urlEvent.fire();
        }
        });
    }
})

The following is my apex class
public class RedirectToSP{
 
    public static String fetchRecord (string recordId) {
        system.debug('hi');
        system.debug('id--->'+recordId);
       
      Form_Object__c logdata =[select Id, SharePoint_URL__c from Form_Object__c where Id =: recordId];
        String strAssumptionFloodOnlyUrl = logdata.SharePoint_URL__c;
        return strAssumptionFloodOnlyUrl;
    }  
}

Hello Salesforce devs,

I'm just a point&click admin, I asked the question on the trailhead sf forum and someone suggested I come here for this quesiton.

I saw that in the Workbench tool we can perform a SOSL search.
This is great however it is not possible to download the result id's in CSV file, unlike a SOQL query which allows for Bulk CSV download. 

Is there another tool I can use for a SOSL search allowing to download the Ids and perhaps some extra info regarding the records? 

Thank you!

Hi,

I am trying to auto populate default fields while creating the contact.
e.g Mailing region, country.
When users select new contact from account then default values should be populated.
also users should be able to chage the picklist values if they want.
Any suggestions how can I implement this logic.
I want to implement it for 2 users.
Thanks in advance
I made apex classes and triggers on VS Code.
and I execute [SFDX:Deploy Source to Org]
when I open exist apex class or triggers on developer console,
I can't find any apex classes or triggers I made.
but they work normally in [Execute Anonymous Window] like "Class.Method();"
please give me a solutions
We want to create a lookup relationship on care program product to medication in health cloud. Our products are medications. We get an error message. Any advice? #healthcloud
I am inserting new record using apex code. My code is correct. But whenever I check this new record in my org by clicking on Account tab the record is not displaying. Can you help me. I inserted the record using VF and clicked on Account tab . There is no new record only old accounts are there. why this happening.
Hello, 
I am trying to use data on fields of the record of where I have my flow button (kicks off flow) to use in my flow but I am unable to get that data in those fields when using Get Record Flow Element I am unable to set the ID for the current record. How can I do that? 
I cannot figure out why my gmail and hotmail test users are not receiving emails from my sandbox.  I can receive emails to my system administrator account.  I checked the spam filters on the gmail account and even added @salesforce.mil to the safe senders list.

Are there settings that will block and email from arriving to gmail?  I checked the email log and it does show an email was sent, but it has not been received.

On a side note- my gmail account can receive salesforce emails from other salesforce sites.  

Any ideas?
  • September 28, 2021
  • Like
  • 0
Hello,

I need a daily scheduled trigger to auto-change a field called "Admin_Update__c" with Today's date of records who's "Contract_Status_Roll_up__c" does not equal "Terminated" in an object called AII_Contract_Terms__c
I have installed Dropbox for Salesforce using a Business Standard account. Apparently it is working correctly and as we expected but strange Apex exceptions are occurring in one of the managed triggers. We were getting that error every 60 seconds and we can't confirm if there are issues behind the scenes because of this.

It would help us to know what this exception is about and what we can do to avoid it. Thank you in advance.

Failed to process Queueable job for class Dropbox_for_SF.HandleConvertQueue for job ID 7073f00000F75nl.

caused by: Dropbox_for_SF.DropboxClient.UserNotConnectedException: Script-thrown exception

Class.Dropbox_for_SF.DropboxClient.createHttpRequest: line 74, column 1
Class.Dropbox_for_SF.DropboxClient.httpCallout: line 99, column 1
Class.Dropbox_for_SF.DropboxClient.httpCallout: line 96, column 1
Class.Dropbox_for_SF.DropboxClient.httpCallout: line 93, column 1
Class.Dropbox_for_SF.DropboxClient: line 327, column 1
Class.Dropbox_for_SF.RootFinder.findRecordRoot: line 247, column 1
Class.Dropbox_for_SF.RootFinder.findRecordRoot: line 214, column 1
Class.Dropbox_for_SF.RootFinder.findRecordRoot: line 199, column 1
Class.Dropbox_for_SF.HandleConvertQueue.moveFiles: line 32, column 1
Class.Dropbox_for_SF.HandleConvertQueue.execute: line 13, column 1
Component: 

 <lightning:datatable style="width: 50%" data="{! v.ContactList }"
                             aura:id="accountDataTable"
                             columns="{! v.mycolumns }"

                             onrowselection="{!c.handleSelectedRow}"
                             keyField="Id"  onsave ="{!c.onSave}" hideCheckboxColumn="false" onrowaction="{!c.viewRecord }"
<lightning:button variant="Brand" label="Delete Selected Contacts" title="Success" onclick="{! c.handleSelectedRowdelete }"/> 

JS Controller :

handleSelectedRow: function(component, event, helper){
        var abc = event.getParam('selectedRows'); 
        
        var setRows =[];
        for(var i = 0;i<abc.length;i++ ) {
            alert('abc[i].id'+abc[i]);
            setRows.push(abc[i].id);
        } 
        
        component.set("v.selectedRows",setRows);
    },
    handleSelectedRowdelete: function(component, event, helper){
         var conList=component.get("v.selectedRows");
        alert(conList);
        var conIds =[];
        for(var i = 0;i<conList.length;i++ ) {
            
            conIds.push(conList[i].id);

        }
        alert("****Id****",conIds);
        
        var action = component.get("c.DeleteContactlist");
        action.setParams({
            'listcon' : conIds
        });
        action.setCallback(this,function(response) {
            var state = response.getState();
            if (state === "SUCCESS") {
                //if update is successful
                component.set("v.showdelete",'True');
                component.set("v.ContactList",'');
                location.reload();
            }
        });
        $A.enqueueAction(action);


I want on click of Delete Selected Contacts , all selected contact should deleted. I have use onselected attribute of datatable and on selestion, I am updating selectedRows. On button click I am using SelectedRows and trying to get the id but getting error. 



Error:   Action failed: c:getContactComp$controller$handleSelectedRowdelete [Cannot read property 'id' of undefined]
Hi,
I had written code for 3 fileds (FirstName,LastName,PhysicalAttributes) for inserting record in Contact Object.It was successfully Saving Record.
But when i am trying to insert Record using FirstName and LastName i am getting error like

Error creating record
Upsert failed. First exception on row 0; first error: INVALID_TYPE_ON_FIELD_IN_RECORD, Physical Attributes: value not of required type: : [Physical_Attributes__c]
Close


Because while Inserting Records we can skip some Fields(i.e;Non-Mandatory)Fields.Can any one Plz suggest me.

Here is my code:

<template>
    <lightning-card title="Insert Contact" icon-name="standard:contact">
            <div class="slds-p-around_x-small">
                <lightning-input label="FirstName" value={rec.FirstName} onchange={handleFirstNameChange}></lightning-input>
                <lightning-input label="LastName" value={rec.LastName} onchange={handleLastNameChange}></lightning-input>
                <lightning-input type="text" label="PhysicalAttributes" value={rec.Physical_Attributes__c} onchange={handlePhysicalAttributesChange}></lightning-input><br/>
                <lightning-button label="Save" onclick={handleClick}></lightning-button>
            </div>
        </lightning-card>
</template>

import { LightningElement,track } from 'lwc';
import createContact from '@salesforce/apex/insertContactApexWeb.saveContactRecord';
import {ShowToastEvent} from 'lightning/platformShowToastEvent';
import FIRSTNAME_FIELD from '@salesforce/schema/Contact.FirstName__c';
import LASTNAME_FIELD from '@salesforce/schema/Contact.LastName__c';
import PHYSICALATTRIBUTES_FIELD from '@salesforce/schema/Contact.Physical_Attributes__c';
export default class InsertContact extends LightningElement {
    @track firstname = FIRSTNAME_FIELD;
    @track lastname = LASTNAME_FIELD;
    @track physicalattributes = PHYSICALATTRIBUTES_FIELD;
   @track  rec = {
        FirstName : this.firstname,
        LastName : this.lastname,
        Physical_Attributes__c: this.physicalattributes
    }
    handleFirstNameChange(event) {
        this.rec.FirstName = event.target.value;
    }
    
    handleLastNameChange(event) {
        this.rec.LastName = event.target.value;
    }
    
    handlePhysicalAttributesChange(event) {
        this.rec.Physical_Attributes__c= event.target.value;
    }
    handleClick() {
        createContact({ con : this.rec })
       .then(result => {
            // Clear the user enter values
            this.rec = {};
            window.console.log('result ===> '+result);
            // Show success messsage
            this.dispatchEvent(new ShowToastEvent({
                title: 'Success!!',
                message: 'Contact Created Successfully!!',
                variant: 'success'
            }),);
        })
        .catch(error => {            
            this.error = error.message;
            window.console.log('error body--'+error.body.message);
            this.dispatchEvent(
                new ShowToastEvent({
                    title: 'Error creating record',
                    message: error.body.message,
                    variant: 'error',
                }),
            );
            window.console.log("error", JSON.stringify(this.error));
        });

    }
    
}


Apex Class:
public with sharing class insertContactApexWeb {
   
    @AuraEnabled
    public static void saveContactRecord(Contact con){
        System.debug('acc--'+con);
        try{
            insert con;
        }
        catch(Exception ex) {
            throw new AuraHandledException(ex.getMessage());
        }
    }
}
I have an active user that has a customer community license.  That user is able to own contact records, but I can't seem to change ownership of an account to that user.

In the documentation, I found this statement: "Community Users can't own community-enabled accounts".  Is that my issue?  What does it mean for an account to be "community-enabled"?  Is there a work-around?  My goal here is to have a community licensed user that can own accounts that are outdated/inactive.

Thanks,

- Randy Trigg
  • September 17, 2019
  • Like
  • 1
Context

I have a custom Lightning Web Component that allows modification of multiple records inside of modal. Once a record is updated, I reload that same record-id, but the old data shows up instead of the new data. After thorough research, I have concluded that the Lightning Data Service is at fault here. It is caching the data in the built-in ViewState most likely. The only way to get a data refresh is by refreshing the entire web page. I found multiple articles that explain how to turn off Secure and Persistent Browser Caching, but this is an unacceptable solution, as the entire Organization will take a performance hit, to support my little Lightning Web Component. Also salesforce insists that you don't do it production:

https://developer.salesforce.com/docs/atlas.en-us.lightning.meta/lightning/debug_disable_caching.htm

Question

How do I invalidate or send a ChangeNotify Event to the Lightning Data Service (in the context of Lightning Web Components), so my lightning-record-edit-form shows the updated data, instead of the old data (without refreshing the entire web page of course)?
Just wanted to share a problem we had that I haven't seen elsewhere.

We built a Flow Definition with the Process Builder and Added it to our Managed Package

Then we decided to Deactivate the Flow before uploading the Package as some orgs that we support may not use it.

When we tried to install our Managed Package, it failed, saying that the Flow had been Deleted.

It clearly had NOT been deleted, so we were stumped.  Salesforce Support couldn't help us and escalated the Case.

I began studying the Setup Audit Trail and noticed strange entries that happened at the same time I Activated and Deactivated the Flow:

When my Flow was "Activated",  the system was creating a 'Flow Trigger" and a "Workflow Rule" behind the scenes with the same name as my flow, though adding a long id number at the end.

The PROBLEM is that when I deactivated the Flow, the system didn't just deactivate the "backend" Workflow Rule, but THEN it DELETED both the 'Flow Trigger' and the "backend" Workflow Rule!  I don't understand why it was actually deleted? THIS deleted hidden Trigger and Workflow is what caused the package install to fail.

On a hunch I decided to Activate the Flow and build a new package again.  Sure enough, the package uploaded and installed perfectly.

Salesforce needs to put some documentation around this, or at least have a warning popup when you try to Deactivate a Flow that is already in a package.

How are we supposed to know that deactivation is deleting components that we didn't even know were there in the first place?

Hope this saves someone else some time.