从controller.php重新加载字段

时间:2018-12-05 17:27:11

标签: sugarcrm suitecrm

我有一个逻辑钩子来更改字段的值,但是要查看更改,我需要刷新整个页面...我希望它实时刷新字段。

所以我正在尝试完成这样的事情(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方法是什么?

2 个答案:

答案 0 :(得分:1)

要通过逻辑钩子刷新 detailView,您可以使用简单的“hack”。

在您的 logic_hook 中,将以下 js 代码作为您返回或退出前的最后一个“回声”:

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

简单但有效。

答案 1 :(得分:0)

我在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;


    }

}
}

?>