working in progress: SharePoint 2010, Visual Studio 2010, ASP.NET, WPF, Scrum, Patterns, TDD, Refactorin To Pattern

2805/10 0

Nascondere alcune aree di Sharepoint tramite il controllo SPSecurityTrimmedControl

Ditemi… a chi piace dare al nostro Anonymouse User la nostra ribbon bellissima!?

1_ribbon

A me non piace :-\

C’è un modo per evitare di togliere elementi utili nel back-office ma non farli visualizzare nel front-end.
E questo è SPSecurityTrimmedControl.

Ecco un esempio. Troviamo il nostro div della ribbon e inseriamo il controllo:

 

<Sharepoint:SPSecurityTrimmedControl PermissionsString="AddAndCustomizePages" runat="server">  
  <Sharepoint:DelegateControl ControlID="GlobalNavigation" runat="server">Sharepoint:DelegateControl>  
    <div class="s4-pr s4-ribbonrowhidetitle" id="s4-ribbonrow">  
    <!-- -->    
    <div>  
</Sharepoint:SPSecurityTrimmedControl>

 

La magia avviene grazie al PermissionsString.

Per sapere tutti i PermissionsString a disposizione fate riferimento a:

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spbasepermissions(v=office.14).aspx

cips

0xc328a906, 0x8f6e, 0x4cdd, 0x83, 0x6d, 0xa1, 0x9a, 0x66, 0xd8, 0xf5, 0xec

[top]

2605/10 0

WCF RIA Services: Aggiungiamo un paio di controlli

Nel post precedente ottenevamo la lista di tutti gli utenti nel nostro database tramite la GetCustomer.
In questo post aggiungeremo un paio di controlli per paginare e filtrare i nostri dati.

Quindi torniamo al nostro bel designer e aggiungiamo un DataPager alla griglia creata quì.

Inseriamo un nuovo controllo nella Toolbox (tasto dx –> Choose Item), cerchiamo e selezioniamo il DataPager:

1_data_pager_on_toolbox

Adesso trasciniamolo dalla toolbox alla pagina:

1_data_pager_on_page

 

Settiamo il width in auto dalle proprietà.
Torniamo sulla finestra Data Sources (vista nel post precedente), e dragghiamo dentro il pager l’entity Customer

2_drag_entity

ed ecco cosa otteremo lato codice

E’ stato cos’ bravo da capire che in realtà abbiamo già un domain data source nel nostro xaml e ha creato direttamente un binding :)

Prima di fare F5 tornate al CustomerDomainService creato in precedenza e togliete il Take(10); bene, runniamo!!!

3_pager_customer

 

Ed ecco i nostri dati paginati.

Adesso facciamo un’altra figata con 3 click.

Torniamo alla nostra DataSource clicchiamo sulla freccia che compare nella voce Customer e selezioniamo Details:

4_detail_view

una volta selezionata la Details possiamo anche scegliere come i nostri dati saranno renderizzati

5_render_detail

Trasciniamo il nostro Customer dentro la pagina è questo sarà il risultato:

6_render_detail_in_page

Adesso dobbiamo cambiare un paio di proprietà (scrivo velocemente l’elenco):

DataContext: di default è il customerDomainDataSource. Clicchiamo sopra e si aprirà una nuova finestra e cambieremo il binding con la nostra griglia.
Quindi clicchiamo in alto su Source scegliamo ElementName e selezioniamo la griglia customerDataGrid e, andando su Path, selezioniamo la voce SelectedItem (forse scrivere l’xaml per alcuni risulta più semplice… almeno per me). Andiamo sotto Options e selezioniamo Mode = TwoWay. Ed ecco, l’ovvio, risulato lato xaml:

DataContext="{Binding ElementName=customerDataGrid, Path=SelectedItem, Mode=TwoWay}"

Runniamo e controlliamo il risultato.

Veloce e carino :D

0x1d5f8aa5, 0x6a22, 0x4221, 0xbd, 0x2a, 0xa4, 0x6f, 0xb8, 0xe4, 0x7f, 0xf3

[top]

2405/10 0

Creare un modulo per spedire mail con InfoPath

Un paio di post fà è stato creato un modulo per spedire richieste di supporto tecnico usando semplicemente una Custom List Sharepoint.
In questo post invece useremo InfoPath partendo da zero.
Quindi apriamo InfoPath e selezioniamo Sharepoint List:

1_sharepoint_list

Scegliamo il nostro server Sharepoint

2_il_server

Diamo il nome alla nostra nuova lista

3_create_new_list

E iniziamo a modellare l’aspetto di layout della tabella cliccando sulla tabella e dopo su Layout e aggiungiamo delle righe:

4_layout

