2010-03-16 49 views
4

問題:
我正在爲一家公司開發一個Drupal網站,這家公司在sharepoint環境(產品,食譜等等)中存儲大量數據。我需要以某種方式將這些信息輸入到我的Drupal系統中。最好將它保存爲drupal節點。
這些信息也會在sharepoint系統中編輯/添加,因此除了將數據保存到drupal之外,它還必須定期檢查更新。從sharepoint獲取數據到drupal

解決方案的一個想法是使用某種網絡服務來檢索數據,但我不知道如何在drupal中完成這項工作。

所以我的問題是:有沒有人做過這樣的事情,如果有的話,或者沒有人會有這樣的建議嗎?

任何答案將不勝感激。

/Anders

回答

3

我強烈建議仔細看看FeedAPI module and it's extensions

我已經成功地使用它:

  • 「出的現成」從RSS節點創建與web服務的內容爲節點創建稍作修改飼料
  • 作爲自定義模塊實現的藍圖/示例,該實現從另一個Web服務的內容創建節點(一些需要定製解決方案的非常特殊的需求)

如果像這樣您可以控制共享點數據的暴露方式,您應該可以成功地使用FeedAPI而不做任何修改,但也許您需要實現自己的解析器擴展(再次檢查已寫入的其他模塊例如擴展FeedAPI,如果不是解決方案)。

+0

好的建議。我嘗試了FeedAPI的升級版本(簡稱爲Feeds),這幾乎就是我一直在尋找的東西。唯一的問題是,我需要它來解析XML提要。它處理RSS/atom和CSV,但不處理XML。如果你(或者任何人)知道一種方法來讓它從XML創建節點,那對我會有很大的幫助。無論如何非常感謝你。 /Anders – andersandersson666 2010-03-17 13:56:22

+1

@ andersandersson666:RSS和ATOM提要已經是XML了,所以你根本沒有在尋找一種通常從XML創建節點的方法,而是根據Web服務輸出的模式從XML創建節點」。這就是我最後一段的目標 - 您可以嘗試配置您的SharePoint服務器以提供FeedAPI能夠理解的格式提供內容,或者您​​需要爲FeedAPI模塊實施定製解析器插件,該模塊「理解/翻譯'您的Web服務當前提供的XML。 – 2010-03-17 14:56:43

0

你絕對可以通過網絡服務與之交談。我們之前已將一個Drupal站點連接到MS Great Plains。

0

默認情況下,SharePoint提供了webservices。如果您有權訪問SharePoint網站中的項目,則還應該能夠使用Web服務訪問它們。記住在從代碼訪問Web服務時傳遞正確的用戶憑證。

如果您只需在Drupal中使用readaccess,您還可以使用rss提要。 rss提要過濾,排序或查找特定項目可能會有點困難。

不建議直接從數據庫讀取數據,因爲Microsoft不保證數據模式在軟件更新之間保持不變。

2

我們已經在我們已經建立的許多Web服務上做了這些工作,並且很快也會爲Sharepoint做到這一點。正如你所說,你可以用XML獲取數據。所以,你只需要 1)檢索XML數據 2)解析XML數據 3)返回現在可讀的數據塊在Drupal

對於1,你需要打開任何防火牆的訪問,並提供一個公開可讀XML提要或將其設置爲只能通過Drupal服務器的IP或其他身份驗證機制訪問。 2PHP爲您提供了許多關於如何解析XML的選項。我們創建了一個模塊來處理XML服務,然後我們從另一個處理顯示,主題等的模塊中調用它。下面我將首先提供來自XML模塊的兩個函數的示例,然後舉例說明可能會在另一個模塊中使用它。

這是來自XML模塊。

/** 
* Retrieving XML data from the URL 
* 
* @param $url 
* The url to retrieve the data 
* @param $replace_special_characters 
* Replace special character to HTML format 
* 
* @return parse result as struct 
*/ 
function xmlservice_parse($url, $replace_special_characters = FALSE) { 
    $http_contents = drupal_http_request($url); 
    if (!isset($http_contents->data)) { 
     throw new RuntimeException("Cannot get contents from the URL"); 
    }//if 

    if($replace_special_characters) 
     $http_contents_data = str_replace('&','&', $http_contents->data); 
    else 
     $http_contents_data = $http_contents->data; 

    $xml_parser = xml_parser_create(); 
    xml_parse_into_struct($xml_parser, $http_contents_data, $result); 
    xml_parser_free($xml_parser); 

    return $result; 
} 

/** 
* Retrieving XML data as Dom document from the URL 
* 
* @param $url 
* The url to retrieve the data 
* @param $replace_special_characters 
* Replace special character to HTML format 
* 
* @return result as Dom Document 
*/ 
function xmlservice_parse_to_dom($url, $replace_special_characters = FALSE) { 
    $http_contents = drupal_http_request($url); 
    if (isset($http_contents->error)) { 
     throw new RuntimeException($http_contents->error); 
    }//if 
    if (!isset($http_contents->data)) { 
     throw new RuntimeException("Cannot get contents from the URL"); 
    }//if 

    if($replace_special_characters){ 
     $http_contents_data = str_replace('&','&', $http_contents->data); 
    }//if 
    else{ 
     $http_contents_data = $http_contents->data; 
    }//else 

    $dom_document = new DomDocument; 
    /* load htmlinto object */ 
    $dom_document->loadXML($http_contents_data); 
    /* discard white space */ 
    $dom_document->preserveWhiteSpace = false; 

    return $dom_document; 
} 

然後,只需編寫代碼來創建一個塊。如果你不知道該怎麼做,請查看http://www.nowarninglabel.com/home/creating-a-new-custom-module-in-drupal-6,它會創建一個簡單的塊。然後,對於內容,您可以在XML文檔中調用上述函數之一,例如$ content = xml_service_parse('http://sharepoint.example.com/some/thing/feed.xml');

如果你想解析爲一個節點,你可以只使用XML功能,而是使用node_save()以編程方式創建一個節點:http://api.drupal.org/api/function/node_save 我沒有看過可用的SharePoint Services的太多了,但你可能只是將XML解析爲如上所示的dom文檔,然後通過循環創建一個適合每個符合條件的XML節點的節點。

如果你想要更多的

希望所做的工作,這是有幫助的。隨意詢問更多細節。