SugarCRM从外部REST服务获取数据到子面板

时间:2014-09-12 09:50:05

标签: rest sugarcrm

我尝试在Account详细信息视图中创建子面板,其中元素列表是从外部REST服务获取的。

我知道如何定义subpanel,但不知道如何用来自外部网络源的数据填充它。尝试使用get_subpanel_data,但我只能更改SQL

任何想法我该怎么做?

2 个答案:

答案 0 :(得分:2)

当我在过去做过这个时,至少在Sugar 6中,我明显选择不尝试创建一个真正的子面板。正在加载的数据来自外部源并随页面动态加载,那么为什么要将它呈现为来自Sugar的静态数据呢?相反,我创建了一个自定义Smarty模板,用作详细信息页面上的页脚。对于这样的示例,您可以在“呼叫编辑视图”中查看其工作方式。我认为这是footerTpldetailviewdefs.php中的editviewdefs.php参数。我通过为我的模块创建自定义详细信息视图来加载智能模板,因此custom/modules/MyModule/views/view.detail.php - 扩展基本详细信息视图类并覆盖显示以提供Smarty新参数,然后您的Smarty模板只需要迭代并呈现您的视图定义的数据。

要超级谦逊并遵守MVC,您甚至可以将自定义代码放入您的bean(如果它是自定义模块)或自定义控制器方法,然后从view.detail.php引用它,并且仍然从那里喂它到Smarty模板。

或者,您可以将JavaScript加载到Smarty模板中,并使用JavaScript调用第三方服务,解析并呈现它等。

答案 1 :(得分:1)

我意识到这个问题现在有点老了,但它经常出现,所以为什么不提供几个可能的解决方案的答案。我不会进入代码,但更多的是关于它如何工作的设计理论。如果有人需要更具体的代码帮助,那么这是另一个问题。

一些想法......

  1. 正如您所提到的,您可以定义一个自定义函数,该函数将从您自己的SQL查询中将数据加载到SubPanel。这是我最近在了解了一年半之后最终投入使用的一种方法。
  2. 当您走这条路线时,您将无法使用子面板中的列。我假设它使用实际的元数据文件来确定子面板可以使用哪些字段列,因此您非常需要数据库表中的自定义数据具有与子面板元数据中定义的字段相同的列名。

    显然,这在适当的情况下效果很好,但并非总是如此,这导致我们进入我所知道的第二种方法。

    1. 另一种方式是他的回答中提到的 @Mattew-Poer 。这意味着完全放弃SubPanel,而是生成自己的HTML。到目前为止,这是我最喜欢和最喜欢的方式,我已经成为一些非常自定义的模块,因为这可以在自定义模块中实现!我将在下面展示一个例子。
    2. (Click HERE to View full size image)

      enter image description here enter image description here

      在屏幕截图中,您可以在此示例中看到我在SubPanel上看到了类似的内容,但它不是灵活且易于自定义的。

      例如,我的假子面板中最左边的列是图像复选框。单击时,会发出AJAX请求以更改任务行Status

      之后,复选框图片会更新以指示新的状态状态,Modified DateTime已更新,Status列具有彩色背景SPANS,并且还会使用正确的文字进行更新单击左侧复选框时的背景颜色。

      使用标准SubPanel执行任何操作都是一个完整的噩梦,并且在构建自己的SubPanel版本时,很难做一些您可以做的事情。

      话虽如此,我使用SugarCRM默认的SubPanels构建了上述截图的相同克隆!这是一场噩梦。我可以轻松更新某些列中的内容和HTML。我甚至有AJAX点击复选框图像来更新并执行我上面提到的所有其他更新。它并不太难,工作得相当好,但它有一些问题。

      • 进行内联编辑,内联创建记录或子面板分页以加载不同的记录集。然后,您将丢失所有应用的自定义HTML格式。原因是,在SubPanel中,您只能使用After UI加载逻辑钩子。所以,因为" Page"当一个AJAX请求添加/编辑子面板内容或使用分页链接加载一组新项目时,已加载。它仅在这些事件上加载SubPanel内容,并且不会重新加载整个页面内容。由于逻辑挂钩仅在页面加载后触发1次,因此新加载的子面板数据不会接收任何自定义HTML格式。

      就我而言,这意味着漂亮的彩色背景状态跨度会丢失,图像复选框会丢失,而其他一些功能也会丢失。

      现在为了获得超级技术,我本可以进入另一条第三条路线,而是为每个SubPanel提交新的Custom Field Types,我需要将自定义HTML应用到。根据我的经验,这个过程非常困难,在某些情况下,它确实不是最佳解决方案。

      由于解释的原因,这就是我的新模块使用Custom HTML route生成我自己版本的自定义子面板或模块页面中需要的任何数据的原因!到目前为止,它的工作效果比我想象的还要好,并为我打开了构建自定义SugarCRM模块的大门,我之前因为上面提到的一些问题而无法实现这些模块。现在我完全绕过它们并打开门做几乎任何事情!

      我现在正在为SugarCRM做一些非常酷的事情。如果有任何人有任何问题,请随时在新问题中提问或亲自在此发表评论。