У меня есть логический крючок, который изменяет значение поля, но для того, чтобы увидеть это изменение, мне нужно обновить всю страницу ... Я хочу, чтобы он обновлял поле в реальном времени.
Итак, я пытаюсь сделать что-то вроде этого (https://suitecrm.com/suitecrm/forum/suitecrm-7-0-discussion/21178-refresh-sub-panel-values-when-another-sub-panel-is-updated#75194)
Но вместо перезагрузки всей подпанели через controller.php я пытаюсь найти способ обновить одно поле.
Кто-нибудь может посоветовать, какой метод нужно использовать для перезагрузки поля?
Например, чтобы перезагрузить субпанель, нужно
**
showSubPanel('SUBPANEL_NAME',null,true);
**
Но что это за метод JS, который перезагружает одно поле?





Я не смог найти никаких встроенных функций в suiteCRM, которые бы это сделали, потратил много времени на отладчик chrome, но ничего не работало.
Вот видео, в котором объясняется, что происходит, и фактический пример кода. https://thewikihow.com/video_ebuwWZoSYCk
Вам нужно получить новый статус из серверной части, а затем обновить поле внутри controller.php с помощью:
document.querySelector('div[type = "enum"][field = "$field_to_update"]').innerHTML = "$inventory_status_c";
Здесь представлен весь пример файла controller.php, все это имеет смысл, если вы посмотрите 5-минутное видео:
class un_inventoryController extends SugarController {
/**
*
*/
function action_SubPanelViewer() {
require_once 'include/SubPanel/SubPanelViewer.php';
// only if this is creation of new sale under accounts, refresh the screen so the salerow subpanel will be refreshed too
if ( array_key_exists('module', $_REQUEST) && array_key_exists('subpanel', $_REQUEST) && array_key_exists('action', $_REQUEST) &&
$_REQUEST['module'] == 'un_inventory' && $_REQUEST['subpanel'] == "un_inventory_leads_1" && $_REQUEST['action'] == "SubPanelViewer") {
write_to_log(array("request" => $_REQUEST), "all conditions filled, custom controller called", true);
// Get the ID of the inventory unit so we can fetch the new status_c field and update the field right away (otherwise we'll have to refresh the page
$inventory = BeanFactory::getBean($_REQUEST["module"], $_REQUEST["record"]);
$inventory_status_c = ucwords(str_replace("_", " ", $inventory->status_c));
$field_to_update = "status_c";
$js=<<<EOQ
<script>
// Update the status
$( document ).ready(function() {
document.querySelector('div[type = "enum"][field = "$field_to_update"]').innerHTML = "$inventory_status_c";
});
</script>
EOQ;
echo $js;
}
}
}
?>
Чтобы обновить detailView с помощью логической ловушки, вы можете использовать простой «взлом».
В вашем logic_hook поместите следующий js-код в качестве последнего «эха» перед возвратом или выходом:
echo "<script>location.reload();</script>";
Простой, но эффективный.
Это очень стандартный js-код. Он будет работать где угодно, при условии, что SuiteCRM "перенесет" что-то из логического_хука на экран.
"будет работать где угодно", а JS редко сочетаются друг с другом. Быстрый поиск в Google, и вы увидите, что людям нужно время от времени немного настраивать его, чтобы он работал в зависимости от браузеров и т. д. Он должен работать во всех СОВРЕМЕННЫХ браузерах, но он может не работать всегда работает learnwebtutorials.com/…
«Он будет работать везде, где работает остальная CRM», то есть не на вашем 15-летнем Internet Explorer и т. д. :-) Шутки в сторону, это взлом, а не полное решение. Это может потребовать различных корректировок. Дело в том, что, используя этот подход (и зная, что вы можете отправить javascript через простое эхо из вашего логического крючка в браузер, и он будет выполнен, вы можете выполнить множество вещей, которые нелегко сделать в SuiteCRM.
Вы читали статью? тогда оставьте свой пассивно-агрессивный браузер «свой 15-летний IE» при себе. Еще один всезнайка, имеющий дело с абсолютом ..
Дорогой Роберт, ты, наверное, не показал, что я шучу. Пожалуйста, успокойся. Я с первого момента сказал, что это взлом.
Кроме того, существуют тысячи команд, которые «не работают», как было объявлено, в различных ситуациях, но здесь вы не спрашивали, как с ними бороться. Здесь вы спросили, как перезагрузить поле или что-то еще в SuiteCRM, и я пришел с очень простым подходом, который можно использовать. Полезный момент здесь, как я пишу выше, заключается в том, что вы можете «выводить» javascript на панель вашего браузера. Стандартный js-способ перезагрузки страницы - таким образом, перезагружая и ваши поля - это location.reload (). Это не значит, что я «все знаю», я думаю ... и только ситхи имеют дело с абсолютом! :-)
Наконец, в этой статье нет ничего полезного, я не понимаю, почему вы на этом настаиваете. Если у вас есть проблема с кешированной страницей, проблема с кешированием, это совсем другое дело, а не с командой location.reload ().
Спасибо, Лукас, я где-то читал, что это не всегда на 100% согласовано на разных устройствах / браузерах, но, возможно, я ошибаюсь