Appunti e tecniche su Microsoft Visual Studio e Crystal Reports

Programmazione in Microsoft Visual StudioAppunti e Tecniche su Microsoft Visual Studio e Crystal Reports

In questa guida affronterò alcuni problematiche legate alla piattaforma Microsoft Visual Studio e in particolare alla parte ASP .NET.

 

AGGIORNAMENTI: 05/05/2013: Crystal Reports: come cambiare la connessione al database

 

 

INSTALLAZIONE di un software ASP .NET


In fase di installazione, o di backup o di caricamento sul CVS non tutti i file di un progetto Microsoft Visual Studio ASP .NET sono necessari. Vediamo quali tenere e quali no.

Ecco l'elenco dei file e delle cartelle che vanno eliminati perché non necessari:
1) _UpgradeReport_Files: questa cartella può essere eliminata
2) App_data: questa cartella può essere eliminata
3) My Project: questa cartella può essere eliminata
4) obj: questa cartella può essere eliminata
5) Per le pagine devono rimanere solo le *.aspx, global.asax e web.config tutto il resto non ci va perché è codice che viene messo nella dll del progetto.

Prima di installare il software in produzione si deve:
1) mettere a false la seguente opzione nel filw web.config:
<compilation defaultLanguage="vb" debug="false"/>
2) ricompilare il progetto

WEB.CONFIG
Il file web.config di un progetto Visual Studio ASP .NET contiene tutte le configurazioni del progetto stesso.

NB
Microsoft Visual Studio funziona solo se IIS è perfettamente funzionante ed attivo. A me è capitato che con IIS non funzionante, Visual Studio andava direttamente in crash nel tentativo di aprire un progetto. Questo succede, forse, perché quando si apre un progetto, Visual Studio controlla che ci sia la directory virtuale associata sotto IIS.

 

ERRORE HTTP 500.24 - Internal Server Error


Vediamo come risolvere il seguente errore che io ho avuto sulla piattaforma:
Windows 7 - IIS 7.5 - Applicazione Web ASP .NET 2.0

Mandando in debug la mia applicazione ottenevo il seguente errore:
Errore HTTP 500.24 - Internal Server Error
È stata rilevata un'impostazione di ASP.NET che non si applica in modalità pipeline gestita integrata.

Il problema di questo errore è che si sta cercando di eseguire una applicazione ASP .NET 2.0 sotto IIS 7 in modalità Integrated Mode. Questa modalità è attivata di default.

NB - IIS
Per fare il reset di IIS è sufficiente che dalla riga di comando DOS digitate iisreset. Questo comando resetterà IIS senza avere la necessità di riavviare l'intero servizio. Comando molto uitle per i siti di produzione in quando potete rendere effettive delle modifiche senza avere la necessità di avvisare gli utenti e spegnere e riavviare i servizi.

RIFERIMENTI
Potete leggere l'ottimo articolo "Breaking Changes for ASP.NET 2.0 applications running in Integrated mode on IIS 7.0" qui.
 

Change project build configuration to debug mode


Ovvero vediamo come mandare in run un progetto ASP .NET in debug mode piuttosto che in release mode.
VisualStudioDebugMode

Se vedete la figura in alto, accanto alla freccia verde che manda in run il progetto c'è una combobox tramite la quale indicare la modalità con la quale si manda in run il progetto.
Nella foto la modalità scelta è la DEBUG.
Altra cosa da fare è nel file web.config. Inserire nella sezione <system.web> la seguente linea:
<compilation defaultLanguage="vb" debug="true" />

Quando si manda in produzione il software mettere il valore a false.
Mettere questa opzione a true vuol dire inserire i simboli di debug (informazioni .pdb) nella pagina compilata.

 

Gestire le date in .NET


Le date in Microsoft Visual Studio .NET, per la parte VB (Visual Basic), vengono gestite dalla classe DateTime (o dalla classe Date). Ad esempio, la data corrente la si ottiene tramite il codice:

 

DateTime.Now

 

Se volete trasformare una data in stringa, si utilizza la funzione ToString() della medesima classe.

Ad esempio si può usare il codice:

 

miaData.ToString("dd/MM/yyyy")

 

che ovviamente stampa la data nel formato giorno/mese/anno.

Oppure:

 

miaData.ToString("dd/MM/yyyy HH:mm:ss")

 

se si vuole aggiungere anche l'orario completo di secondi.

Se volete dare una particolare formattazione alla data quando la trasformate in stringa, vi consiglio il link seguente: DateTime.ToString() Patterns

 

Per avere una data in formato stringa usate il seguente codice:

