L'intero sistema di navigazione di Sharepoint è completamente esposto attraverso il suo relativo modello ad oggetti. Abbiamo infatti un nuovo namespace, dalla versione 3.0 di Windows Sharepoint Services, in grado di manipolare i nodi di navigazione dei nostri siti. Il namespace in questione è il Microsoft.Sharepoint.Navigation; al suo interno, troviamo queste principali classi:
  • SPNavigation - che rappresenta il sistema di navigazione di un sito
  • SPNavigationNode - che rappresenta un singolo nodo di una barra di navigazione
  • SPNavigationNodeCollection - che rappresenta una collezione di nodi di navigazione
Una proprietà di tipo SPNavigation, ci viene offerta dalla classe SPWeb. Attraverso la proprietà Navigation, infatti, siamo in grado di recuperare sia la barra di navigazione che la quicklaunch bar di ogni sito Sharepoint, ed effettuare delle operazioni di personalizzazione su di esse:

using(SPWeb web = SPControl.GetContextWeb(Context))

{
//aggiungo degli item alla navigazione SPNavigationNodeCollection quicklaunch = web.Navigation.QuickLaunch;
SPNavigationNodeCollection navbar = web.Navigation.TopNavigationBar;

SPNavigationNode peppe = new SPNavigationNode("PeppeDotNet", "http://www.peppedotnet.it");
quicklaunch.AddAsFirst(peppe);
navbar.AddAsLast(peppe);

SPNavigationNode prevNode = web.Navigation.GetNodeByUrl("http://localhost/SubSite");
navbar.Add(peppe, prevNode);
}

Come potete vedere, possiamo recupare le collezioni di nodi relative alla barra di navigazione e alla quicklaunch bar, attraverso le relative proprietà esposte dalla classe SPNavigation. Poi possiamo aggiungere dei nodi alla navigazione, sfruttando uno di questi metodi della classe SPNavigationNodeCollection:
  • AddAsFirst - Aggiunge un nodo all'inizio della collezione
  • AddAsLast - Aggiunge un nodo alla fine della collezione
  • Add - Aggiunge un nodo, subito prima di un nodo di riferimento
Inoltre, è possibile sfruttare la classe SPNavigationNode, per l'inserimento o la modifica di sottonodi di navigazione:

using(SPWeb web = SPControl.GetContextWeb(Context))

{
SPList list = web.Lists["MyList"];
SPNavigationNode rootList = web.Navigation.GetNodeByUrl(list.DefaultViewUrl);
foreach (SPView view in list.Views)
{
SPNavigationNode node = new SPNavigationNode(view.Title, view.Url, false);
rootList.Children.AddAsFirst(node);
}
}

In questo modo, abbiamo aggiunto dei sub-menu alla voce relativa ad una specifica lista, in modo tale da inserire nella struttura di navigazione anche le sue viste.
Veramente utile !


TAGS: [WSS 3.0] [MOSS] [Navigation]
Commenti(76) - Posted @ 6/26/2007 10:56:11 AM - Categoria: Sharepoint - Permalink - Share on twitter | facebook


COMMENTI
Autore: Riccardo - scritto il 8/10/2007 4:33:38 PM
Ciao...ho proprio bisogno di questo codice per manipolare i miei menu però purtroppo sono completamente a digiuno per quanto riguarda la programmazione. Dove devo inserire questo codice per poter manipolare i menu? Grazie per l'aiuto.

Saluti

Riccardo

Autore: Peppe - scritto il 8/10/2007 5:53:47 PM
Ciao riccardo.
Per modificare la navigazione del tuo sito sharepoint con il codice sopra, ti basta solamente fare una semplice Console Application con Visual Studio .NET 2005. Puoi utilizzare anche la versione express che è gratuita.
O se no, al posto della console application, puoi inserire quel codice nell'event handler dell'attivazione di una feature.
se ne vuoi sapere di più su event handler e feature leggi pure questi due articoli:
- http://www.peppedotnet.it/Articoli/SharepointFeatures.aspx
- http://www.peppedotnet.it/Articoli/Wss3EventHandlers.aspx

Autore: Riccardo - scritto il 8/10/2007 6:03:20 PM
Ciao Peppe...ti ringrazio per la tua velocissima risposta... Proverò a fare come hai detto e a leggere gli articoli da te consigliati.

Ciao e grazie mille.

Riccardo.

Autore: riccardo - scritto il 8/16/2007 12:05:19 PM
Ciao Peppe....avevo una domanda da farti e non sapevo dove postarla quindi te la faccio qui (sorry)

visto che tu conosci bene sharepoint avrei la seguente esigenza: nella mia pagina iniziale del sito vorrei formattare le news in un certo modo. Le ho formattate tramite i css ma ho un piccolo problema. Mi piacerebbe impostare la larghezza delle colonne in modo fisso. Come posso fare?

