Регистрация  |  Вход

Родительская страница не рефрешится во время при создании/апдейте дочерней записи с related records секции

Если вы работали в LUX, то думаю, что вы уже сталкивались с этом проблемой.

представьте, что есть родительский и дочерний объекты. на дочернем объекте есть тригер который рол-апит что то на родителя (стандартный Рол-ап применить невозможно в силу каких то причин). все просто, все хорошо, все - как обычно.

и вот вы на стандартном дитейл лейауте родительской записи в LUX.
и решили создать новую дочерную запись. вы кликаете New на related list с дочерними записями, поднимается стандартное поп-ап окно с формой создания новой дочерней засипи (как удобно же в LUX, не нужно загружать новую страницу) и создаете новую дочерную запись, поп-ап закрывается, вы снова на родительской записи, и что видите: иногда то РолАп поле уже содержит новую информацию в соответсвии с только что созданной дочерней записью, а иногда нет! нужно ручками рефрешить страницу. Ну как так? лучше бы она вообще никогда не рефрешилась, и это все нужно было делать ручками как в Классике, чем вот так. Проблема то довольно фундаментальная

Вы сталкивались с этим? есть какие-то решения?

Если вы работали в  LUX, то думаю, что вы уже сталкивались с этом проблемой.

представьте, что есть родительский и дочерний объекты. на дочернем объекте есть тригер который рол-апит что то на родителя (стандартный Рол-ап применить невозможно в силу каких то причин). все просто, все хорошо, все - как обычно.

и вот вы на стандартном дитейл лейауте родительской записи в  LUX.
и решили создать новую дочерную запись. вы кликаете New на related list с дочерними записями, поднимается стандартное поп-ап окно с формой создания новой дочерней засипи (как удобно же в LUX, не нужно загружать новую страницу) и создаете новую дочерную запись, поп-ап закрывается, вы снова на родительской записи, и что видите: иногда то РолАп поле уже содержит новую информацию в соответсвии с только что созданной дочерней записью, а иногда нет! нужно ручками рефрешить страницу. Ну как так? лучше бы она вообще никогда не рефрешилась, и это все нужно было делать ручками как в Классике, чем вот так. Проблема то довольно фундаментальная

Вы сталкивались с этим? есть какие-то решения?
  


Довольно часто сталкивался. Иногда даже рефреш страницы не помогает, приходиться ждать секунд 15.

Довольно часто сталкивался. Иногда даже рефреш страницы не помогает, приходиться ждать секунд 15. 

продолжая тему:

есть способ сделать рол-ап функционал через Flow который используется в Process Builder

так, вот люди, кто это попробовал, утверждают, что при таком рол-апе проблем с рефрешем родительской записи не возникает. Но я что-то не вижу причин, чтобы такой путь работал быстрее или как-то иначе...

продолжая тему:

есть способ сделать рол-ап функционал через Flow который используется в Process Builder

так, вот люди, кто это попробовал, утверждают, что при таком рол-апе проблем с рефрешем родительской записи не возникает. Но я что-то не вижу причин, чтобы такой путь работал быстрее или как-то иначе...

я уже думаю вот о чем:

сделать лайтнинг компонент который ловит момент закрытия поп-ап окна создания дочерней записи и через пару секунд вызывает рефреш всей родительской страницы.

этот компонент добавить на лайтнинг страницу стандартного дитейл лейаута родительской записи

но как в нем поймать этот самый момент закрытия стандартного поп-ап окна создания дочерней записи?

я уже думаю вот о чем:

сделать лайтнинг компонент который ловит момент закрытия поп-ап окна создания дочерней записи и через пару секунд вызывает рефреш всей родительской страницы.

этот компонент добавить на лайтнинг страницу стандартного дитейл лейаута родительской записи

но как в нем поймать этот самый момент закрытия стандартного поп-ап окна создания дочерней записи?

Den Brown
так, вот люди, кто это попробовал, утверждают, что при таком рол-апе проблем с рефрешем родительской записи не возникает.

враки это все

создал объект с двумя релайтед объектами.

с первого рел объекта делаю ролап на родительскую запись с помощью апекс тригера

со второго рел объекта делаю ролап на родительскую запись с помощью Flow +Procee builder

результат:

- ролап на родительскую запись с помощью Flow +Procee builder никак не помогает с рефрешем родительской записи при создании новой дочерней записи c рел листа или апдейте дочерней записс через row action рел листа (именно в этих случаях поднимается поп-ап окно над родительским лейаутом)
- ролап на родительскую запись с помощью Flow +Procee builder работате гораздо медленнее апекс тригера, при апдете апек тригером можно сразу рефрешнуть родитльскую запсиь и виден результат, а ту еще несколько секуд ждать нужно

