2010-03-16 5 views
4

Le problème:
Je suis sur le point de développer un site Drupal pour une entreprise qui stocke beaucoup de données dans un environnement sharepoint (produits, recettes etc ...). J'ai besoin d'obtenir cette information dans mon système Drupal d'une manière ou d'une autre. Préférer de préférence en tant que noeuds drupal.
Cette information sera également éditée/ajoutée dans le système de partage, donc en plus de sauvegarder les données dans drupal, il faudra également vérifier les mises à jour régulièrement.Récupérer des données de sharepoint dans drupal

Une idée pour une solution est d'utiliser une sorte de service web pour récupérer des données, mais je n'ai aucune idée de la façon dont cela serait fait dans drupal. Donc ma question (s) est: Quelqu'un at-il fait quelque chose comme ça, si oui comment, ou quelqu'un a-t-il des suggestions sur la façon de procéder?

Toutes les réponses seraient très appréciées.

/Anders

Répondre

3

Je recommande fortement de regarder de plus près le FeedAPI module and it's extensions.

Je l'ai utilisé avec succès:

  • 'out-of-the-box' pour la création de nœuds de flux RSS
  • avec de légères modifications pour la création de noeud à partir du contenu d'un Webservice
  • comme un plan/exemple pour une implémentation de module personnalisé qui crée des nœuds à partir du contenu d'un autre Webservice (certains besoins très spéciaux nécessitant une solution personnalisée)

Si, en tant que tel unds, vous avez un certain contrôle sur la façon dont les données sharepoint sont exposées, vous devriez pouvoir utiliser FeedAPI sans aucune modification, mais vous devrez peut-être implémenter votre propre extension d'analyseur (encore une fois, vérifiez les modules supplémentaires déjà écrits étendre FeedAPI pour des exemples, sinon des solutions). Par défaut, SharePoint expose les services Web.

+0

Bonne suggestion. J'ai essayé la version améliorée de FeedAPI (juste appelé Feeds), et c'est presque exactement ce que je cherchais. Le seul problème est que j'en ai besoin pour analyser un flux XML. Il gère RSS/Atom et CSV, mais pas XML. Si vous (ou n'importe qui) connaissez un moyen de l'obtenir pour créer des noeuds à partir d'un XML, cela m'aiderait beaucoup. Merci beaucoup de toute façon. /Anders – andersandersson666

+1

@ andersandersson666: Les flux RSS et ATOM sont déjà XML, donc vous ne cherchez pas un moyen de créer des noeuds 'à partir de XML en général', mais plutôt de créer des noeuds à partir du XML selon le schéma de votre sortie Webservice '. C'est ce que mon dernier paragraphe vise - vous pouvez soit essayer de configurer votre serveur sharepoint pour offrir le contenu dans un format que FeedAPI comprend, ou vous devrez implémenter un plugin d'analyseur personnalisé pour le module FeedAPI qui 'comprend/traduit le XML actuellement offert par votre Webservice. –

0

Vous pourriez certainement en parler via les services Web. Nous avons déjà connecté un site Drupal à MS Great Plains.

0

Si vous avez accès aux éléments du site Web SharePoint, vous devez également pouvoir y accéder en utilisant les services Web. Gardez à l'esprit de transmettre les informations d'identification de l'utilisateur correct lors de l'accès aux services Web à partir du code.

Si vous avez seulement besoin de readaccess dans Drupal, vous pouvez également utiliser les flux rss. Il peut être un peu plus difficile avec les flux rss de filtrer, trier ou trouver un élément spécifique.

Il n'est pas recommandé de lire directement à partir de la base de données, car Microsoft ne garantit pas que le schéma de données demeurera le même entre les mises à jour logicielles.

2

Nous l'avons fait sur de nombreux services Web que nous avons mis en place, et le ferons bientôt aussi pour Sharepoint. Comme vous le dites, vous pouvez obtenir les données en XML.Donc, il vous suffit de 1) Récupérer les données XML 2) analyser les données XML 3) renvoient les données maintenant lisibles dans un bloc dans Drupal

Pour 1 vous avez besoin d'ouvrir un accès pare-feu et de fournir un public lisible Flux XML ou définissez-le uniquement accessible par l'adresse IP du serveur Drupal ou un autre mécanisme d'authentification. Pour 2PHP vous donne beaucoup d'options sur la façon d'analyser le XML. Nous avons créé un module pour gérer le service XML, puis nous l'appelons d'un autre module qui gère l'affichage, le thème, etc. Ci-dessous, je vais fournir un exemple de deux fonctions du module XML, puis un exemple de comment vous pourrait l'utiliser dans un autre module.

Voici le module 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; 
} 

Ensuite, il suffit d'écrire votre code pour créer un bloc. Si vous ne savez pas comment faire cela, consultez http://www.nowarninglabel.com/home/creating-a-new-custom-module-in-drupal-6 qui crée un bloc simple. Ensuite, pour le contenu, vous pouvez simplement appeler l'une des fonctions ci-dessus sur un document XML, par exemple $ content = xml_service_parse ('http://sharepoint.example.com/some/thing/feed.xml');

Si vous voulez analyser dans un nœud, vous pouvez simplement utiliser la fonction XML, mais plutôt utiliser node_save() pour créer par programme un nœud: http://api.drupal.org/api/function/node_save Je ne l'ai pas regardé trop les services de Sharepoint encore disponibles, mais vous pourrait probablement juste analyser le XML dans un document dom comme montré ci-dessus et ensuite faire une boucle à travers elle en créant un nœud pour chaque nœud XML qui correspond à vos critères.

Et si vous voulez plus du travail accompli pour

espoir qui a été utile. N'hésitez pas à demander plus de détails.

Questions connexes