【问题标题】:How to modify data for a SugarCRM SubPanel using PHP?如何使用 PHP 修改 SugarCRM 子面板的数据?
【发布时间】:2013-10-30 23:02:48
【问题描述】:

是否可以在不依赖 Action Hooks 的情况下修改 SugarCRM 子面板中显示的内容?

现在要编辑子面板字段的内容,我必须使用这样的钩子...

$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>';

我们对这种方法的主要和主要问题是,在您执行其中任何一个操作之前,它都能很好地工作......

  1. 使用快速创建表单添加项目
  2. 使用子面板分页按钮更改页面

在任何一种情况下,它都会重新加载子面板数据而不对数据运行此挂钩代码,因此结果非常重要,因为您已编辑的子面板字段不再被编辑并正常显示。

这是一个基本示例...这显示了使用上述 Hook 方法编辑的 2-3 个字段...

现在在子面板中分页或快速创建新记录后,它会重新加载子面板数据并且不应用 Hooked 代码,因此您可以看到结果如下所示...

我知道ListView 有一种更可靠、更灵活的方法来编辑其内容,使用get_list_view_data() 方法我能够应用相同的编辑并让它们一直工作!

所以我希望有一种类似的方法来编辑子面板数据并让它始终将编辑应用于该数据?根据我目前在研究中看到的情况,唯一能一直按预期工作的解决方案是创建一个全新的Custom Field Type

我真的希望这不是唯一的方法,因为这对于我需要在子面板中编辑的每种类型的字段来说都是一个主要的痛苦,而且当有简单的方法来编辑所有内容时感觉不对除了子面板数据。

有没有人有任何想法、建议、提示、帮助,请与我分享这个问题,因为这是我过去几个月开始使用 SugarCRM 开发以来遇到的主要问题?

【问题讨论】:

    标签: php sugarcrm


    【解决方案1】:

    您可以通过编写自定义查询来更改数据以获取子面板的数据。

    所以在你的bean(这个例子中的联系人)里面做一个功能:

    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 非常强大,您可以随意修改子面板数据,或多或少 :)

    【讨论】:

    • 这实际上并不是我在原始问题中试图实现的目标,因为我不需要更改数据结果,而只需更改它的显示方式。然而,在一个不同任务的新项目中,这个答案正是我所需要的!谢谢
    • 在您的示例中,它假定子面板已使用模块构建器或工作室添加。当子面板甚至还不存在时,您知道如何使用您的方法吗?意思是使用代码添加子面板,然后使用您的技术来更改数据源?我发现许多相互矛盾的文章似乎都略有不同!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多