Grazie e saluti

Autore: Peppe - scritto il 8/16/2007 1:45:40 PM
Con Sharepoint Designer dovresti riuscire a fare tutto quello che ti serve. Se no, puoi utilizzare la Content Query Web Part e modificare l'output tramite xslt.

Autore: Riccardo - scritto il 9/18/2007 10:11:42 AM
Ciao Peppe....avrei una richiesta. Vorrei creare delle dropdownlist con i dati di alcune categorie che ho creato nelle news e in alcune liste sul mio sito. Come faccio a risalire alla tabella dove sono inserite le categorie da me create? Posso utilizzare le query o le stored procedures che sharepoint utilizza? Come le posso trovare?

Grazie per il tuo aiuto.

Ciao Riccardo

Autore: Peppe - scritto il 9/18/2007 7:43:07 PM
Queste categorie le hai messe in dei campi di tipo scelta in liste differenti ?
Poi, la DropDownList che vuoi popolare, dove sta ? in una web part custom ? O dove ?

Autore: Riccardo - scritto il 9/21/2007 10:25:23 AM
Ciao Peppe....scusa se rispondo solo oggi. Ho risolto il problema. Nel disegner ho costruito un dataview che viene filtrato partendo da una dropdownlist. La dropdownlist è il risultato di una lista creata a doc per l'esigenza. Ho creato il parametro che mi viene passato dalla dropdownlist e l'ho utilizzato come filtro su un campo specifico nel mio dataview. Grazie per l'interessamento. Alla prossima. ciao

Autore: Maurizio - scritto il 10/23/2007 4:27:43 PM
Ciao Beppe...
volevo chiedere il tuo aiuto per trovare una soluzione su un problema che ho con sharepoint.

In una libreria di documenti pdf, ogni qualvolta un documento viene aperto nel browser dovrei inserire un marcatore (watermarker) con alcuni dati (questo perchè in caso di stampa deve riportare alcune informazioni ai bordi del documento).
Questo significa che ad ogni visualizzazione, un documento deve essere prima modificato.

È possibile fare tutto ciò scrivendo codice e associandolo alla libreria in questione?

Tu puoi darmi qualche suggerimento in merito?

Grazie Mille.

Ciao Maurizio.

Autore: Peppe - scritto il 10/23/2007 9:11:27 PM
Ciao Maurizio !
Allora, ci sono tante librerie che ti permettono di modificare dei file pdf "al volo". Io ho usato qualche volta iTextSharp, una libreria gratuita addatta al tuo caso.
C'è un articolo che fa proprio al caso tuo:
http://dotnetslackers.com/articles/aspnet/WatermarkingPDFDocumentsUsingHttpHandlers.aspx

Si tratta di creare un HttpHandler che effettui la marcatura.
Poi lo devi adattare a sharepoint, ma ti assicuro che non è difficile, perchè Sharepoint si base su ASP.NET, quindi il discorso è sempre lo steso.

Spero di esserti stato d'aiuto.
A presto.

Peppe

Autore: Maurizio - scritto il 10/24/2007 9:29:54 AM
Grazie Peppe...ho scaricato l'esempio ed è proprio quello che fa al caso mio. Adesso provo a manipolarlo un po'... Grazie 1000 per il tuo aiuto.

Maurizio.

Autore: Maurizio - scritto il 10/25/2007 9:06:42 AM
Ciao Peppe...volevo ringraziarti per l'aiuto di ieri (anche se non vedo più nel blog la tua risposta)... Modificare un file pdf da codice in effetti non è stato difficile con itextsharp...ma ora mi sto chiedendo come fare a inserirlo in sharepoint. Mi puoi dare un aiuto come punto di partenza?

Grazie mille.

Ciao Maurizio

Autore: Peppe - scritto il 10/25/2007 9:41:35 PM
In quell'articolo che ti ho dato, spiega come fare la marcatura utilizzando un Http Handler.
Anche in sharepoint puoi inserire i tuoi HttpHandler custom, perchè si basa anche lui su ASP.NET 2. Quindi, recuperi il web.config della tua web application e installi l'handler.
Per una panoramica sugli HttpHandler leggiti questo:

http://aspnet.html.it/articoli/leggi/2207/gli-http-handler-di-aspnet/

Autore: Maurizio - scritto il 10/26/2007 11:00:43 AM
Ciao Peppe...seguendo il tuo esempio sugli event handler ho un problema nella registrazione della mia feature. Ho creato il codice e l'ho compilato. Ho ottenuto la mia Public token key e ho eseguito la registrazione dell'Assembly. Fin qui tutto bene. Ma quando eseguo il batch per la registrazione nella feature ho il seguente errore:

