无论如何修改SugarCRM子面板中显示的内容而不依赖于Action Hooks?
现在要编辑Subpanel字段的内容我必须使用这样的钩子......
$hook_array['process_record']
在我分配Hook来调用的Class方法中,我可以像这样更改子面板中的字段......
$bean->name = '<a href="/index.php?action=ajaxui#ajaxUILoc=index.php%3Fmodule%3Dproje_Web_Project_Tasks%26action%3DDetailView%26record%3D'
.$bean->id.'" rel="popover" data-content="'
.$bean->description.'" data-original-title="">'.$bean->name.'</a>';
我们使用此方法遇到的主要和主要问题是,除非您执行其中任何一项操作,否则它会很有效....
在任何一种情况下,它都会重新加载Subpanel数据而不在数据上运行此钩子代码,因此结果非常重要,因为您编辑的子面板字段不再被编辑并显示为正常。
这是一个基本示例...这显示了使用上面的Hook方法编辑的2-3个字段...
现在在子面板中分页或快速创建新记录后,它会重新加载子面板数据并且不会应用Hooked代码,因此您可以看到结果如下所示...
我知道ListView
使用get_list_view_data()
方法编辑内容的方式更可靠,更灵活我能够应用相同的编辑并让它们始终有效!
所以我希望有一种类似的方法来编辑子面板数据并让它始终对这些数据应用编辑?从我迄今为止在研究中看到的,唯一能够按预期工作的唯一解决方案是创建一个全新的Custom Field Type
!
我真的希望这不是唯一的方式,因为对于我需要在子面板中编辑的每种类型的字段来说,这是一个很大的痛苦,当有简单的方法时,感觉不对编辑除SubPanel数据之外的所有其他内容。
有没有人有任何想法,建议,提示和帮助,请与我分享这个问题,因为这是我在过去几个月开始使用SugarCRM开发的主要问题?
答案 0 :(得分:4)
您可以通过编写自定义查询来更改数据,以获取子面板的数据。
所以在你的bean里面(这个例子是Contacts)做一个函数:
function get_project_list() {
$query = "SELECT project, info, matching, column, names FROM projects WHERE contact_id = '" . $this->id . "' AND deleted = 0"
return $query;
}
然后在子面板定义中设置数据源,如下所示:
$layout_defs["Contacts"]["subpanel_setup"]['projects'] = array(
'order' => 10,
'sort_order' => 'desc',
'sort_by' => 'name',
'title_key' => 'LBL_PROJECTS_TITLE',
'subpanel_name' => 'contact_projects',
'module'=>'projects',
'get_subpanel_data' => 'function:get_project_list',
'function_parameters'=>array('type'=>'urgent'), // this is optional if you decide to sent parameters to the function if do this dont forget to define your function with function get_project_list($params)
'top_buttons' => array (... buttons that you need go here..),
);
由于sql非常强大,你可以按照自己喜欢的方式修改你的子面板数据,或多或少:)