Andiamo sotto Home e iniziamo ad inserire delle text box:

5_add_textbox

Sulle proprietà del controllo, modifichiamo il nome e aggiungiamo la Rule per controllare se il valore inserito è una mail

6_text_fields

Continuiamo ad aggiungere i campi necessari e, fuori dalla tabella, inseriamo un picture button

8_picture_button

Andiamo sulle sue proprietà e selezioniamo l’immagine da usare per il pulsante e un’eventuale immagine da usare quando il mouse è sopra l’immagine.
Sulle Action del pulsante scegliamo la voce Submit

9_action_submit

Andiamo sulla scheda File e clicchiamo su Advanced form options e decheckiamo lo Show InfoPath commands in Ribbon on toolbar che, come dice il nome, è qualcosa di veramente pomposo!!!

10_ribbon

Il risultato sarà qualcosa di questo tipo (io non ho usato la picture button)

11_modulo

Pubblica qul vostro Sharepoint e verrà creata anche la lista annessa.

0xe1c765c4, 0x9d13, 0x4d43, 0xbc, 0x1a, 0x2d, 0xc9, 0x41, 0x9d, 0x91, 0x7c

[top]

2105/10 0

Creare una Custom List come modulo per spedire Mail

Ecco come creare una custom list in Sharepoint 2010 da utilizzare come modulo per spedire mail del nostro portale.

Per prima cosa creeremo una Custom List che utilizzeremo come repository per le mail che gli utenti spediranno:

1_create_custom_list

Adesso, tramite il designer creiamo una nuova pagina ed inseriamo la nostra web part di tipo New Item Form e modifichiamo il testo alla sua sinistra

2_create_new_item_form

Se volete validare i campi, vi consiglio di mettere del codice javascript nella vostra pagina… oppure usate InfoPath……………

bye

0x31d346be, 0x7cfc, 0x4fa2, 0x8e, 0xcb, 0xe9, 0x2, 0x3b, 0xe1, 0xdc, 0xc9

[top]

1905/10 0

WCF RIA Services: Applicazione client

Nel post precedente abbiamo creato un service model per ottenere i dati dalla tabella Customer.

In questo post vedremo di utilizzare i dati che otteniamo da questa entità tramite il metodo generato GetCustomers.
Prima di usare questo metodo conviene applicare un paio di accorgimenti:

public IQueryable GetCustomer()
{
    return this.ObjectContext.Customer.OrderBy(o => o.CustomerID).Take(10);
}

OrderBy ci servirà più avanti quando useremo il Pager mentre il Take ci serve per non far bombare il buffer del WCF.

Innanzitutto vorrei farvi notare come, visualizzando tutti i files all’interno del nostro progetto client, troverete una directory Genetared_Code:

1_proxy

Questo è il nostro proxy che crea il legame tra il progetto server e il progetto client.

Creiamo una directory Customer sotto la directory Views e aggiungiamo una pagina di nome Customers:

1_add_page

E aggiungiamo il seguente codice xaml al file MainPage.xaml:

                        

                        

Rinominate in Link3 l’About che era prima Link2.
Adesso aggiungiamo una directory Views\Customers e aggiungiamo una pagina Customer:

2_page
3_trees

Adesso aggiungiamo una datagrid alla nostra pagina (vorrei sottolineare che in questo tutorial non userò MVVM) .
Quindi apriamo la finestra Data Source e tranisciamo dentro la nostra grigli il service Customer sotto la CustomerDataContext:

4_data_sources

 

 

Centriamo la griglia e mettiamo in Auto sia il Width che Height e selezioniamo l’AutoGenerateColumns. Avviamo l’applicazione:

5_data_grid

forte no!?
Ma abbiamo fatto ancora ben poco… alla prox :)

0xeb88f2e6, 0x5b48, 0x42f9, 0x8e, 0x2, 0x35, 0x8d, 0x52, 0x7c, 0xb1, 0x1d

[top]

1805/10 0

Bing e Sushi

In Microsoft la pensano come me

sushi

0xf3009ad6, 0xfdbe, 0x4598, 0x99, 0xb9, 0x82, 0xd0, 0xb0, 0xa2, 0x98, 0xf8

[top]

1705/10 0

Custom list per visualizzare un elenco di announcements e una dispform custom per visualizzare un elemento.

Creiamo una lista custom per la visualizzazione dei nostri items in una lista di tipo announcements.

 news6

Una volta creata questa Data…WebPart, possiamo modificarne l’xslt in modo da fargli puntare ad un’altra pagina (per comodità io ho modificato direttamente l’xslt ma se dovete creare solamente un link potete farlo direttamente dal designer):

news1

