WIKI使用導航
站長百科導航
站長專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機
- cPanel
- 網(wǎng)址導航專題
- 云計算
- 微博營銷
- 虛擬主機管理系統(tǒng)
- 開放平臺
- WIKI程序與應用
- 美國十大主機
使用SugarCRM連接器連接數(shù)據(jù)與外部世界
導航: 上一頁|ASP | PHP | JSP | HTML | CSS | XHTML | aJAX | Ruby | JAVA | XML | Python | ColdFusion
如何將其連接到一個已經(jīng)存在的應用程序?典型的解決方案是提供某種API,以常量編程接口(constant programmatic interface)的形式提供應用程序功能或數(shù)據(jù),開發(fā)人員可以使用這個接口來連接到該應用程序。
這個解決方案解決了如何連接到一個應用程序的問題,但沒有解決這個問題的另一半:如何將您的應用程序連接到另一個應用程序。對于SugarCRM,這個問題通過連接器框架得以解決。
這個連接器框架提供一種標準方法,以通過 REST 或 SOAP Web 服務連接您的 SugarCRM 記錄與另一個應用程序中的數(shù)據(jù)。SugarCRM中默認提供的LinkedIn Connector就是這樣一個例子,它提供 SugarCRM 細節(jié)記錄中的 Accounts 和 Contacts 的 LinkedIn 查詢。
下面展示了應用程序中的交互情況:
上面展示了和 Accounts 模塊的集成。要觸發(fā)這個連接器,只需將鼠標光標懸停在 Accounts 旁邊的 LinkedIn 圖標上方,這個操作將執(zhí)行一個快速 LinkedIn 搜索,查看給定公司有多少連接。作為這個小部件的一部分,它還提供到這些連接的概要頁面的鏈接。
構建Google News連接器[ ]
Google News是一個新聞聚合服務,它從全世界大量不同的新聞機構和在線網(wǎng)站抓取新聞,然后將這些新聞顯示在一個便于搜索的統(tǒng)一站點中。連接到這個服務的連接器是非常有用的 SugarCRM附件:當SugarCRM用戶檢查一個Account記錄時,可以快速查看關于該記錄的最新新聞條目。
對于這個Google News連接器,使用Google AJAX Search API來連接到Google News,這是一個非常方便、非常輕量級和簡單易用的API。為使JavaScript端更簡單,我們將使用Iframe集成,其中一個完全樣式化的HTML小部件將包含在一個iframe中返回到客戶機。這樣,就可以專注于需要添加到SugarCRM的代碼段,從而使一切按計劃進行。
首先,為您即將創(chuàng)建的連接器添加幾個配置和映射文件,以及向用戶顯示連接器數(shù)據(jù)的顯示模板。下圖展示了添加這個新的Google News連接器所需的目錄布局。
為了使連接器 “升級安全”(即主SugarCRM應用程序的升級不會影響自定義代碼修改),必須將所有連接器文件放置到custom/文件夾中。還要注意一點:如果應用程序中已激活 LinkedIn連接器,custom/modules/Connectors/ 文件夾中可能有一個metadata/文件夾,這個文件夾中包含一個已發(fā)現(xiàn)連接器的注冊表。這個文件夾需要刪除,以便應用程序能夠發(fā)現(xiàn)您新添加的自定義連接器。
Source[ ]
連接器分為兩個部分。source 部分控制連接器的配置,從Web服務獲取數(shù)據(jù),并將現(xiàn)有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,則不需要其他特殊配置,只需指定連接器名稱和空的屬性數(shù)組。
檢查vardefs.php(custom/modules/Connectors/sources/ext/rest/googlenews/vardefs.php),該文件定義連接器提供的字段。
<?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', ), ) );
這個Google News連接器將查詢Accounts記錄的name字段,因此,您需要將這個字段和該記錄的id字段指定為一個字段,該字段將用于調用Web服務,以便發(fā)現(xiàn)該Account的Google News結果。
關聯(lián)Account和連接器的奇妙之處出現(xiàn)在mappings.php(custom/modules/Connectors/sources/ext/rest/googlenews/mapping.php)文件中
<?php $mapping = array ( 'beans' => array ( 'Accounts' => array ( 'name' => 'name', 'id' => 'id', ), ), );
上面內(nèi)容展示了如何將字段從連接器映射到相關模塊。在本例中,您請求了連接器的 name 字段,該字段的值與Accounts模塊中的name 段的值相同。同樣,連接器的id字段映射到Accounts模塊的 id 字段。
然后,您需要添加 rest source 類的一個實例,以便連接器可以完全發(fā)揮作用。檢查custom/modules/Connectors/sources/ext/rest/googlenews/googlenews.php,了解如何針對您的連接器處理該實例。 由于您將使用 Google AJAX Search API(它完全基于 JavaScript/瀏覽器),而不會使用在這個source類中的任何內(nèi)置功能,因此您只需執(zhí)行需要的調用。
<?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) {} }
最后,為您的連接器中使用的一個語言字符串添加一個語言定義文件:.../Connectors/connectors/sources/ext/rest/googlenews/language/en_us.lang.php ,這將指定 vardefs.php 文件中使用的 name 字段的字段名稱。
<?php $connector_strings = array ( 'LBL_NAME' => 'Company Name', );
至此,您已經(jīng)為這個連接器構建了源映射和配置?,F(xiàn)在,可以使用 formatters 來顯示從Web服務提取的數(shù)據(jù)。
Formatter[ ]
連接器的另一部分稱為formatter,用于向用戶顯示連接器數(shù)據(jù)。首先創(chuàng)建一個擴展default_formatter類的定義文件,并添加必要的代碼片段以在一個細節(jié)視圖中顯示連接器數(shù)據(jù)。這個文件根據(jù)這個連接器命名( custom/modules/Connectors/formatters/ext/rest/googlenews/googlenews.php)
<?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'; } }
上面代碼中定義的兩個函數(shù)由DetailView元數(shù)據(jù)框架調用,以便將連接器實際呈現(xiàn)在表單中。getIconFilePath() 返回鏈接到(連接器正在連接的) DetailView 表單中字段旁邊的圖標的 URL。然后,getDetailViewFormat() 處理這個小部件表單的呈現(xiàn),這個表單在您將鼠標光標懸停在圖標上方時顯示。以下代碼展示了這個連接器小部件的Smarty模板。
<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>
需要定義JavaScript函數(shù)show_ext_rest_googlenews(),這個函數(shù)在鼠 標光標懸停在 DetailView 中的圖標上方時觸發(fā)。這個 JavaScript 函數(shù)處理包含該小部件內(nèi)容的彈出對話框的呈現(xiàn),還對Web服務進行外部調用,并在這個彈出對話框中顯示其結果。然后,呈現(xiàn)的代碼初始化彈出窗口,將標題設置為當前記錄的名稱,最后使用從當前記錄傳遞的公司名稱進行API調用,構建一個iframe。下圖展示了上述過程。
- 正在運行的 Google News 連接器
現(xiàn)在,您已經(jīng)構建了一個功能齊備的連接器。當您的鼠標光標懸停于Account名稱旁邊的新聞圖標上時,這個連接器將從Google News提取關于該Account的數(shù)據(jù)。您也可以對應用程序中的其他模塊添加這個功能,只需在mapping.php文件中添加另一個模塊條目,將記錄映射到連接器。SugarCRM 還在其 Admin 區(qū)域中的 Connector Settings 選項下面提供了一個圖形方法來完成這個任務,只需單擊那個屏幕中的Connector Settings選項,更改可以獲取這個新聞圖標的模塊,如下圖所示:
下一步是為添加的模塊映射字段,在Connector Settings下的Map Connector Fields頁面中進行操作,如下圖所示:
對于連接器中的每個字段,使用下拉選擇器來選擇模塊使用的字段,在兩個實體間建立映射關系??梢詫捎眠B接器的每個不同模塊進行不同的映射。
總結[ ]
本條目介紹了SugarCRM連接器框架,它提供了一種方法來從您的應用程序內(nèi)部連接到外部數(shù)據(jù)源。這種集成外部應用程序的方法與傳統(tǒng)方法大不相同。在傳統(tǒng)方法中,應用程序在其內(nèi)部提供一些外部hook,供其他應用程序使用。在檢查了SugarCRM提供的LinkedIn連接器之后,您逐步瀏覽了定義過程,了解了如何使用Google AJAX Search APIs來構建自己的 Google News連接器。最后,構建了一個功能齊備的Google News連接器,用于顯示查看的Account的新聞結果。