Questo post è frutto del "barbatrucco" o come si dice più elegantemente work-around realizzato dai miei due tesisti, Michele Ciampichetti e Michele Conti, i quali si sono adoperarti efficacemente nella risoluzione di un problema di non poco conto!
A volte, mentre si utilizza Microsoft SharePoint può essere utile creare una Web part in un sottosito, e renderla disponibile il suo contenuto anche in altri siti, o per lo meno renderla disponibile anche nel sito padre; questa funzionalità non è presente in SharePoint, infatti, ogni elenco rimane ancorato al sito in cui è stato creato.
Esistono almeno un paio di modi per riuscire a risolvere questa situazione, uno evasivo ed uno più invasivo, ossia che va più a toccare le parti fondamentali del sistema. In questa parte affronteremo come al solito quello pi invasivo, poichè realizzare quello più evasivo sembrava troppo facile!
Questo metodo implica l'utilizzo di MSSQLServer, più precisamente il DB dei contenuti del sito WSS o almeno di strumenti che permettano la visualizzazione e la modifica dei database creati da SharePoint (solitamente SharePoint utilizza MSDE o WMSDE, ma è possibile anche specificare un DB diverso, anche SQLServer). Una volta collegati al DB si possono visualizzare diverse tabelle, fra cui Lists, Sites, Webs, WebParts, Docs, UserInfo, UserData ecc... ognuna con diversi compiti e campi, ma per risolvere il nostro problema sarà sufficiente utilizzare la tabella Lists.
-- List tables, indexes & filegroups
SELECT OBJECT_NAME( i."id" ) AS TableName
FROM sysindexes AS i
WHERE ( i.indid IN ( 0 , 1 ) Or i.indid < 255 ) And -- Tables & indexes only
OBJECTPROPERTY( i."id" , 'IsUserTable' ) = 1 And -- User tables only
OBJECTPROPERTY( i."id" , 'IsMSShipped' ) = 0 And -- No system tables
COALESCE( INDEXPROPERTY( i."id" , i."Name" , 'IsStatistics' ) , 0 ) = 0 And -- No Statistics / Auto-Create stats
COALESCE( INDEXPROPERTY( i."id" , i."Name" , 'IsHypothetical' ) , 0 ) = 0 -- No Hypothetical statistics
ORDER BY TableName
/*
Categories
Categories
ComMd
Deps
Deps
DiskWarningDate
Docs
Docs
DocVersions
EventCache
EventLog
HT_Cache
HT_Settings
ImmedSubscriptions
ImmedSubscriptions
ImmedSubscriptions
ImmedSubscriptions
Links
Links
Lists
NavNodes
NavNodes
NavNodes
Personalization
Personalization
Personalization
SchedSubscriptions
SchedSubscriptions
SchedSubscriptions
SchedSubscriptions
SiteGroupMembership
SiteGroupMembership
SiteGroups
SiteGroups
Sites
SystemVersion
TimerLock
UserData
UserInfo
UserInfo
UserInfo
WebCat
WebGroupMembership
WebGroupMembership
WebGroups
WebGroups
WebMembers
WebParts
WebParts
WebParts
WebParts
Webs
Webs
Webs
WelcomeNames
*/
A questo punto creiamo quindi un'altra web part nel sito (o sottosito) di destinazione, ossia a quello in cui vogliamo linkare la nostra web part (l'operazione di creazione deve essere fatta in tutti quei siti dove vogliamo rendere disponibili i dati !), dopo di ché apriamo la nostra tabella Lists e selezioniamo all'interno della tabella il record corrispondente all'elenco sorgente (basta guardarne il nome nel campo tp_Title), e ne estraiamo l'identificatore (tp_ID).
SELECT tp_Title, tp_ID
FROM lists
--Results
/*
Contacts 51D3D304-4104-42DF-B2E9-2C990EF439A2
Shared Documents DD255EFE-D14E-4B50-9F09-31FCA8F1405E
General Discussion 93B6F51B-FF07-4013-A596-47C5C229BB85
Announcements 34E9AE77-BFC0-4582-A05A-606664A08C4C
Events 8742A0F3-023A-4779-9589-68879C63AD62
A 3420BFEF-646C-4836-86C2-BFDD67BA86DC
Tasks 8DC1525D-F70C-40DE-AADD-D5CFB02B2763
Links C48092D2-D9F0-418A-B784-DBE6E329AEFD
Contacts 05618C7A-00C9-4470-8ACE-10835F08E056
as B8CFA72F-1375-4AB5-A119-17025FAD6723
Shared Documents E2B830BF-61DE-4A13-A5AC-20CEF636E022
Site Template Gallery E3047651-5837-472A-B895-33E5D9ECB8DF
Tasks 8865A113-D995-44A6-A428-3BC1AE1799CC
Web Part Gallery A4C9CBE5-0797-410D-AED2-40F60CCFAA4B
Events 2BE0A74E-F29F-405B-9B98-569960A91583
List Template Gallery 6FAC61FE-9A82-435B-A184-6DDE52388E09
Announcements 5BED23D5-53CF-4DDA-9C7E-814EA4C17616
A 3420BFEF-646C-4836-86C2-BFDD67BA86DC
Links BF68CBE7-9B87-44FD-BB7E-D3CF5B9906E0
General Discussion 88CFF469-848B-44EC-9F99-D9E641595790
*/
A questo punto, copiamo l'identificatore trovato, e cerchiamo il record corrispondente all'elenco sorgente, e sostituiamo l'identificatore di tale elenco con quello calcolato in precedenza.
A questo punto l'elenco destinazione sarà collegato all'elenco sorgente, per quello che riguarda il contenuto, purtroppo, se si cambia lo schema dell'elenco sorgente, e si volessero vedere le modifiche in quello destinazione, forse sarà necessario eliminare la web part destinazione e ripetere il procedimento dall'inizio.
Inoltre, un altro problema utilizzando questo metodo è costituito dall'indicizzazione che SharePoint applica ai campi tp_ID e tp_WebID; sono presenti due indici: uno che viene calcolato sulla somma dei sue campi, e con esso non si creano problemi, ed uno che viene calcolato solamente su tp_ID e che obbliga a non avere duplicati su quel campo. Come è chiaro ottenere il nostro risultato, seguendo questa procedura, non sarà possibile se si manterrà tale indice con la proprietà "duplicati non ammessi" sul campo.
Inoltre, problema principale in tutta questa storia, Microsoft lascia cadere il contratto di assistenza nei casi in cui si va oltre quanto è consentito, e garantito, quindi prima di arrivare a tanto, cercate sempre altre vie!!
Ancora un grazie a Michele & Michele.... forse ci scappa un articoletto su ugishareoffice???