в этом тесте я вообще не замечаю, чтоб при закрытии поп-ап окна с дочерней записью происходил какой то рефреш родительской записи (я добавил Рел лист на родительскую дитейл страницу как "Related List - Single" component)

[quote="Den Brown"]так, вот люди, кто это попробовал, утверждают, что при таком рол-апе проблем с рефрешем родительской записи не возникает. [/quote]

враки это все

создал объект с двумя релайтед объектами.

с первого рел объекта делаю ролап на родительскую запись с помощью апекс тригера

со второго рел объекта делаю ролап на родительскую запись с помощью Flow +Procee builder

результат:

- ролап на родительскую запись с помощью Flow +Procee builder никак не помогает с рефрешем родительской записи при создании новой дочерней записи c рел листа или апдейте дочерней записс через row action рел листа (именно в этих случаях поднимается поп-ап окно над родительским лейаутом) 
- ролап на родительскую запись с помощью Flow +Procee builder работате гораздо медленнее апекс тригера, при апдете апек тригером можно сразу рефрешнуть родитльскую запсиь и виден результат, а ту еще несколько секуд ждать нужно

в этом тесте я вообще не замечаю, чтоб при закрытии поп-ап окна с дочерней записью происходил какой то рефреш родительской записи (я добавил Рел лист на родительскую дитейл страницу как "Related List - Single" component)

вот эта проблема - рефреша родительского лейаута при закрытии NEW or Edit поп-ап окна с related записью настолько очевидна и актуальна, но у нее нет никакого стандартного решения. более того даже кастомное решение сделать не просто: я не знаю как словить в кастомном компонента момент закрытия поп-ап окна, что вызвать рефреш. Единственное решение, что я нагуглил - это сделать компонент который подключен к стримингу эвентов на этом объекте, и при получении уведомления делает рефреш, но это реально костыль

вот эта проблема - рефреша родительского лейаута при закрытии NEW or Edit поп-ап окна с related  записью настолько очевидна и актуальна, но у нее нет никакого стандартного решения. более того даже кастомное решение сделать не просто: я не знаю как словить в кастомном компонента момент закрытия поп-ап окна, что вызвать рефреш. Единственное решение, что я нагуглил - это сделать компонент который подключен к стримингу эвентов на этом объекте, и при получении уведомления делает рефреш, но это реально костыль



также у этой ситуации с "несвежестью" родительской записи на экране монитора есть еще одно печальное последствие. Вот представьте тригер апдатирует кастомное рол-ап поле на родителе, и до того как вы создали новую дочернюю запись через поп-ап окно на родительском лейауте, значение в этом кастомном рол-апе (а это обычное поле, сделанное рид-онли на лейауте)было 1, а стало 2, но на родителе на экране все еще 1. попробуйте апдатировать\пересохранить эту родительскую запись (при переходе в ЭДИТ мод в лайтнинге не происходит перезагрузки записи, это больше похоже на ин-лайн эдитинг в Классике) , как думаете что произойдет со значением в рол-апе? 1 или 2 сохранится? ни то ни другое, СФ вообще не даст пересохранить запись пока ее не рефрешните, не очень то удобно, и даже очень неожиданно для энд юзера.


я кстати попробовал создать формульное поле, что просто тянет значение из рол-ап поля, чтоб убрать реальный кастомном рол-ап с лейаута и оставить только формулу. в этом случае возможно СФ не попросит сначала сделать рефреш перед апдатированием, так как поля, в котором произошел апдейт тригером, нет на лейуате, и я ничего не могу перезаписать, но ведь нет:
Review the following errors

This record was modified during your edit session. Make a note of the data you entered, then reload the record and enter your updates again.

кстати после того как я добавил новое формульное поле на лейаут потребовалось 5 минут (точнее говоря вообще переоткрыть запись в новом окне) чтоб оно начало рендерит значение, в начале оно просто было пустым (позже заметил то же поведение и у обычного поля, только что добавленного на лейаут). Как говорится, даже не знаю, норма ли это...
заметил, что запись рефрешится автоматом (и значения в данном случае появляются для свеже-добавленного поля), если вывести лейаут в ЭДИТ моуд, а потом просто отменить. Причем в самом ЭДИТ мод запись все еще со старыми значениями, а после отмены перегружается новыми