Failed to create feature receiver object from assembly "AAA.Sharepoint.Handlers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ea20e1c03b49c8b4", type "AAA.Sharepoint.Handlers.HelloEventHandler" for feature 1f9208ba-b14e-47f3-b005-cebdc58ff716: System.InvalidCastException: Unable to cast object o
f type 'AAA.Sharepoint.Handlers.HelloEventHandler' to type 'Microsoft.SharePoint.SPFeatureReceiver'.
at Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()

Questo è il mio file feature.xml :

....Feature Id="1F9208BA-B14E-47f3-B005-CEBDC58FF716"
Title="PeppeDotNet event handlers feature"
Description=""
Scope="Site"
Hidden="FALSE"
xmlns="http://schemas.microsoft.com/sharepoint/"
ReceiverAssembly="AAA.Sharepoint.Handlers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ea20e1c03b49c8b4"
ReceiverClass="AAA.Sharepoint.Handlers.HelloEventHandler"
Feature...

Mi puoi aiutare a risolvere il problema?

Grazie mille per l'aiuto che mi stai dando.

Ciao Maurizio

Autore: Peppe - scritto il 10/26/2007 11:06:50 AM
La tua classe HelloEventHandler eredita da SPFeatureReceiver ?
Dovrebbe esser quello l'errore.

Autore: Maurizio - scritto il 10/26/2007 11:10:23 AM
Si eredita da quella classe (public class HelloEventHandler :SPItemEventReceiver)...come dal tuo esempio...non dovrebbe?

Autore: Peppe - scritto il 10/26/2007 11:16:05 AM
Eh no un momento. Stiamo facendo un pò di casino.
Se vuoi fare un event handler che gestisca gli eventi di una lista devi ereditare dalla classe SPItemEventReceiver. Poi inserire l'assembly nella gac e attaccare l'handler alla lista con una console application (come spiegato nel paragrafo "Registrare un event handler" del mio articolo).

Se invece vuoi sviluppare un event handler che gestisca gli eventi di una feature, quindi installazione, attivazione, disattivazione... devi ereditare dalla classe SPFeatureReceiver e creare una feature apposita con gli attributi ReceiverAssembly e ReceiverClass valorizzati.

Tu ora sembra che stai seguendo la seconda strada, ereditando però dalla classe sbagliata.

Autore: Maurizio - scritto il 11/6/2007 9:04:46 AM
Ciao Peppe...effettivamente devo avere fatto un po' di casino! :O( Vorrei chiederti una cosa:
Ho usato la libreria iTextsharp come da tuo consiglio. Tutto ok nei test. Quando l'ho inserita in sharepoint però ho avuto il seguente errore: 'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
Ho letto alcuni articoli sul Code Access Secutiry e su come implementare i file wss_minimaltrust.config e wss_mediumtrust.config ed inserire le voci che permettono l'utilitto della libreria. Ma senza molto successo. Visto che tu l'hai già utilizzata mi puoi dare l'ennesimo aiuto? Te ne sarei molto grato. Ciao Maurizio.

Autore: Peppe - scritto il 11/6/2007 9:20:46 AM
Ciao Maurizio.
Quell'errore in che occasione ti viene stampato ?
E poi, la dll della libreria iTextSharp dove l'hai messa ? Perchè io ti consiglierei di metterla nella GAC del server.

I livelli della CAS che hai detto servono a settare i permessi sull'esecuzione di particolari operazioni all'interno di sharepoint.
Di default ci sono i due livelli che hai menzionato tu più tutti quelli previsti da ASP.NET (Full, High, Medium, Low, Minimal). Uno di questi valori va settato all'interno del web.config della tua applicazione come valore dell'attributo "name" dell'elemento "trustLevel".
Nella documentazione di asp.net trovi tutto quello che ti interessa.
http://msdn2.microsoft.com/en-us/library/wyts434y.aspx

Nel tuo caso, potresti provare a settare il livello wss_mediumtrust, inserire la dll nella GAC e all'interno della sezione SafeControls del tuo web.config, come spiegato qua: http://msdn2.microsoft.com/en-us/library/ms465445.aspx

Autore: Maurizio - scritto il 11/6/2007 9:48:58 AM
Quello che ho fatto io è questo:
Ho inserito iTextsharp.dll nella directory bin del mio sito in sharepoint. Ho creato un nuovo progetto referenziando la dll iTextSharp. Ho aggiunto nel file web.config sotto ..httpHandlers.. la seguente dicitura ..add verb="*" path="*.pdf" type="AAA.PdfHandler,AAA".. e sotto IIS ho aggiunto l'estensione .pdf con l'eseguibile aspnet_isapi.dll. Ho compilato il mio progetto e l'ho inserito sotto la directory bin. Il mio problema è che se apro un file pdf da una delle mie liste sotto sharepoint ho l'errore che ti ho descritto. Mentre se apro un altro file pdf da sharepoint ma fisicamente in un altro sito non sharepoint il tutto funziona e mi trovo i miei watermark perfettamente dove li voglio. Ho saltato qualche passaggio o sbagliato qualcosa? Intanto mi leggo gli articoli che mi hai segnalato.

