API di SharePoint: 2003 vs 2007
-
10-07-2019 - |
Domanda
Ho codificato una soluzione che utilizza l'API 2007 per attraversare il modello a oggetti di SharePoint. Ora devo supportare anche SP 2003. Qual è il modo migliore per farlo?
È possibile / consigliato utilizzare l'API 2007 per accedere a una farm di SharePoint 2003?
Se utilizzo l'API 2007, devo utilizzare le classi obsolete per (ad esempio) fare riferimento a un database di configurazione o utilizzare le classi 2007, come SPFarm?
O uso l'API 2007 per SP 2007 e l'API 2003 per SP 2003 ...? Il problema è che entrambi usano gli stessi spazi dei nomi e gli stessi nomi delle classi. Quindi può diventare disordinato. (Tranne forse se uso gli alias per fare riferimento ai diversi spazi dei nomi?)
Soluzione
Per quanto ne so, l'API 2007 e l'API 2003 sono incompatibili. Quindi sì? dovrai implementare entrambi.
Posso suggerire di avere l'interfaccia ISharePointAPI e due implementazioni SharePoint2007API e SharePoint2003API. Queste implementazioni possono anche essere impacchettate in assiemi diversi, quindi non avrai riferimenti infernali :). Questo ti proteggerà anche dalle modifiche dell'API del 2010 poiché ciò di cui avrai bisogno è implementare SharePoint2010API ...
Altri suggerimenti
Le interfacce sono (principalmente) compatibili in uno spazio dei nomi / classe / membro USAGE ma devi usare la versione corretta dell'API per la versione corretta di SharePoint. Bisogna anche considerare che WSS2 / SPS2003 utilizza .NET1.1 per impostazione predefinita.
La mia soluzione è utilizzare MSBEE e alcuni MSBUILD ninja si sposta per sputare due versioni dal tuo codice sorgente.
Il primo riguarda .NET2 e fa riferimento a Microsoft.SharePoint.dll v12 (WSS3 / MOSS2007) e il secondo riguarda .NET1.1 e fa riferimento a Microsft.Sharepoint.dll v11 (WSS2 / SPS2003).
È piuttosto un difetto da configurare, ma funziona molto bene dopo. In presenza di differenze di codice è possibile utilizzare la compilazione condizionale: -
#if FX1_1
// WSS2/SPS2003 specific code
#else
// WSS3/MOSS2007 specific code
#endif
Questo articolo fornisce qualche dettaglio in più. È un argomento importante e ho intenzione di scrivere un post sul blog con qualche suggerimento.