Appunti 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.
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?
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!