Ciao e grazie.

Maurizio

Autore: Peppe - scritto il 11/6/2007 9:59:26 AM
Prova a fare queste quattro cose:
1- metti la dll di iTextSharep all'interno della GAC,
2- cambia il livello di sicurezza a wss_mediumtrust,
3- inserisci l'assembly di iTextSharp all'interno dei SafeControls nel web.config del tuo sito sharepoint,
4- fai un bel IISRESET.

Autore: Maurizio - scritto il 11/6/2007 10:45:47 AM
Allora...ho messo la dll nel GAC e ho controllato se è stata inserita.
Non ho capito molto bene dove cambiare il livello di sicurezza in wss_mediumtrust.
Ho inserito nel SafeControls nel web.config la seguente riga

..SafeControl Assembly="itextsharp, Version=3.1.7.0, Culture=neutral, PublicKeyToken=8354ae6d217ddca" Namespace="itextsharp" TypeName="*" Safe="True" /..
ho fatto l'IISRESET ma ora il sito non si apre + e ho il seguente errore:
Safe mode did not start successfully. Exception of type 'System.Exception' was thrown.

Autore: Peppe - scritto il 11/6/2007 10:59:54 AM
il livello di sicurezza si cambia sempre all'inteno del web.config, è il valore dell'attributo "name" dell'elemento trustLevel.

per aggiungere l'assembly tra i controlli sicuri, apri il web.config, ricerchi l'elemento SafeControls e aggiungi una riga di questo tipo:

<SafeControl Assembly="TUOASSEMBLY, Version=TUAVERSIONE, Culture=neutral, PublicKeyToken=TUOTOKEN" Namespace="TUONAMESPACE" TypeName="*" Safe="True" AllowRemoteDesigner="True" />

Autore: Maurizio - scritto il 11/6/2007 11:48:01 AM
ho aggiunto l'assembly e non ho più l'errore nel caricamento. Nel mio web.config nell'attributo name dell'elemento trustLevel mi rimanda al file wss.mediumtrust.config. Ora in questo file cosa devo aggiungere? il riferimento alla mia classe in SecurityClass? o devo creare un codegroup con i vari attributi e il publickeyblob?

Autore: Peppe - scritto il 11/6/2007 11:53:27 AM
Scusami mi sono sbagliato io per la fretta.
Devi cambiare l'attributo "name" dell'elemento "trust" come segue:

<trust level="WSS_Medium" originUrl="" />

Autore: Maurizio - scritto il 11/6/2007 12:20:52 PM
io nell'elemento trust level ho ..trust level="wss_custom" originUrl="" /.. perchè uso un componente di terze parti. Comunque ho sostituito la voce ma ho un errore comunque: That assembly does not allow partially trusted callers.

Autore: Peppe - scritto il 11/6/2007 12:28:15 PM
Se hai un livello di personalizzazione custom, devi lasciarlo così. A dir la verità credo che basti lasciare la dll di iTextSharp nella GAC, senza settare alcun livello di sicurezza (sempre che tu non abbia creato il tuo livello custom partendo da quello di sicurezza minima, ma non credo).
Hai provato solo mettendo l'assembly nella gac e tra i safe controls ? rimettendo il trust su wss_custom

Autore: Peppe - scritto il 11/6/2007 12:51:42 PM
Se riesci, prova a creare il livello custom da quello medio.
Se no, devi creare i settaggi di sicurezza per la dll di iTextSharp manualmente.
Io ne ho gia parlato in un post tanto tempo fa, ma si riferisce alla versione 2003 di sharepoint. ti lascio il link.

http://www.peppedotnet.it/Blog/Custom_trust_level_per_utilizzare_object_model_sharepoint.aspx

comunque, giusto per vedere se siamo sulla buona strada, prova a mettere il livello di trust su "Full" eguarda se hai ancora errori.
Se non li hai, poi puoi crearti il tuo livello personalizzato di sicurezza.

