【问题标题】:Using AJAX to Update Status in SugarCRM SubPanel使用 AJAX 更新 SugarCRM 子面板中的状态
【发布时间】:2013-08-20 15:11:05
【问题描述】:

我想使用 AJAX 来更新 SugarCRM 子面板中的记录状态。下面是我正在开发的项目管理模块的图片。

在图片中,您可以更好地了解我想要实现的目标。在左栏中,我想添加一个新按钮,允许用户快速将项目任务记录标记为已完成。这可以通过将该记录上的状态字段更改为“完成”来完成。

我可以弄清楚如何添加我的新按钮,但我不确定如何以这种方式更新记录的状态。我可以找出 JavaScript 来进行 AJAX 调用并更新 UI,但我真的不知道将我的 AJAX POST 放到哪里以及类似的东西来更新记录。

我是否需要制作一个新的控制器,以便我有一个可以发布到的 URL?我希望有一个简单的解决方案,但如果不是,也许熟悉 SugarCRM 的人可以为我指明正确的方向?

我将不胜感激在这件事上的任何帮助,以使我更接近完成。

【问题讨论】:

  • 你用谷歌搜索过吗?如果是,那么 Google 搜索的结果与您想要的结果有什么区别?
  • @Jonast92 我当然有。不同之处在于没有固溶体。我希望其中一位 SugarCRM 大师可以为我指明正确的方向。我通过谷歌只找到了一篇文章,它是 2008 年的同一篇文章,一遍又一遍地重新发布,它需要使用付费插件,而且更像是一个 hack,而不是像我试图做的一个真正的解决方案。我相信答案可能是构建我自己的自定义控制器,然后我可以使用 AJAX 发出 POST 请求,但我更愿意从其他人那里获得一些输入,然后再浪费半天时间在错误的解决方案上
  • 很公平,只是真的想问这个“简单”的问题,即使你有 10 分,有时我只是觉得“我试过什么”和“我对现在的情况有什么了解那里以及为什么它不符合我的需求”部分丢失:)
  • 那里没有大量的 SugarCRM 信息,我是系统新手

标签: javascript php ajax sugarcrm


【解决方案1】:

您可以在自定义目录中的 JS 文件中创建您的 AJAX...

custom/modules/Project/javascript/ajax.js

function updateStatus(project_task_id) {
    if (project_task_id) {
        $.ajax({
            url: 'index.php?to_pdf=true&module=Project&action=ChangeProjectTaskStatus&id=' + project_task_id,
            success: function() {

            // Reload subpanel
            showSubPanel('projects_project_tasks', null, true);
        }
    });
}

然后创建一个新的PHP文件,动作匹配文件名……

custom/modules/Project/ChangeProjectTaskStatus.php

<?php
    if (!defined('sugarEntry') || !sugarEntry)
        die('Not A Valid Entry Point');

    $project_task = BeanFactory::getBean('ProjectTask');
    $project_task->retrieve($_GET['project_task_id']);

    // Update status logic goes here

    $project_task->save();

    exit();

【讨论】:

  • 我最终使用了这种方法,在我的 AJAX 请求成功回调时,我更新了页面中的几个项目,效果很好。我尚未克服的第一个问题是,当我使用 quickcreate 表单添加新项目时,重新加载子面板并且我丢失了当前从 process_record Hook 添加的所有格式。也许您对此有解决方案的想法?我要发布一个新问题
  • 我在 Karl 的回答中添加了一个编辑,但我想它还没有被批准。您应该能够使用以下内容重新加载子面板: showSubPanel('projects_project_tasks',null,true);并将 project_project_tasks 替换为子面板的关系名称。它将从服务器重新加载子面板,因此它应该处理您已有的格式。
  • @ChadHutchins 感谢分享我很好奇如何做到这一点。我已经做了一些测试,但似乎这毕竟不是我需要的解决方案。不幸的是,当我运行showSubPanel() 时,它似乎不会触发挂钩$hook_array['process_record'],因此它会使用我的更新记录重新加载子面板,但我会丢失通过该挂钩应用于记录的所有格式。我到处寻找解决方案,但它似乎是 Sugar 平台的一个缺陷。如果您对替代方案有任何想法,很想听听
  • @jasondavis 您可能想尝试为您的状态字段创建自定义 SugarField。然后 SugarCRM 将从 SugarField 定义生成视图。这将使您不必使用 process_record 挂钩来显示内容。然后您就可以根据需要使用 showSubPanel() 重新加载子面板。对于向子面板添加按钮,这可能会有所帮助:sugaroutfitters.com/blog/…
  • @ChadHutchins 谢谢乍得。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多