Function formattaData(ByVal data As Date) As String
        Dim nuovaData As String = ""

        Dim giorno As String = ""
        Dim mese As String = ""
        Dim anno As String = ""
        Dim ore As String = ""
        Dim minuti As String = ""
        Dim secondi As String = ""


        giorno = data.ToString("dd")
        mese = data.ToString("MM")
        anno = data.ToString("yyyy")

        If giorno.Length = 1 Then
            giorno = "0" + giorno
        End If

        If mese.Length = 1 Then
            mese = "0" + mese
        End If

        nuovaData = giorno & "/" & mese & "/" & anno

        ore = data.ToString("HH")
        minuti = data.ToString("mm")
        secondi = data.ToString("ss")
        nuovaData = nuovaData & " " & ore & ":" & minuti & ":" & secondi
        
        Return nuovaData
    End Function

 

Questa funzione oltre che formattare la data rende i giorni e i mesi di due cifre.

 

ERRORE configurationsettings.appsettings obsolete

Vediamo ora come fare a correggere il seguente errore:

 

Public Shared ReadOnly Property AppSettings As System.Collections.Specialized.NameValueCollection' is obsolete: 'This method is obsolete, it has been replaced by System.Configuration!System.Configuration.ConfigurationManager.AppSettings'

 

Questo errore indica che il metodo

 

ConfigurationSettings.AppSettings.Get("mioParametro")

 

e' obsoleto. Cosa usare allora al suo posto? L'errore stesso ci suggerisce la correzione. Prima però bisogna apportare una modifica al progetto .NET.

Andate sulla root de progetto e fate click destro e scegliete la voce Properties. Poi andate nel tab References e cliccate sul pulsante Add... per aggiungere una nuova libreria. Aggiungete quindi la System.configuration.dll e salvate.

Importata la libreria il nostro codice deve essere trasformato così:

 

System.Configuration.ConfigurationManager.AppSettings.Get("mioParametro")

 

 

 

CRYSTAL REPORTS

Fino alla versione 2008 di Microsoft Visual Studio potevate trovare tutto il necessario per creare report in Crystal Reports. Dalla versione di Visual Studio 2010 (VS2010) tutto ciò non è più possibile. Il pacchetto Crystal Reports (o semplicemente CR) è stato eliminato dal Visual Studio. Però, dal sito SAP, potete scaricare il SAP Crystal Report for Visual Studio 2010, sempre gratuito e sempre senza registrazione.

Per poterlo utilizzare dovete avere almeno Microsoft Visual Studio 2010 Professional (con il Visual Studio Express non funziona).

I report, se usati internamente, non hanno bisogno di una licenza aggiuntiva.

 

La pagina ufficiale del prodotto SAP Crystal Reports for Visual Studio la trovate qui e da qui potete scaricare il plugin per VS2010. 

Per l'installazione ricordate che: il pacchetto di istallazione deve essere solo quello a 32 bit; in IIS si devono abilitare le applicazioni a 32 bit.

 

Come creare un report

Non sapete come si crea un report con CR?

Un'ottima giuda su come creare un report la trovate qua Generate a Report using Crystal Reports in Visual Studio 2010.

 

Cambiare a runtime il collegamento al database

Volete, tramite VB .NET, cambiare a runtime il collegamento al database di un report Crystal Reports? Ecco qui la risorsa giusta.

 

Passare a runtime i parametri al Crystal Reports

Come passare i parametri a Crystal Reports? Ad esempio avete un report parametrico e a runtime gli volete passare i parametri? Leggete qui oppure qui. In sintesi, il passaggio del parametro dinamicamente al report si fa così:

 

 

//Si assegna il valore

Dim pVal As New CrystalDecisions.Shared.ParameterDiscreteValue
pVal.Value = Form1.intPID

//Si deve usare il corretto campo/parametro

Dim pField As New CrystalDecisions.Shared.ParameterField
pField.Name = "intPID" '<-- usare lo stesso nome del parametro usato nel report
pField.CurrentValues.Add(pVal)

//bisogna indicare che il valore e' stato assegnato
pField.HasCurrentValue = True

 

//il parametro deve essere assegnato al viewer
myCrystalReportViewer.ParameterFieldInfo.Clear()
myCrystalReportViewer.ParameterFieldInfo.Add(pField)

 

Limitazioni di Crystal Reports con la versione gratuita

Con la versione gratuita di CR per Visual Studio ci sono però delle limitazioni. Una limitazione è sul numero contemporaneo di utenti sul report che è fissato a 3. E' un limite non della licenza ma del motore di runtime di CR. Altra limitazione è sulla gestione più limitata delle connessioni verso il database.

SAP propone di usare al posto della soluzione gratuita la soluzione chiamata RAS.

 

 

Il report si vede male in Internet Explorer

State usando CR13, e quindi il crystalreportviewers13, e con Internet Explorer 8 (IE8) il report si vede male? Non disperate.