Autore: Maurizio - scritto il 11/6/2007 1:05:18 PM
scusa una cosa...ma praticamente è il file custom.config che ora detta le regole nel mio caso? ma dove devo mettere full' su tutte le voci? scusa ma con tutte queste cose nuove sto facendo un po' di casino :O(


Autore: Peppe - scritto il 11/6/2007 2:00:07 PM
Esattamente, ora i settings riguardo la Code Access Security vengono letti da quel file custom.

La prova che ti ho detto di fare io, innanzitutto deve essere temporanea, quindi solo per vedere se il tuo HttpHandler funziona. Poi va fatta all'interno del web.config, nell'elemento "trsut" e non nel file wss_custom.config che hai nel tuo caso.

<trust level="Full" originUrl="" />

Se vedi che così funziona, allora devi modificare il file wss_custom.config in modo tale da dare permessi anche alla libreria iTextSharp.

Spero d'esser stato chiaro questa volta.

Autore: Maurizio - scritto il 11/6/2007 3:01:59 PM
ho messo Full nel mio web.config ma nulla e nell'event viewer ho il seguente warning:
Stack trace: at System.Web.HttpRuntime.SetTrustLevel(TrustSection trustSection, SecurityPolicySection securityPolicySection)
at System.Web.HttpRuntime.HostingInit(HostingEnvironmentFlags hostingFlags)

Non ti preoccuparti mi stai aiutanto moltissimo.

Autore: Peppe - scritto il 11/6/2007 3:10:11 PM
prova con High o Medium, sempre per vedere se l'handler funziona. In qualsiasi caso comunque, ti devi modificare a mano il tuo file wss_custom.config in modo tale da settare i permessi alla libreria iTextSharp.

Autore: Maurizio - scritto il 11/6/2007 3:12:12 PM
Ok...adesso provo....intanto rimetto in piedi una macchina pulita e ricomincio da capo perchè comincio ad avere un po' di casini...


Autore: Maurizio - scritto il 11/6/2007 3:47:32 PM
niente con High e Medium :O(

Autore: Maurizio - scritto il 11/6/2007 4:35:45 PM
Beppe ho fatto una prova (magari non è un gran chè, ma forse puoi far capire qualcosa). Ho modificato il codice per la modifica del mio pdf facendo comparire semplicemente l'ora e la data (context.Response.Write(date);.... e tutto funziona bene.... mentre se inserisco la riga context.Response.Write(context.Request.PhysicalPath); mi da un errore... non è che forse in sharepoint ho problemi con il PhysicalPath?

Autore: Peppe - scritto il 11/6/2007 4:49:34 PM
Che errore ti da ?

Autore: Maurizio - scritto il 11/6/2007 5:05:46 PM
Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.

(quello che avevo in precedenza)..

Autore: Peppe - scritto il 11/6/2007 5:13:58 PM
Allora il discorso è sempre lo stesso, devi dare i permessi di IO alla dll di iTextSharp. Per farlo devi modificare il tuo file custom di configurazione della protezione.
Se no, togli quella riga e nel watermark ci scrivi altro..

Autore: Maurizio - scritto il 11/6/2007 5:28:18 PM
Provo a dare i permessi alla dll di itextsharp. Ho visto degli esempi ma sempre sulle delle webpart...il permesso lo devo scrivere allo stesso modo...tipo il tuo esempio che mi hai segnalato (anche se di sharepoint 2003)?

Autore: Peppe - scritto il 11/6/2007 5:38:44 PM
Si i permessi li devi dare come se stessi trattando una libreria di web part.
Leggiti questo:
http://msdn2.microsoft.com/en-us/library/ms916855.aspx

Autore: Maurizio - scritto il 11/7/2007 11:29:27 AM
Ciao peppe....oggi ho creato un nuovo sito e ho rifatto tutto. ho compilato la mia dll e l'ho messa nella directory bin con la dll itextsharp. L'ho messa nel Gac tramite, infatti la vedo nella lista degli assembly cache. Ho modificato il mio file web.config inserendo le seguenti voci:

-SafeControl Assembly="namemioassembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cc3658fb0ac4d8b0" Namespace="mionamespace" TypeName="*" /-
-SafeControl Assembly="itextsharp , Version=3.1.7.0, Culture=neutral, PublicKeyToken=8354ae6d2174ddca" Namespace="itextsharp" TypeName="*" /-
-SafeControl Assembly="itextsharp , Version=3.1.7.0, Culture=neutral, PublicKeyToken=8354ae6d2174ddca" Namespace="itextsharp.text" TypeName="*" /-
-SafeControl Assembly="itextsharp , Version=3.1.7.0, Culture=neutral, PublicKeyToken=8354ae6d2174ddca" Namespace="itextsharp.text.pdf" TypeName="*" /-

oltre ad aver inserito nel httphandlers un add con i riferimento. Il risultato è ancora un errore. -> That assembly does not allow partially trusted callers.
Se invece mi limito a inserire una semplice context.Response.Write(date) la nuova pagina mi appare con la data e nessun errore. Cosa devo ancora settare?

Scusa se continuo a chiederti aiuto ma sono proprio fermo.

Ciao Maurizio

Autore: Peppe - scritto il 11/7/2007 11:38:06 AM
Ciao maurizio
Se hai messo la dll nella gac, toglila dalla directory bin innanzitutto.
Poi, prova. Se ti da ancora errore, il discorso è sempre lo stesso.. Devi dare i permessi a quella dll, quindi o cambi il livello di trust su tutta l'applicazione oppure metti mano a quel file wss_custom.config

Autore: Peppe - scritto il 11/7/2007 2:17:27 PM
Scusa se ti cancello i post, ma quando copi il codice di un publicKeyBlob mi sformi il sito.

Allora, leggiti questo:
http://www.peppedotnet.it/Blog/Custom_trust_level_per_utilizzare_object_model_sharepoint.aspx

prima di tutto devi fare un nuovo set di permessi (elemento PermissionSet). poi devi inserire un nuovo elemento di tipo CodeGroup dove leghi i permessi settati sopra al tuo assembly. Il legame è dato dal valore dell'attributo PermissionSetName, che deve essere il nome dal al set di permessi (PermissionSet) definito precedentemente.

Autore: Maurizio - scritto il 11/7/2007 2:23:22 PM
Sorry per il sito :O) ...

Cio' vale anche per moss 2007?

Autore: Maurizio - scritto il 11/7/2007 2:53:33 PM
sorry...mi sono già risposto da solo. Sto costruendo il file e poi ti faccio sapere.

Tanks ancora.

Autore: Maurizio - scritto il 11/7/2007 3:25:43 PM
peppe...ho fatto tutto ma ho ancora problemi.... senti possiamo sentirci per mail che dovrei chiederti un paio cose?

Autore: Maurizio - scritto il 11/7/2007 3:26:30 PM
Sorry.. ho visto sotto il tuo mail...ti scrivo li

Autore: Maurizio - scritto il 11/12/2007 2:18:36 PM
ciao peppe.

Mi puoi aiutare su una cosa credo molto semplice per te:

Come faccio a ricavare l'id di un item mentre lo sto creando? È possibile? o l'Id viene assegnato dopo l'ok? Ho provato con il seguente codice ma mi da sempre zero e penso per il fatto che l'id non sia stato ancora asegnato perchè l'id non è stato ancora creato.

public override void ItemAdding(SPItemEventProperties properties)
{
base.ItemAdding(properties);
int ItemId = properties.ListItemId;
properties.AfterProperties["Codice"] = ItemId;
}

Ti chiedo inoltre: è possibile modificare il nome di un attachment una volta che è stato fatto l'upload?

Grazie Peppe per l'aiuto.

ciao Maurizio

Autore: Peppe - scritto il 11/12/2007 3:30:21 PM
Ciao Maurizio, nell'evento ItemAdding l'id non è stato ancora creato. Lo puoi prendere solo dall'evento ItemAdded in poi.

Per modificare invece il nome di un allegato dopo che hai effettuato l'upload, devi scrivere il codice per la gestione dell'evento ItemAttachmentAdded.

Autore: Maurizio - scritto il 11/12/2007 3:44:43 PM
ho immaginato...ma non riesco a ottenerlo con ItemAdded.

Ho provato cosi:

public override void ItemAdded (SPItemEventProperties properties)
{
base.ItemAttachmentAdded(properties);
int ItemId = properties.ListItemId;
properties.AfterProperties["Codice"] = ItemId;
}

ma non ottengo nulla. Dove sbaglio?

Autore: Peppe - scritto il 11/12/2007 3:52:13 PM
Ti torna 0 oppure il campo "Codice" è vuoto ? Perchè son due cose differenti..
Comunque nell'event ItemAdded è impossibile che la propretà ListItemId ti ritorni zero. sei sicuro che hai registrato l'handler correttamente ? e che quel codice venga regolarmente eseguito ?

Autore: Maurizio - scritto il 11/12/2007 3:55:23 PM
colpa mia colpa mia...mi sono accorto giusto di quello un attimo prima che tu me lo segnalavi...non ho aggiunto l'eventhandler... Sorry....

grazie mille per per il tuo sempre tempestivo aiuto.

Autore: Peppe - scritto il 11/12/2007 3:57:08 PM
Figurati !

Autore: Maurizio - scritto il 11/12/2007 4:20:49 PM
Ho inserito il mio handler:
list.EventReceivers.Add(SPEventReceiverType.ItemAdding, "TestHandler, Version=1.0.0.0,Culture=neutral,PublicKeyToken=253d30e8a6aecbf4","TestHandler.AddCode");
list.EventReceivers.Add(SPEventReceiverType.ItemAdded, "TestHandler, Version=1.0.0.0,Culture=neutral,PublicKeyToken=253d30e8a6aecbf4", "TestHandler.AddCode");

riferendosi a questo:

public override void ItemAdded (SPItemEventProperties properties)
{
properties.AfterProperties["Codice"] = "999";
}

ma il campo codice rimane vuoto!?

Autore: Peppe - scritto il 11/12/2007 4:26:40 PM
Nell'evento ItemAdded, come in tutti gli "after-events", le proprietà AfterProperties servono al massimo per la lettura.
Se vuoi settare un valore in quell'evento, devi recuperarti l'oggetto SPListItem relativo al tuo elemento, modificare il valore del campo "Codice" ed infinie eseguire un'update.
Una cosa di questo tipo:

public override void ItemAdded (SPItemEventProperties properties)
{
DisableEventFiring();
SPWeb web = properties.OpenWeb();
SPListItem item = web.Lists[properties.ListTitle].GetItemById(properties.ListItemId);
item["Codice"] = "999";
item.Update();
EnableEventFiring();
}

Autore: Maurizio - scritto il 11/12/2007 4:48:11 PM
Grazie peppe...ora funziona.

Ciao Maurizio

Autore: Maurizio - scritto il 11/13/2007 9:27:46 AM
Ciao peppe...ho qualche difficoltà a rinominare un attachment in una lista. Utilizzo l'evento ItemAttachmentAdded ma però mi blocco un attimo sul come rinominarlo...

Grazie per l'aiuto.

Ciao Maurizio

Autore: Peppe - scritto il 11/13/2007 10:55:22 AM
Io non l'ho mai provato.
Cmq, se sei in una document library, puoi provare una cosa del genere:

public override void ItemAttachmentAdded(SPItemEventProperties properties)
{
properties.ListItem.File.Title = "";
properties.ListItem.File.Update();
}

Se se in una lista non so, perchè non ho visto un modo veloce per farlo. Può essere anche che devi aggiungerne uno nuovo, copiando l'allegato esistente, cambiandogli il nome e eliminando quello di partenza.

Autore: Maurizio - scritto il 11/13/2007 11:21:40 AM
Infatti immaginavo una cosa del genere...Grazie per l'aiuto.

Ciao Maurizio

Autore: Maurizio - scritto il 11/16/2007 10:36:59 AM
Ciao Peppe....

volevo chiederti un aiuto per quanto riguarda la modifica via codice di valori in un item in una lista. Riesco a lettere il nome del field ma ho difficolta a lettere il valore nei vari campi. Ho creato un campo custom di tipo link e dovrei andare modificarlo via codice.
Che proprietà devo utilizzare per modificare dei valori negli item?

ciao Maurizio

Autore: Peppe - scritto il 11/16/2007 10:57:33 AM
Ciao maurizio.
Per inserire dei valori in un item pre-esistente devi fare come segue:

SPList list = web.Lists["NomeLista"];
SPListItem item = list.GetItemById(1); //codice per prelevare l'elemento con ID = 1
item["NomeCampoDiTesto"] = "Valore";
item["NomeCampoLookup"] = "ID;#VALORE";
item["NomeCampoLink"] = "http://www.peppedotnet.it, peppe";
item.Update();

Fai attenzione però, che i vari nomi campi devono essere gli InternalName dei vari campi. Un internal name di un campo lo vedi andando nei settings della lista e cliccando sul campo scelto. Nell'url in fondo il contenuto della querystring "Field" è il tuo internal name.

Autore: Maurizio - scritto il 11/16/2007 11:02:01 AM
Grande Peppe... ti ringrazio.

Ciao Maurizio

Autore: Maurizio - scritto il 11/16/2007 11:10:23 AM
Ho provato un sacco di modi, ma non credevo fosse così semplice...

Grazie 1000 ancora.

Ciao Maurizio.

Autore: Umberto - scritto il 12/17/2007 9:40:51 AM
Ciao Peppe, prima ti faccio i complimenti per il tuo blog. E' davvero molto utile a noi neo sharepointisti!
Ho provato il tuo codice per aggiungere dei submenu ai menu delle liste ma non mi funziona.... Se guardo il log di sharpoint sembra che dia errore su tutte le liste del mio sito....Questo di seguito è il codice:

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPWeb site = (SPWeb)properties.Feature.Parent;
SPList list = site.Lists["listaAmici"];
SPNavigationNode rootList = site.Navigation.GetNodeByUrl(list.DefaultViewUrl);
foreach (SPView view in list.Views)
{
SPNavigationNode node = new SPNavigationNode(view.Title, view.Url, false);
rootList.Children.AddAsFirst(node);
}
}