также у этой ситуации с "несвежестью" родительской записи на экране монитора есть еще одно печальное последствие. Вот представьте тригер апдатирует кастомное рол-ап поле на родителе, и до того как вы создали новую дочернюю запись через поп-ап окно на родительском лейауте, значение в этом кастомном рол-апе (а это обычное поле, сделанное рид-онли на лейауте)было 1, а стало 2, но на родителе на экране все еще 1. попробуйте апдатировать\пересохранить эту родительскую запись (при переходе в ЭДИТ мод в лайтнинге не происходит перезагрузки записи, это больше похоже на ин-лайн эдитинг в Классике) , как думаете что произойдет со значением в рол-апе? 1 или 2 сохранится? ни то ни другое, СФ вообще не даст пересохранить запись пока ее не рефрешните, не очень то удобно, и даже очень неожиданно для энд юзера.


я кстати попробовал создать формульное поле, что просто тянет значение из рол-ап поля, чтоб убрать реальный кастомном рол-ап с лейаута и оставить только формулу. в этом случае возможно СФ не попросит сначала сделать рефреш перед апдатированием, так как поля, в котором произошел апдейт тригером, нет на лейуате, и я ничего не могу перезаписать, но ведь нет: 
[i]Review the following errors

    This record was modified during your edit session. Make a note of the data you entered, then reload the record and enter your updates again.[/i]

кстати после того как я добавил новое формульное поле на лейаут потребовалось 5 минут (точнее говоря вообще переоткрыть запись в новом окне) чтоб оно начало рендерит значение, в начале оно просто было пустым (позже заметил то же поведение и у обычного поля, только что добавленного на лейаут). Как говорится, даже не знаю, норма ли это...
заметил, что запись рефрешится автоматом (и значения в данном случае появляются для свеже-добавленного поля), если вывести лейаут в ЭДИТ моуд, а потом просто отменить. Причем в самом ЭДИТ мод запись все еще со старыми значениями, а после отмены перегружается новыми

еще как вариант, и возможно самый реальный:

выносим все эти волшебные кастомные рол-ап поля со стандартного лейауте в кастомный компонент, который помещаем на страницу где нибудь рядом. Контроллер кастомного компонента каждую секунду-две перегружает с сервера значение в этих кастомные рол-ап полях. профит! но увы не решает новую проблему не-апдатируемости родительской записи пока ее вручную не рефрешнуть. можно конечно, в момент когда с сервера пришло новое значение, отличное от текущего, просто сделать рефреш всего окна, но надо бы попробовать, как быстро этот рефреш срабатывает после закрытия поп-апа, да вообще, в таком случае этот вариант уже смахивает на первый вариант с рефрешем из кастомного компонента через подписку на Эвент...

еще как вариант, и возможно самый реальный:

выносим все эти волшебные кастомные рол-ап поля со стандартного лейауте в кастомный компонент, который помещаем на страницу где нибудь рядом. Контроллер кастомного компонента каждую секунду-две перегружает с сервера значение в этих кастомные рол-ап полях. профит! но увы не решает новую проблему не-апдатируемости родительской записи пока ее вручную не рефрешнуть. можно конечно, в момент когда с сервера пришло новое значение, отличное от текущего, просто сделать рефреш всего окна, но надо бы попробовать, как быстро этот рефреш срабатывает после закрытия поп-апа, да вообще, в таком случае этот вариант уже смахивает на первый вариант с рефрешем из кастомного компонента через подписку на Эвент...

вот здесь
https://trailhead.salesforce.com/content/learn/projects/workshop-lightning-programmatic/lightning-data-service-design-parameters

описана работа <force:recordData /> который якобы следит за изменениями на привязанной записи.

что если пустой компонент с таким функционалом выложить на дитейл лейаут родительской записи, и вызывать через него $A.get('e.force:refreshView').fire() на изменения этой родительской записи (вызванные какими то действиями с дочерними записями)?

но не понятно, будет ли <force:recordData /> реагировать на изменения в РолАп поле, скорее всего нужно тригером явно что-то апдатнуть на родительской записи

вот здесь 
https://trailhead.salesforce.com/content/learn/projects/workshop-lightning-programmatic/lightning-data-service-design-parameters

описана работа <force:recordData /> который якобы [b]следит за изменениями[/b] на привязанной записи.

что если пустой компонент с таким функционалом выложить на дитейл лейаут родительской записи, и вызывать через него $A.get('e.force:refreshView').fire() на изменения этой родительской записи (вызванные какими то действиями с дочерними записями)?

но не понятно, будет ли <force:recordData />  реагировать на изменения в РолАп поле, скорее всего нужно тригером явно что-то апдатнуть на родительской записи