SAP, e quindi CR13, non è più compatibile con IE6.
Bisogna modificare una impostazione nel browser IE8.
Aprite il browser ed andate in Strumenti -> Impostazioni Visualizzazione Compatibilità.
Di default è selezionata l'opzione "Visualizza siti Intranet in Visualizzazione compatibilità". Dovete eliminare la spunta su questa opzione.
Fatto questo ricaricate la pagina con il report e se ancora non si vede bene dovete verificare, sempre nel menu Strumenti, che la voce "Visualizzazione compatibilità" non sia selezionata. Se è selezionata, la de-selezionate e tutto funzionerà.

Questo perché il nuovo Crystal Reports non è compatibile con IE6, e vedendo i siti in versione "Compatibilità" li vedete come su IE6.

 

 

Volete conoscere la compatibilità di CR13 con le varie piattaforme? Leggete qui.

 

Errore bobj is undefined

Un altro problema che si ha con CR13, ovvero con il Crystal Reports Viewer 13, è che con IE8 spesso si ottiene il seguente errore javascript:

 

bobj is undefined

 

Se avete questo errore il report non si vede proprio. E' un problema legato al codice javascript del Crystal Reports Viewer. La soluzione è quella di prendere il codice javascript e portarlo del il progetto VB .NET.

Quando installate il motore run time CRforVS_redist_install_32bit_13_0.exe troverete la cartella C:\inetpub\wwwroot\aspnet_client\system_web\4_0_30319\crystalreportviewers13 che contiene il codice javascript in questione.

Dovete copiare questa cartella nel vostro progetto e aggiungere nel web.config le seguenti linee:

<configSections>
<sectionGroup name="businessObjects">
<sectionGroup name="crystalReports">
<section name="rptBuildProvider"
type="CrystalDecisions.Shared.RptBuildProviderHandler, CrystalDecisions.Shared,
Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304,
Custom=null" />
<section name="crystalReportViewer"
type="System.Configuration.NameValueSectionHandler" />
</sectionGroup>
</sectionGroup>
</configSections>

 

e

 

<businessObjects>
<crystalReports>
<rptBuildProvider>
<add embedRptInResource="true" />
</rptBuildProvider>
<crystalReportViewer>
<add key="ResourceUri" value="/crystalreportviewers13" />
</crystalReportViewer>

</crystalReports>
</businessObjects>

 

In questa maniera il codice javascript è interno al progetto e non avrete più l'errore "bobj is undefined".

 

Crystal Reports e la formula della paginazione in Italiano

Per avere la paginazione in italiano usare la seguente formula:

"Pagina " + ToText (PageNumber,0) + " di " + ToText(TotalPAgeCount, 0)

 

Crystal Reports: come cambiare la connessione al database

Per cambiare la connessione al database bisogna:
- Tasto destro sul nome della tabella -> Imposta percorso origine dati

- Se la connessione è già presente selezionare la tabella interessata e cliccare su aggiorna

- Se la connessione non esiste -> crea nuova connessione OLE DB -> Sql Server Native Client -> selezionare il server e inserire i parametri di connessione e poi aggiornare come sopra

 

 

Autenticazione LDAP con VB .NET

Un ottimo punto di partenza è il seguente articolo: Modalità di autenticazione in Active Directory utilizzando l'autenticazione basata su form e Visual Basic .NET

 

USO DI STORED PROCEDURE DA VB .NET

Come si fa ad invocare una stored procedure tramite VB .NET? Come si fa a passare i parametri?

Leggete questa guida qui.

 

Componente GridView in VB .NET

Il componente GridView è utilissimo quando volete mostrare il contenuto di una tabella in formato griglia.

Nella pagina aspx mettete il codice:

 

<asp:GridView ID="GridViewMy" runat="server" AllowPaging="True">

</asp:GridView>

 

Questa è la funzione che carica i dati dalla tabella al componente:

 

Public Sub loadGridView()
        Dim ConnectionToFetch As New SqlConnection
        Dim SampleSource As New DataSet
        Dim SelectQry = "select * from TABELLA"
        Dim SampleCommand As New SqlCommand()
        Dim SampleDataAdapter = New SqlDataAdapter()
        
        Try
            ConnectionToFetch.ConnectionString = System.Configuration.ConfigurationManager.AppSettings.Get("DBG_StrConn_DB_F")
            ConnectionToFetch.Open()

            SampleCommand.CommandText = SelectQry
            SampleCommand.Connection = ConnectionToFetch
            SampleDataAdapter.SelectCommand = SampleCommand

            SampleDataAdapter.Fill(SampleSource)

            GridViewMy.DataSource = SampleSource.Tables(0)
            GridViewMy.CssClass = "mio_css"
            GridViewMy.DataBind()
        Catch e As Exception
            'gestione dell'eccezione
        Finally
            ConnectionToFetch.Close()
        End Try

    End Sub

 

RIFERIMENTI

- Una ottima guida per iniziare con il Visual Basic .NET la trovate qua.

- Visual Studio Team Foundation Server Express 2012: gestione gratuita del ciclo di vita del software

 

Tutto qua!

Buon lavoro!