Riesci a darmi un suggermimento? Grazie mille!

Autore: Peppe - scritto il 12/17/2007 10:03:42 AM
Ciao Umberto ! Intanto grazie per i complimenti..
Il codice di questo post, non è completamente corretto. Manca la chiamata al metodo Update() dell'oggetto di tipo SPNavigationNode che fa da root a tutti i nuovi nodi che vogliamo aggiungere.
Secondo me quindi, basta aggiungere:

rootList.Update();

dopo la fine del ciclo foreach.
Se non funziona, bisogna che mi dici che errori vedi nel log.
A presto.

Autore: Maurizio - scritto il 12/18/2007 10:15:13 AM
Ciao Peppe...chiedo ancora una volta il tuo aiuto.
Ho creato un DB in SQL2005.

Utilizzando il Designer, ho creato una nuova pagina inserendo un dataview. Ora tramite la Data source Library ho provato a creare una connessione al mio database. Però ho il seguente problema: dopo aver clikkato su 'connect to a database' nella maschera 'configure database connection' non trovo la voce 'Windows Authentication' come mi aspetterei.

Tu sai cosa devo fare o attivare per potermi collegare al mio DB tramite l'windows authentication?


Grazie per l'aiuto.

Buona lavoro.

Ciao Maurizio.

Autore: Umberto - scritto il 12/19/2007 12:14:35 PM
Sicuramente l'update mancava (grazie!!) ma il problema rimane.
L'errore che trovo nel log è:

