Получение данных с sharepoint в drupal - PullRequest
4 голосов
/ 16 марта 2010

Проблема:
Я собираюсь разработать сайт на Drupal для компании, которая хранит много данных в среде sharepoint (продукты, рецепты и т. Д.). Мне нужно как-то перенести эту информацию в мою систему на Drupal. Желательно сохранить его как друпальные узлы.
Эта информация также будет редактироваться / добавляться в систему sharepoint, поэтому помимо простого сохранения данных в drupal, она также должна будет регулярно проверять наличие обновлений.

Одной из идей решения является использование какого-то веб-сервиса для извлечения данных, но я понятия не имею, как это будет сделано в drupal.

Итак, мой вопрос (-ы): Кто-нибудь делал что-то подобное, если да, то как, или у кого-нибудь есть предложения, как поступить?

Любые ответы будут высоко оценены.

/ Андерс

Ответы [ 5 ]

3 голосов
/ 17 марта 2010

Я настоятельно рекомендую внимательно изучить модуль FeedAPI и его расширения .

Я успешно его использовал:

  • «из коробки» для создания узла из RSS-каналов
  • с небольшими изменениями для создания узла из содержимого веб-сервиса
  • как образец / пример для реализации пользовательского модуля, который создает узлы из содержимого другого Web-сервиса (некоторые особые потребности там, которые требовали пользовательского решения)

Если, как это звучит, у вас есть некоторый контроль над тем, как данные на sharepoint открываются, вы сможете успешно использовать FeedAPI без каких-либо изменений, но, возможно, вам потребуется реализовать собственное расширение синтаксического анализатора проверьте примеры уже написанных дополнительных модулей для расширения FeedAPI, если не решения).

2 голосов
/ 19 марта 2010

Мы сделали это на многих настроенных нами веб-сервисах, и скоро сделаем это и для Sharepoint. Как вы говорите, вы можете получить данные в формате XML. Так что вам просто нужно 1) Получить данные XML 2) Разобрать данные XML 3) Вернуть теперь читаемые данные в блоке в Drupal

Для 1 вам необходимо открыть любой доступ через брандмауэр и предоставить общедоступный XML-канал или установить его доступным только по IP-адресу сервера Drupal или некоторому другому механизму аутентификации. Для 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, но вы могли бы просто проанализировать XML в dom-документе, как показано выше, а затем выполнить цикл, создавая узел для каждого XML-узла, который соответствует вашим критериям.

И если вы хотите больше работы, проделанной для

Надеюсь, это было полезно. Не стесняйтесь спрашивать более подробно.

0 голосов
/ 18 марта 2010

SharePoint по умолчанию предоставляет веб-сервисы. Если у вас есть доступ к элементам на веб-сайте SharePoint, вы также должны иметь доступ к ним с помощью веб-сервисов. Не забывайте передавать правильные учетные данные пользователя при доступе к веб-сервисам из кода.

Если вам нужен только readaccess в Drupal, вы также можете использовать RSS-каналы. С RSS-лентами может быть немного сложнее отфильтровать, отсортировать или найти конкретный элемент.

Чтение непосредственно из базы данных не рекомендуется, так как Microsoft не гарантирует, что между обновлениями программного обеспечения будет оставаться та же самая датахема

0 голосов
/ 17 марта 2010

Вы можете определенно поговорить с ним через веб-сервисы. Ранее мы подключали сайт Drupal к MS Great Plains.

0 голосов
/ 16 марта 2010

Sharepoint сохраняет данные в базе данных MS SQL, верно? Мой коллега написал хорошее описание процесса, который мы использовали при переносе данных из MS SQL в Drupal .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...