A causa di un bug se provate a dichiarare la variabile in querystring come ID invece che NewsID, otterrete questo errore: http://support.microsoft.com/kb/972225

A questo punto creiamo la pagina DispNews e aggiungiamo un’altra Empty Data View per visualizzare un item.
Aggiunta, selezioniamo la data source e i campi che vogliamo visualizzare.
Fatto questo andiamo sul pulsante Parameters del designer e aggiungiamo la nostra variabile:

news7

Adesso dobbiamo applicare un Filter sennò non cambierà mai item!!!:

news8

Ed adesso possiamo modificare l’xslt ottenuto:

news9

Bye

0x69939006, 0x5cad, 0x470d, 0x96, 0x20, 0x82, 0xff, 0x7b, 0xd0, 0x92, 0x4b

[top]

1405/10 0

Sharepoint 2010: Un nuovo portale con template Publishing da customizare

Mi sono trovato a dover customizzare una web application con template di tipo Publishing:

publishing_portal

Una volta creata la Web Application, ho avuto la necessità di creare una master page per le pagine che utilizzerò per gli utenti anonimi.

Tanto per creare un pò di confusione abbiamo varie master page:

new_master_page

 

La confusione non è sul numero di master page ma sui loro nomi.
Di default non viene usata la default.master (dai dillo che l’avevi pensato!!!) ma la v4.master. La default.master viene usata per mantenere compatibilità con il passato.
La pagina minimal.master (è quella da dove sono partito per creare la mia master page custom) è la master page con il minimo necessario a Sharepoint per avere una master page funzionante.
La master page nightandday.master è una master page da usare con le funzionalità del nostro Web content management.

Quindi ho fatto una copia della minimal.master e lo rinominata adeguatamente.
Adesso possiamo aprire la master page e modificarla come ci serve.
Le pagine che andranno nella parte di front-end del mio sito, userano questa master page.

Bye

0x9d6bc530, 0x2588, 0x40ab, 0x93, 0x65, 0x3a, 0xec, 0x87, 0xcf, 0xa6, 0xf

[top]

1205/10 0

WCF RIA Services: Data Models e Domain Service

Aggiungiamo, alla solution creata nel post precedente, un data model. Per l’esempio userò AdventureWorks.
Ovviamente il data model risiederà nel middle-tier.

Data Model:

Per aggiungere il data model faremo click con il tasto destro sopra il progetto SilverlightApplicationPostExample.Web e selezioneremo l’item ADO.NET Entity Data Model:

adonet entity data model

Chiamiamo l’item AdventureWorks e selezioniamo l’opzione Generate From Database.
Selezioniamo/creaimo la connessione all’instanza dell’engine del nostro database:

sql connection

Andando avanti selezioniamo le tabelle Address, Customer e CustomerAddress. Clicchiamo su Finish.
Il risultato sarà:

data model

 

 

 

Domain Service:

Il domain service mette a disposizioni i metodi e le entità alle applicazioni client.
Creiamo un nuovo domain service:

add_domain_service

e lo chiamiamo CustomerDomainService si aprirà una finestra come questa:

domain_service_class

se questa risulta vuota, compilate prima il progetto SilverlightApplicationPostExample.Web quindi riprovate.

Selezionate Customer, Enable editing e Generate associated classes for metadata (quest’ultimo creare altre classi partial sulle quali potremo lavorare in futuro).
(L’OData endpoint sono un set di estensioni del protocollo ATOM le quali semplificano la condivisione di dati sul web.)

Facciamo ok ed otteniamo:

customer_domain_service

 

To be continue…

0x92bf7443, 0x69cc, 0x4e04, 0x8d, 0x9f, 0x9c, 0xe9, 0xdc, 0xf8, 0xae, 0x1f

[top]

1005/10 0

Sharepoint 2010: Abilitare l’accesso Anonymous

Per abilitare l’accesso Anonymous possiamo fare in due maniera:

  1. Vecchia maniera IIS
  2. Maniera Sharepoint (anche questa non tanto nuova, visto che lo facevamo anche con il 2007 :D )

Anyway… ecco i passi da fare nel secondo, semplice caso:

  1. Avviamo il Central Administrator –> Manage Web Applications –> Selezionare la web application –> Authentication Providers –> click su Default
    anonymous1
  2. Abilitare l’anonymous nella finestra successiva
    anonymous2
  3. Andiamo nella nostra Web application e facciamo Site Actions -> Site Settings -> Site Permissions –> cliccare su Anonymous Access e scegliere il tipo di accesso desiderato:
    anonymous3

Click…

0x304248fe, 0x3283, 0x4793, 0xa2, 0xf9, 0x1b, 0x38, 0x4a, 0x2f, 0x6f, 0x5c

[top]