Nessun Web con nome "/mySite/Lists/listaAmici/AllItems.aspx".

Leggendo in giro sui forum sembra che questo errore sia dovuto ad un baco di wss che con il service pack 1 dovrebbe essere risolto. Ora provo ad installarlo (non l'avevo ancora fatto) e ti faccio sapere!


Autore: Peppe - scritto il 12/19/2007 12:24:40 PM
Su che riga te lo da quell'errore ?

Autore: Umberto - scritto il 12/20/2007 6:35:04 PM
Nel log di sharpoint purtroppo non c'è nessuna riga di errore.
Ti posso dare i messaggi successivi a quello che ti ho scritto ma non so se possono dirti qualcosa di più. Eccoli:

Possible mismatch between the reported error with code = 0x81070504 and message: "Nessun Web con nome........

Potentially excessive number of SPRequest objects (9) currently unreleased on thread 1. Ensure that this object or its parent (such as an SPWeb or SPSite) is being properly disposed. Allocation Id for this object: {917BDC47-31AE-433B-8ACE-6576409BE96A} Stack trace of current allocation: in Microsoft.SharePoint.SPRequestManager.Add(SPRequest request, Boolean shareable) in................................

Autore: Giuseppe - scritto il 3/12/2008 11:18:15 AM
Ciao Peppe!
Il tuo sito mi ha gia illuminato tante volte...spero anche questa ;)
Devo nascondere il i menu "Upload" e "New" dalla Tool bar menu.
ho pensato di farlo all´attivazione di una feature (usando il tuo codice) e procedendo con using(SPWeb web = SPControl.GetContextWeb(Context)) ....etc. E´ fattibile?
Qualche suggerimento in merito?

