Перезагрузите поле из controller.php

У меня есть логический крючок, который изменяет значение поля, но для того, чтобы увидеть это изменение, мне нужно обновить всю страницу ... Я хочу, чтобы он обновлял поле в реальном времени.

Итак, я пытаюсь сделать что-то вроде этого (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, который перезагружает одно поле?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
277
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я не смог найти никаких встроенных функций в 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>";

Простой, но эффективный.

Спасибо, Лукас, я где-то читал, что это не всегда на 100% согласовано на разных устройствах / браузерах, но, возможно, я ошибаюсь

Robert Sinclair 26.01.2021 17:55

Это очень стандартный js-код. Он будет работать где угодно, при условии, что SuiteCRM "перенесет" что-то из логического_хука на экран.

Lucas Cave 27.01.2021 18:15

"будет работать где угодно", а JS редко сочетаются друг с другом. Быстрый поиск в Google, и вы увидите, что людям нужно время от времени немного настраивать его, чтобы он работал в зависимости от браузеров и т. д. Он должен работать во всех СОВРЕМЕННЫХ браузерах, но он может не работать всегда работает learnwebtutorials.com/…

Robert Sinclair 28.01.2021 01:34

«Он будет работать везде, где работает остальная CRM», то есть не на вашем 15-летнем Internet Explorer и т. д. :-) Шутки в сторону, это взлом, а не полное решение. Это может потребовать различных корректировок. Дело в том, что, используя этот подход (и зная, что вы можете отправить javascript через простое эхо из вашего логического крючка в браузер, и он будет выполнен, вы можете выполнить множество вещей, которые нелегко сделать в SuiteCRM.

Lucas Cave 29.01.2021 08:34

Вы читали статью? тогда оставьте свой пассивно-агрессивный браузер «свой 15-летний IE» при себе. Еще один всезнайка, имеющий дело с абсолютом ..

Robert Sinclair 29.01.2021 18:36

Дорогой Роберт, ты, наверное, не показал, что я шучу. Пожалуйста, успокойся. Я с первого момента сказал, что это взлом.

Lucas Cave 31.01.2021 10:34

Кроме того, существуют тысячи команд, которые «не работают», как было объявлено, в различных ситуациях, но здесь вы не спрашивали, как с ними бороться. Здесь вы спросили, как перезагрузить поле или что-то еще в SuiteCRM, и я пришел с очень простым подходом, который можно использовать. Полезный момент здесь, как я пишу выше, заключается в том, что вы можете «выводить» javascript на панель вашего браузера. Стандартный js-способ перезагрузки страницы - таким образом, перезагружая и ваши поля - это location.reload (). Это не значит, что я «все знаю», я думаю ... и только ситхи имеют дело с абсолютом! :-)

Lucas Cave 31.01.2021 10:42

Наконец, в этой статье нет ничего полезного, я не понимаю, почему вы на этом настаиваете. Если у вас есть проблема с кешированной страницей, проблема с кешированием, это совсем другое дело, а не с командой location.reload ().

Lucas Cave 31.01.2021 10:45

Другие вопросы по теме