久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

使用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 查詢。

下面展示了應用程序中的交互情況:

Fig01.jpg

上面展示了和 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連接器所需的目錄布局。

Fig02.jpg

為了使連接器 “升級安全”(即主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 連接器

Fig03.jpg

現(xiàn)在,您已經(jīng)構建了一個功能齊備的連接器。當您的鼠標光標懸停于Account名稱旁邊的新聞圖標上時,這個連接器將從Google News提取關于該Account的數(shù)據(jù)。您也可以對應用程序中的其他模塊添加這個功能,只需在mapping.php文件中添加另一個模塊條目,將記錄映射到連接器。SugarCRM 還在其 Admin 區(qū)域中的 Connector Settings 選項下面提供了一個圖形方法來完成這個任務,只需單擊那個屏幕中的Connector Settings選項,更改可以獲取這個新聞圖標的模塊,如下圖所示:

Fig04.jpg

下一步是為添加的模塊映射字段,在Connector Settings下的Map Connector Fields頁面中進行操作,如下圖所示:

Fig05.jpg

對于連接器中的每個字段,使用下拉選擇器來選擇模塊使用的字段,在兩個實體間建立映射關系??梢詫捎眠B接器的每個不同模塊進行不同的映射。

總結[ ]

本條目介紹了SugarCRM連接器框架,它提供了一種方法來從您的應用程序內(nèi)部連接到外部數(shù)據(jù)源。這種集成外部應用程序的方法與傳統(tǒng)方法大不相同。在傳統(tǒng)方法中,應用程序在其內(nèi)部提供一些外部hook,供其他應用程序使用。在檢查了SugarCRM提供的LinkedIn連接器之后,您逐步瀏覽了定義過程,了解了如何使用Google AJAX Search APIs來構建自己的 Google News連接器。最后,構建了一個功能齊備的Google News連接器,用于顯示查看的Account的新聞結果。

參考來源[ ]

參考來源