2009-06-24 9 views
2

J'ai codé une solution qui utilise l'API 2007 pour parcourir le modèle d'objet SharePoint. Maintenant, je dois également soutenir SP 2003. Quelle est la meilleure façon de procéder?SharePoint API: 2003 vs 2007

Est-il possible/recommandé d'utiliser 2007 api pour accéder à une batterie de serveurs SharePoint 2003?

Si j'utilise l'API 2007, dois-je utiliser les classes obsolètes pour (par exemple) référencer une base de données de configuration, ou est-ce que j'utilise les classes 2007, telles que SPFarm?

Ou dois-je utiliser l'API 2007 pour SP 2007 et l'API 2003 pour SP 2003 ...? Le problème est que les deux utilisent les mêmes espaces de noms et les mêmes noms de classe. Donc ça peut devenir salissant. (Sauf peut-être si j'utilise des alias pour référencer les différents espaces de noms?)

Répondre

3

En ce que je sais l'API 2007 et l'API 2003 sont incompatibles. Donc oui? vous devrez implémenter les deux.

que je peux suggérer d'avoir une interface ISharePointAPI et deux implémentations SharePoint2007API et SharePoint2003API. Ces implémentations peuvent même être empaquetées dans différents assemblages, donc vous n'aurez pas de référence en enfer :). Cela vous protègera également des changements d'API de 2010 car il faudra implémenter SharePoint2010API ...

+0

Mm, j'avais peur de ça. Heureusement, j'ai déjà une interface spécifiée car la solution fonctionne dans un environnement COM. – Ries

1

Les interfaces sont (pour la plupart) compatibles dans un espace de noms/classe/membre USAGE mais vous devez utiliser la bonne version de l'API pour la version correcte de SharePoint. Vous devez également considérer que WSS2/SPS2003 utilise .NET1.1 par défaut.

Ma solution à ceci est d'utiliser MSBEE et quelques mouvements MSBUILD ninja pour cracher deux versions de votre code source.

Les premières cibles .NET2 et références Microsoft.SharePoint.dll v12 (WSS3/MOSS2007) et la deuxième cible .NET1.1 et références Microsft.Sharepoint.dll v11 (WSS2/SPS2003).

Son tout à fait faf à l'installation, mais fonctionne très bien après. Où vous avez des différences de code, vous pouvez utiliser la compilation conditionnelle: -

#if FX1_1 
    // WSS2/SPS2003 specific code 
#else 
    // WSS3/MOSS2007 specific code 
#endif 

Ce article donne un peu plus en détail. C'est un grand sujet et j'ai eu l'intention d'écrire un billet de blog avec quelques conseils.

+0

Merci pour l'entrée. Je pense que nous allons cibler .NET3.5 de toute façon (pour d'autres raisons) pour les deux produits. Ainsi, les utilisateurs de 2003 et 2007 devront installer .NET3.5 pour utiliser notre solution. Je pense qu'ils pourront vivre avec ça. – Ries

+0

J'ai également remarqué que même si les classes 2003 sont toujours disponibles dans l'API 2007, certaines méthodes jettent des exceptions en vous disant qu'elles ne sont pas supportées. Nous allons donc pour différentes implémentations derrière une interface commune. Chaque implémentation référence chaque propre version de l'API. – Ries