我有一个逻辑钩子来更改字段的值,但是要查看更改,我需要刷新整个页面...我希望它实时刷新字段。
所以我正在尝试完成这样的事情(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方法是什么?
答案 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;
}
}
}
?>