Grazie in anticipo

Giuseppe dall´Estonia :)

Autore: Peppe - scritto il 3/12/2008 11:27:58 AM
Ciao !
Devi nascondere i tati "upload" e "new" di una particolare lista di documenti o di tutte ?
Non puoi farlo tramite i permessi ?
Se un utente non ha permessi di scrittura su tale lista i pulsanti spariscono.

Autore: Giuseppe - scritto il 3/12/2008 11:41:43 AM
Devo nasonderli sulla lista di documenti in base (se e solo se) a un gruppo particolare (creato ad hoc) a cui current user appartiene :S
ho provato con le feature e con HideCustomAction ...ma nn sembra funzionare. Poi guardando il tuo sito ho pensato che abbinando un feature & event handler + un WebControls potefa funzionare...
Dimmi tu

Autore: Peppe - scritto il 3/12/2008 11:51:06 AM
Fai così:
Agginugi un livello di sicurezza personalizzato con tutti i permessi tranne add e upload.
Poi nei permessi della tua lista, dai al tuo gruppo quel permessi personalizzato che hai appena creato.
così l'utente appertenente al tale gruppo non visualizzerà ne il pulsante "new" ne quello "upload"

così ti eviti un sacco di personalizzazioni unitili

Autore: claudio - scritto il 9/6/2008 1:04:29 PM
Ciao Beppe, ho provato ad implementare una soluzione con ASP.NET che richiami SPNavigationNode e SPNavigationNodeCollection per ricreare il menu completo della mia soluzione sharepoint ed esporlo in una treeview, il tutto funziona egregiamente tranne che nell'alberatura non compaiono i nodi di tipo folder presenti dentro le Document List, come posso fare per visualizzare anche questo ulteriore dettaglio dell'alberatura?. Grazie Claudio

Autore: STEFANO - scritto il 2/8/2009 6:58:54 PM
Ciao a tutti,
ho necessita' di inserire la data e l'ora sull'homepage del sito creato con sharepoint, sapete dirmi se è possibile e come?
Ma il linguaggio è .xml ?
Grazie a tutti

Autore: Peppe - scritto il 2/8/2009 8:35:32 PM
Ciao Stefano.
Puoi creare una semplice web part in C# o VB.NET che scrive in una label data e ora correnti.

INSERISCI UN COMMENTO

Nome *
Indirizzo e-mail
(non verrà pubblicato)
Commento *