从 controller.php 重新加载字段

Reload a field from the 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方法是什么?

我在 suiteCRM 中找不到任何内置函数可以执行此操作,花了很多时间通过 chrome 调试器,但没有任何效果。

这是一个解释正在发生的事情的视频和实际的代码示例 https://youtu.be/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,您可以使用一个简单的“hack”。

在您的 logic_hook 中,将以下 js 代码作为您在 return 或退出之前的最后“回显”:

echo "<script>location.reload();</script>";

简单但有效。