PeppeDotNet.it

Il blog di Giuseppe Marchi - SharePoint MVP

NAVIGATION - SEARCH

Come nascondere dei campi da una lista già creata

In questi giorni mi è capitato di dover nascondere dei campi dalle form di un template di lista sharepoint. Se questo l'avessi fatto io dall'inizio, la cosa sarebbe stata abbastanza facile, in quanto, nella template definition esistono gli attributi ShowInEditForm, ShowInNewForm ... da applicare ad ogni campo della nostra lista.
Nel mio caso, però, la lista era stata gia creata e modificata e quindi non potevo metter mano in quei file.
Ho cercato un pò su google come potermi muovere e ho trovato questo.
In pratica, mi dicono di apire Sharepoint Designer, fare una copia della form che voglio editare ed inserire un controllo specifico di sharepoint (custom list form) che mi permette di modificare il modulo di visualizzazione a mio piacimento. Peccato però, che quando io cerchi di settare la mia nuova form come form di edit (per esempio), la mia modifica non venga accettata.

Ecco quindi che ho dovuto lasciar perdere sharepoint designer e mi son creato una semplice consol application, che grazie al modello ad oggetti fornito da sharepoint, mi permette di modificare quelle proprietà dei campi di una lista che non possono essere modificate tramite interfaccia grafica.

SPSite site = new SPSite("http://locahost");

if (site != null)
{
SPWeb web = site.OpenWeb();
SPList list = web.Lists["ListName"]];
if (list != null)
{
list.Fields["FieldName"].ShowInDisplayForm = false;
list.Fields["FieldName"].ShowInEditForm = false;
list.Fields["FieldName"].ShowInNewForm = false;
list.Fields["FieldName"].Update();
list.Update();
}
}

In questo modo ho nascosto il campo "FieldName" dalle form di edit, new e display della mia lista "ListName".
Niente di più facile no ?

Commenti (18) -

Ho provato a utilizzare il breve frammento di codice che hai indicato, ma alla prima istruzione ottengo l'errore:

Impossibile trovare l'applicazione Web all'indirizzo http://localhost. Verificare che l'URL digitato sia corretto. Se è previsto che l'URL visualizzi contenuto esistente, l'amministratore di sistema potrebbe dover aggiungere un nuovo mapping di URL per la richiesta nell'applicazione specifica.

Inutile dire che aprendo da IE, la pagina richiede le credenziali e accedo normalmente. Ho provato a utilizzare UPUserToekn, ma senza successo. Devo forse modificare la prima istruzione indicando in qualche modo le credenziali? Come devo fare? Grazie in anticipo.

Rispondi

Sei sicuro che l'indirizzo che hai inserito come parametro nella creazione del nuovo oggetto di tipo SPSite è lo stesso con cui hai installato Sharepoint ?

Potrebbe anche essere un problema di permessi però. Prova ad eseguire quel codice con privilegi di amministratore. Oppure prova ad utilizzare questa tecnica:



www.peppedotnet.it/.../...tedPrivilegesMethod.aspx

Rispondi

L'indirizzo è lo stesso. Ho provato anche sia sul pc che uso per sviluppare e sul quale ho MOSS2007, che sul server di produzione, sempre con MOSS 2007, ma senza Visual Studio. Ho compilato l'applicazione, ma lanciandola continua a dare lo stesso errore. Ho fatto la prova anche con RunWithElevatePrivileges, ma senza successo. Sono convinto che sia un problema di permessi, ma sicuramente mi sfugge qualcosa. Hai qualche altro suggerimento?

Rispondi

Prova a cambiare il livello di trust nel web.config del tuo sito sharepoint. Mettilo a wss_medium o Full.

Il livello di trust dell'applicazione è rappresentato dall'elemento "trust".

Rispondi

Ora sul pc di sviluppo funziona, ma se tento di accedere al server di produzione ho un errore perchè gli utenti sono diversi. Come posso indicare il nome utente e password da utilizzare nella connessione? Grazie ancora.

Rispondi

Dipende con che utenza esegui quel pezzo di codice. Hai costruito una console application ? o cos'altro ?

Comunque, se utilizzi il metodo RunWithElevatedPrivileges quel codice viene eseguito con l'utente con cui gira l'application pool della tua applicazione sharepoint.

Rispondi

Umberto Benelli

Il codice funziona perfettamente sul 99% sui tipi di campi. Ce ne è uno (che è quello che serve a me) su cui non funziona. Quando ad una lista (o document library) ho associato più content type, quando sei nella scheda di new o edit vorrei nascondere il dropdown list che mi consente di cambiarlo. La mia applicazione apre direttamente la pagine di new/edit passandogli il content type corretto (quindi non deve essere cambiato). Ho provato di tutto ma quel drop down non riesco a nasconderlo. Se hai qualche idea...........

