You need to sign in to do that
Don't have an account?
Saurabh Kulkarni 84
RefreshView event called multiple times for different objects
Hello Everyone
I have a lightning component put on a record page. I'm using RefreshEvent in my component to see if RefreshEvent was done on record page and then perform some action.
I have my component put on Lead object record page as well as Opportunity record page.
My problem is, when I navigate from Lead Record page to Opportunity record page, and I make some changes on Opportunity record, the RefreshEvent is called twice - one for Lead record (as i had navigated from Lead object, probably it kind of cached it) and one for current Opportunity record. If I'm printing v.recordId in console I clearly see two different record Ids being printed and hence my action is getting called twice for two different records.
How can I tackle this scenario?
Thanks,
Saurabh Kulkarni
I have a lightning component put on a record page. I'm using RefreshEvent in my component to see if RefreshEvent was done on record page and then perform some action.
<aura:handler event="force:refreshView" action="{!c.handleEvent}"/>
I have my component put on Lead object record page as well as Opportunity record page.
My problem is, when I navigate from Lead Record page to Opportunity record page, and I make some changes on Opportunity record, the RefreshEvent is called twice - one for Lead record (as i had navigated from Lead object, probably it kind of cached it) and one for current Opportunity record. If I'm printing v.recordId in console I clearly see two different record Ids being printed and hence my action is getting called twice for two different records.
handleEvent: function(component,event,helper){ console.log('HANDLER '+component.get('v.recordId')); } -- Console Log: HANDLER 0063h000004n7r5AAA HANDLER 00Q3h0000052lCCEAY
How can I tackle this scenario?
Thanks,
Saurabh Kulkarni
I managed to fix it by checking if the record id variable is same as the one present in the current URL. As refresh event is fired with multiple record Ids, I can check if which one of them matches from current url and then do my stuff.
Thanks,
Saurabh Kulkarni
All Answers
This is just an idea can you try using a boolean to check if the event has already occurred?
Regards,
Anutej
Thank you for your reply.
If I put a flag, my event won't get considered even when I'm performing second valid save on same record. I want the refresh event to call my action every time the record is edited and saved. I can probably verify recordId got from v.recordId variable and record id i have in the URL and then only perform action. However, I don't understand why refresh event from earlier opened record should get fired here.
Thanks
Saurabh Kulkarni
Use bellow js code for getting single record id
<aura:attribute name="refreshTimestamp" type="Integer" default="0" />
forceRefreshViewHandler : function(c, e, h){
var lastRefresh = c.get("v.refreshTimestamp")
if( h.ts() - lastRefresh > 1000 ) {
// doing my stuff here
c.set("v.refreshTimestamp" , h.ts() );
}
}
I hope you find the above solution helpful. If it does, please mark as Best Answer to help others too.
Thanks and Regards,
Sachin Arora
www.sachinsf.com
Thank you for your reply..
Can you please help me out what is h.ts() ? I'm not familiar with any helper method named as ts() or ts abbrevation.
Appreciate your help on this.
Regards,
Saurabh Kulkarni
I managed to fix it by checking if the record id variable is same as the one present in the current URL. As refresh event is fired with multiple record Ids, I can check if which one of them matches from current url and then do my stuff.
Thanks,
Saurabh Kulkarni