站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
▼
建站程序
开发
服务器
办公软件
开发教程
▼
服务器教程
软件使用教程
运营教程
热门电子书
▼
CSS教程
WordPress教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
热点词条
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
使用SugarCRM连接器连接数据与外部世界
”
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
<span style="text-align:center;border:1px solid #000;float:right;padding:6px;"><strong>导航:</strong> [[SugarCRM|上一页]]|{{template:开发语言导航}}</span> <div style="clear:both;"></div> 如何将其连接到一个已经存在的[[应用程序]]?典型的解决方案是提供某种[[API]],以常量[[编程]]接口(constant programmatic interface)的形式提供应用程序功能或[[数据]],开发人员可以使用这个接口来连接到该应用程序。 这个解决方案解决了如何连接到一个应用程序的问题,但没有解决这个问题的另一半:如何将您的应用程序连接到另一个应用程序。对于SugarCRM,这个问题通过连接器框架得以解决。 这个连接器框架提供一种标准方法,以通过 REST 或 SOAP Web 服务连接您的 SugarCRM 记录与另一个应用程序中的数据。SugarCRM中默认提供的LinkedIn Connector就是这样一个例子,它提供 SugarCRM 细节记录中的 Accounts 和 Contacts 的 LinkedIn 查询。 下面展示了应用程序中的交互情况: [[Image:Fig01.jpg]] 上面展示了和 Accounts 模块的集成。要触发这个连接器,只需将鼠标光标悬停在 Accounts 旁边的 LinkedIn 图标上方,这个操作将执行一个快速 LinkedIn 搜索,查看给定公司有多少连接。作为这个小部件的一部分,它还提供到这些连接的概要页面的[[链接]]。 ==构建Google News连接器== Google News是一个新闻聚合服务,它从全世界大量不同的新闻机构和在线网站抓取新闻,然后将这些新闻显示在一个便于搜索的统一站点中。连接到这个服务的连接器是非常有用的 SugarCRM附件:当SugarCRM用户检查一个Account记录时,可以快速查看关于该记录的最新新闻条目。 对于这个Google News连接器,使用Google AJAX Search API来连接到Google News,这是一个非常方便、非常轻量级和简单易用的API。为使[[JavaScript]]端更简单,我们将使用[[Iframe]]集成,其中一个完全样式化的[[HTML]]小部件将包含在一个iframe中返回到客户机。这样,就可以专注于需要添加到SugarCRM的代码段,从而使一切按计划进行。 首先,为您即将创建的连接器添加几个配置和映射文件,以及向用户显示连接器数据的显示模板。下图展示了添加这个新的Google News连接器所需的目录布局。 [[Image:Fig02.jpg]] 为了使连接器 “升级安全”(即主SugarCRM应用程序的升级不会影响自定义代码修改),必须将所有连接器文件放置到custom/文件夹中。还要注意一点:如果应用程序中已激活 LinkedIn连接器,custom/modules/Connectors/ 文件夹中可能有一个metadata/文件夹,这个文件夹中包含一个已发现连接器的[[注册表]]。这个文件夹需要删除,以便应用程序能够发现您新添加的自定义连接器。 ==Source== 连接器分为两个部分。source 部分控制连接器的配置,从[[Web]]服务获取数据,并将现有SugarCRM模块字段映射到远程Web服务使用的字段。连接器的第二个部分是formatter。source 部分包含几个不同的文件,如下是config.php文件(custom/modules/Connectors/sources/ext/rest/googlenews/config.php) <?php $config = array ( 'name' => 'Google News', 'properties' => array(), ); 这个文件定义连接器名称,以及连接器可能需要的任何属性。通常,这些Web服务需要某种API键。这个API键必须作为请求的一部分提供给 Web 服务,因此您可以在这个文件中定义它。但是,对于您正在使用的 Google AJAX Search API,则不需要其他特殊配置,只需指定连接器名称和空的属性数组。 检查vardefs.php(custom/modules/Connectors/sources/ext/rest/googlenews/vardefs.php),该文件定义连接器提供的字段。 <pre><?php $dictionary['ext_rest_googlenews'] = array( 'comment' => 'vardefs for google news connector', 'fields' => array ( 'id' => array ( 'name' => 'id', 'vname' => 'LBL_ID', 'type' => 'id', 'comment' => 'Unique identifier', 'hidden' => true, ), 'name'=> array( 'name' => 'name', 'vname' => 'LBL_NAME', 'type' => 'varchar', 'hover' => true, 'comment' => 'The name of the company', ), ) ); </pre> 这个Google News连接器将查询Accounts记录的name字段,因此,您需要将这个字段和该记录的id字段指定为一个字段,该字段将用于调用Web服务,以便发现该Account的Google News结果。 关联Account和连接器的奇妙之处出现在mappings.php(custom/modules/Connectors/sources/ext/rest/googlenews/mapping.php)文件中 <pre><?php $mapping = array ( 'beans' => array ( 'Accounts' => array ( 'name' => 'name', 'id' => 'id', ), ), ); </pre> 上面内容展示了如何将字段从连接器映射到相关模块。在本例中,您请求了连接器的 name 字段,该字段的值与Accounts模块中的name 段的值相同。同样,连接器的id字段映射到Accounts模块的 id 字段。 然后,您需要添加 rest source 类的一个实例,以便连接器可以完全发挥作用。检查custom/modules/Connectors/sources/ext/rest/googlenews/googlenews.php,了解如何针对您的连接器处理该实例。 由于您将使用 Google AJAX Search API(它完全基于 JavaScript/[[浏览器]]),而不会使用在这个source类中的任何内置功能,因此您只需执行需要的调用。 <pre><?php require_once('include/connectors/sources/ext/rest/rest.php'); class ext_rest_googlenews extends ext_rest { public function __construct() { parent::__construct(); $this->_enable_in_wizard = false; $this->_enable_in_hover = true; } /* * getItem * * As the google news connector does not have a true API call, you simply * override this abstract method */ public function getItem($args=array(), $module=null) {} /* * getList * * As the google news connector does not have a true API call, you simply * override this abstract method */ public function getList($args=array(), $module=null) {} } </pre> 最后,为您的连接器中使用的一个语言字符串添加一个语言定义文件:.../Connectors/connectors/sources/ext/rest/googlenews/language/en_us.lang.php ,这将指定 vardefs.php 文件中使用的 name 字段的字段名称。 <?php $connector_strings = array ( 'LBL_NAME' => 'Company Name', ); 至此,您已经为这个连接器构建了源映射和配置。现在,可以使用 formatters 来显示从Web服务提取的数据。 ==Formatter== 连接器的另一部分称为formatter,用于向用户显示连接器数据。首先创建一个扩展default_formatter类的定义文件,并添加必要的代码片段以在一个细节视图中显示连接器数据。这个文件根据这个连接器命名( custom/modules/Connectors/formatters/ext/rest/googlenews/googlenews.php) <pre><?php require_once('include/connectors/formatters/default/formatter.php'); class ext_rest_googlenews_formatter extends default_formatter { public function getDetailViewFormat() { $mapping = $this->getSourceMapping(); $mapping_name = !empty($mapping['beans'][$this->_module]['name']) ? $mapping['beans'][$this->_module]['name'] : ''; if(!empty($mapping_name)) { $this->_ss->assign('mapping_name', $mapping_name); return $this->fetchSmarty(); } $GLOBALS['log']->error($GLOBALS['app_strings']['ERR_MISSING_MAPPING _ENTRY_FORM_MODULE']); return ''; } public function getIconFilePath() { return 'custom/modules/Connectors/connectors/formatters/ext/rest /googlenews/tpls/googlenews.gif'; } } </pre> 上面代码中定义的两个函数由DetailView元数据框架调用,以便将连接器实际呈现在表单中。getIconFilePath() 返回链接到(连接器正在连接的) DetailView 表单中字段旁边的图标的 URL。然后,getDetailViewFormat() 处理这个小部件表单的呈现,这个表单在您将鼠标光标悬停在图标上方时显示。以下代码展示了这个连接器小部件的[[Smarty]]模板。 <pre> <div style="visibility:hidden;" id="googlenews_popup_div"></div> <script type="text/javascript" src="{sugar_getjspath file='include/connectors/formatters/default/company_detail.js'}"></script> <script type="text/javascript"> function show_ext_rest_googlenews(event) {literal} { var xCoordinate = event.clientX; var yCoordinate = event.clientY; var isIE = document.all?true:false; if(isIE) { xCoordinate = xCoordinate + document.body.scrollLeft; yCoordinate = yCoordinate + document.body.scrollTop; } {/literal} cd = new CompanyDetailsDialog("googlenews_popup_div", '<iframe height="90px" width="728px" frameborder="0" marginheight=0 marginwidth=0 scrolling="no" src="http://www.google.com/uds/modules/elements /newsshow/iframe.html?rsz=small&q={$fields.{{$mapping_name}}.value} &format=728x90"></iframe>', xCoordinate, yCoordinate); cd.setHeader("{$fields.{{$mapping_name}}.value}"); cd.display(); {literal} } {/literal} </script> </pre> 需要定义JavaScript函数show_ext_rest_googlenews(),这个函数在鼠 标光标悬停在 DetailView 中的图标上方时触发。这个 JavaScript 函数处理包含该小部件内容的弹出对话框的呈现,还对Web服务进行外部调用,并在这个弹出对话框中显示其结果。然后,呈现的代码初始化弹出窗口,将标题设置为当前记录的名称,最后使用从当前记录传递的公司名称进行API调用,构建一个iframe。下图展示了上述过程。 * 正在运行的 Google News 连接器 [[Image:Fig03.jpg]] 现在,您已经构建了一个功能齐备的连接器。当您的鼠标光标悬停于Account名称旁边的新闻图标上时,这个连接器将从Google News提取关于该Account的数据。您也可以对应用程序中的其他模块添加这个功能,只需在mapping.php文件中添加另一个模块条目,将记录映射到连接器。SugarCRM 还在其 Admin 区域中的 Connector Settings 选项下面提供了一个图形方法来完成这个任务,只需单击那个屏幕中的Connector Settings选项,更改可以获取这个新闻图标的模块,如下图所示: [[Image:Fig04.jpg]] 下一步是为添加的模块映射字段,在Connector Settings下的Map Connector Fields页面中进行操作,如下图所示: [[Image:Fig05.jpg]] 对于连接器中的每个字段,使用下拉选择器来选择模块使用的字段,在两个实体间建立映射关系。可以对可用连接器的每个不同模块进行不同的映射。 ==总结== 本条目介绍了SugarCRM连接器框架,它提供了一种方法来从您的应用程序内部连接到外部数据源。这种集成外部应用程序的方法与传统方法大不相同。在传统方法中,应用程序在其内部提供一些外部hook,供其他应用程序使用。在检查了SugarCRM提供的LinkedIn连接器之后,您逐步浏览了定义过程,了解了如何使用Google AJAX Search APIs来构建自己的 Google News连接器。最后,构建了一个功能齐备的Google News连接器,用于显示查看的Account的新闻结果。 ==参考来源== [http://www.ibm.com/developerworks/cn/xml/x-sugarcrmcon 参考来源] [[category:SugarCRM|X]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)
本页使用的模板:
模板:开发语言导航
(
编辑
)