Grazie comunque!

Rispondi

Ciao Peppe,

Non esattamente. Quando ad una lista sono associati più content type premendo il menu "new" posso scegliere direttamente in quel momento "su quale content type fare la new". Fin qui tutto bene. A questo punto, dopo l'upload di un documento (nel caso di una document library), si entra nella pagina dove l'utente può impostare tutte le proprietà da associare al documento (pagina NewForm.aspx). Il systema presenta le proprietà definite dal content type scelto al momento del "New" ma anche una proprietà "Content Type" con una combo che mi consente di cambiare in quel momento il CT. Il mio obiettivo è nascondere questo combo. Il metodo che proponi nel codice "ShowInNewForm", sembra non avere effetto su questo campo. Lo stesso discorso vale anche nel caso di edit.

Rispondi

Immaginavo che fosse un problema del genere.

Grazie mille!

Rispondi

Ciao Peppe, avrei anch'io un problema del genere... ho la necessità di cambiare il form Upload.spx per una doclib con uno fatto da me.

Posso creare una nuova document library perchè la funzionalità dovrà essere circoscritta solo a quel tipo di doclib... ma non riesco a trovare un modo per dirle in creazione quale form dovrà utilizzare per l'upload di un file.

Qualche suggerimento?

Rispondi

eh.. la tua form custom NON deve stare sotto la layouts, ma deve essere all'interno della cartella della tua list definition.

poi, per vedere se le modifiche che hai fatto sono corrette, bisogna che ricrei la document library !

Rispondi

Provato anche così... tolto il form da _layouts e ripetuto i passi.

Installato, attivato e poi ho creato una document library... ma l'esito è lo stesso, se premo 'Carica documento' mi apre sempre il form Upload.aspx.

Probabilmente sbaglio qualcosa nella list definition... io le uniche modifiche che ho fatto sono state cambiare Upload.aspx con CustomUpload.aspx (e penso che l'ha visto perchè se guardo in esplora risorse nella cartella Forms della doclib che creo ci sta il form)... c'è qualche accortezza da prendere perchè funzioni?

Rispondi

Umberto Benelli

Il problema per ora l'ho risolto con un workaround. Dopo aver assegnato alla lista tutti i content type necessari, ho disabilitato la possibilità di associare content type e non mi appare più, nella pagina di edit, la scelta del content type. Non mi piace molto ma funziona...

Rispondi

Ciao Antonio.

Per inserire una form di upload custom all'interno do una document library, devi seguire queste operazioni nell'ordine:

- creare una nuova list definition partendo dalla document library (feature DocLib)

- creare la tua form .aspx

- modificare lo schema.xml togliendo la form Upload.aspx e mettendo la tua: <Form Type="NewForm" Url="Forms/CustomUpload.aspx" />

- creare una solution per effettuare il deploy del tutto.

Rispondi

Ciao Peppe e grazie per la velocissima risposta.

Allora quello che ho fatto è:



- creato un customUpload.aspx e piazzato in _layouts e al posto dell'Upload.aspx della cartella con shema.xml.

- creato una list definition modificando così lo schema.xml:

    Forms

      Form Type="DisplayForm" ...

      Form Type="EditForm" ...      

      Form Type="NewForm" Url="Forms/CustomUpload.aspx" /

      Form Type="NewFormDialog" ...

      ...

deployato e attivato il tutto.

Il problema è che una volta creata un document library con questo schema se provo ad agire sul pulsante 'Carica documento' continua a richiamarmi il form Upload.aspx standar.

Dov'è che sbaglio?

Rispondi

GRAZIE GRAZIE GRAZIE

Rispondi

ah si ora ho capito..

purtroppo però, quello non è un campo della tua lista, ma una peculiarità della web part di sharepoint che si occupa di renderizzare le form di insert e update.

Per nasconderlo puoi:

- o modificare entrambe le pagine di edit e new con sharepoint designer

- o inserire una web part in entrambe le pagine, che con javascript nasconde quel campo

- o sovrascrivere la web part di insert e update, con una tua custom che provvederai a sviluppare senza quel campo

Rispondi

Ciao Umberto.

Vediamo se ho capito bene.. vorresti togliere dalla toolbar il menu "New" giusto ? quello che ti fa scegliere tra i vari content types.

Oppure ho capito male ?

Rispondi

Aggiungi Commento