Operazione banale questa ed ormai consueta in moltissime applicazioni web..... scrivo qui una piccola demo per tutti!!!
NB: l'esempio si riferisce alla tabella "Authors" nel DB pubs di MSSql Server 2000, quindi il foglio di stile associato è creato ad hoc per questo esempio, è introdotto anche un XmlControl all'interno della pagina con il nome di XmlDisplay:
version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
match="/">
<style>
.header{font-weight:bold;color:white;background-color:black;}
.value{font-family:arial;font-size:.7em;background-color:silver}
</style>
<table border="1" cellspacing="0" cellpadding="1"
bordercolor="black">
<tr class="header">
<th>Author ID</th>
<th>Last Name</th>
<th>First Name</th>
<th>Phone</th>
<th>Address</th>
<th>City</th>
<th>State</th>
<th>Zip</th>
<th>Contract</th>
</tr>
select='Schema1/authors'>
<tr>
<td nowrap="true" class="value">
<b>
select='@au_id' />
</b>
</td>
<td nowrap="true" class="value">
select='@au_lname' />
</td>
<td nowrap="true" class="value">
select='@au_fname' />
</td>
<td nowrap="true" class="value">
select='@phone' />
</td>
<td nowrap="true" class="value">
select='@address' />
</td>
<td nowrap="true" class="value">
select='@city' />
</td>
<td nowrap="true" class="value">
select='@state' />
</td>
<td nowrap="true" class="value">
select='@zip' />
</td>
<td nowrap="true" class="value">
select='@contract' />
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
Dim strCon As String
strCon = "data source=(local)\VSdotNET; " & _
"database=pubs;integrated security=true"
Dim sqlConn As New SqlConnection(ConnStr)
sqlConn.Open()
Try
Dim strSql As String
strSql = "SELECT * FROM authors FOR XML AUTO, XMLDATA"
Dim cmd As New SqlCommand(strSql, sqlConn)
Dim ds As New DataSet()
'riempio il dataset e passo il controllo XML con il metodo GetXML()
ds.ReadXml(cmd.ExecuteXmlReader(), _
XmlReadMode.Fragment)
XmlDisplay.DocumentContent = ds.GetXml()
Finally
sqlConn.Close()
End Try
powered by IMHO 1.2
Sono molto contento che hanno accettato la mia pubblicazione
alla EGOV2005 International Conference .... un pò di sana
umiltà!
Ed adesso oltre che prepararmi per la sua presentazione dal 22 al 26 agosto a
Copenhagen mi sono dedicato alla scrittura di un altro lavoro dal
titolo: Define ontology for Intelligent Document il quale essendo parte
integrante del lavoro teorico descritto nell'articolo sopra è senzadubbio
una delle prime implementazioni reali di una possibile ontologia il cui scopo e
strutturare qualsiasi documento per la pubblica amministazione
"e-Gov".
Riflessione:
Molti non immaginano neanche quante multinazionali partecipano
ogni anno a questi avvenimenti per cercare di imporre sin dall'inizio i propri
standard nel campo di nuovi linguaggi e/o tecniche implementative, tra gli
ultimi che ho seguito:
Jim Melton Oracle Coorporation jim.melton@acm.org
Andrew Eisenmberg IBM andrew.eisenberg@us.ibm.com
Riguardo a nuove funzioni aggiuntive per il nuovo standard
SQL/XML (uscita fine 2005)
powered by IMHO 1.2
Segnalo questo interessante HowTo sull'interoperabilità tra
Outlook 2003 e WSS 2003 e/o SPS 2003, in particolare per quanto concerne la
creazione automatica di workspaces direttamente dal calendario di
Outlook
powered by IMHO 1.2
Mi è accaduto prorpio oggi mentre stavo facendo girare
su di un server delle applicazioni che sulle macchine di test funzionavano
benissimo.... In particolare la pagina aspx interessata conteneva dei controlli
"requestFieldValidator" i quali una volta attivati impedivano alla pagina di
fare il postback. Mi spiego meglio il problema era che una volta che avevo
riempito tutti i campi obbligatori della mia form, spingendo sul submit button
non accadeva nulla proprio come se qualcosa impedisse alla pagina di scatenare
il postback!
Guardando sulla documentazione mi sono reso conto che sul server erà
installata una versione vecchia dei files js che implementano le funzioni di
validazione lato client ed in particolare la cartella:
"aspnet_client/system_web/1_1_4322"
La soluzione al problema sta nel far eseguire il comando:
"aspnet_regiis -c" il quale si preoccupa di installare la nuova versione dei
WEebUIValidation...
Ecco fatto tutto funziona correttamente.... consiglio comunque di creare una
copia di backup prima dell'installazione della nuova versione dei files js
powered by IMHO 1.2
Senzadubbio ormai è di gran dmoda e forse
anche utile crearsi dei file di configurazione like (machine.config) dove tener
traccia dele impostazioni del programma ed editarle senza andare a toccare il
codice sorgente.... Bene personalmente quando programmo l'interfaccia
ISmartDocument (da come dice Luka
non per molto ancora, speriamo!) sono abituato a creare file
di configurazioned ell'applicazione dove memorizzare, stringhe di connesione al
DB, utenti, ecc.... Nell'esempio riporto un esempio di creazione e
gestione di un modello di file di configurazione.
In questa demo mi trovo nella necessità di creare un file di
configurazione degli utenti della mia applicazione, poichè sono
nell'impossibilità (o non desidero) accedere all'Active Directory aziendale per
gestire gli utenti...
Passo 1 - Creazione del file di configurazione:
version="1.0" encoding="utf-8" ?>
nome="Romeo Pruno" user="romeo.pruno" pwd="mozzarella" level="1" />
nome="Carlo Pinasco" user="carlo.pinasco" pwd="caciocavallo" level="1" />
nome="Gabriele Castellani" user="gabriele.castellani" pwd="provolone" level="2" />
</items>
Passo 2 - Lettura dei valori da
codice:
Dim doc As XPathDocument = New XPathDocument("config.xml")
Dim nav As XPathNavigator = doc.CreateNavigator()
Dim expr As XPathExpression
Try
expr = nav.Compile("//utente[@nome]")
Dim iterator As XPathNodeIterator = nav.Select(expr)
While (iterator.MoveNext())
Dim nav2 As XPathNavigator = iterator.Current.Clone()
nav2.MoveToFirstAttribute()
'scrivo qualcosa es: scrivo i valori in una messagebox
Messagebox.Show("Utente = " + nav2.Value)
'aggiorno i controlli nel taskpane per possibile meorizzazione dei valori
docWord.SmartDocument.RefreshPane()
End While
Finally
'libero le risorse
Catch ex As Exception
'istruzioni per gestione Exception
End Try
Il vantaggio do questa configurazione sta
nella gestione esterna di tute le risorse... immaginaiamoci di dover aggiungere
un nuovo utente direttamente dal file di configurazione, editandolo a mano o
andando a creare direttamente nel Task Pane una sezione personalizzata per la
gestione dell'applicazione!
powered by IMHO 1.2
Ha ragione davvero Luka quando dice che IsmartDocument fa a botte con questo tipo di
controllo... un esempio su tutti è il classico oggetto Calendar....
Vediamo come sia possibile aggiungere un calendario al nostro
taskpane ed allo stesso tempo essere soddisfatti di noi stessi:
Passo 1: Aggiungere una constante nel XSD schema
Const cACTIVEX As String = cNAMESPACE & "#activex"
a questo punto incrementiamo di un controllo la nostra avriabile
cTYPES che tiene conto del totale dei controlli all'interno dello Smart
Document...
Passo 2: SmartDocumentXMLTypeName
Select Case (ControlID)
SmartDocXmlTypeName = cACTIVEX
End Select
Passo 3: SmartDocumentXMLTypeCaption
Select
Case (ControlID)
SmartDocXmlTypeCaption = _
"Il mio primo calendario....speriamo che funzioni!"
End Select
Passo 4: ControlCount
'ritorna il numero di controlli di questo namespace
Case cACTIVEX
ControlCount = 1
Passo 5: ControlID
'impostiamo il range numerico del controllo
Case cACTIVEX
ControlID = ControlIndex + 900
Passo 6:
ControlTypeFromID
'questo è bellissimo.... dobbiamo inserire l'identificatore (GUI) del controllo
Select Case (ControlID)
ControlCaptionFromID = _
"{8E27C92B-1264-101C-8A2F-040224009C02}"
End Select
Passo 7:
PopulateActiveXProps
'scriviamo sottoforma di "valori" le dimensioni del calendario :-)
Select Case ControlID
Case (ControlID)
Props.Write Key:="W", value:="250"
Props.Write Key:="H", value:="200"
End Select
Passo 8:
ControlNameFromID
Select Case ControlID
Case (ControlID)
ControlNameFromID = "Calendar"
Case Else
ControlNameFromID = cNAMESPACE & ControlID
End Select
Abiamo esaurito le API
dedicate all'inizializzazione del controllo... ora dobbiamo permettere il suo
funzionamento:
Dichiariamo ora delle variabili, precisamente una
per la restituzione dell'iggetto Calendar e l'altra per l'identificazione della
Word Application corrente
Private WithEvents objCal As MSACAL.Calendar
Private objApp As Microsoft.Office.Interop.Word.Application
Non ci resta altro che
accedere alle proprietà del controllo attraverso l'utilizzo delle seguenti
variabili globali:
Dim objDoc As Microsoft.Office.Interop.Word.Document
Dim objCalendar As Microsoft.Office.Interop.Word.SmartTagAction
Dim objSel As Microsoft.Office.Interop.Word.Selection
objDoc = Document
objSel = objDoc.ActiveWindow.Selection
If objSel.XMLParentNode.BaseName = "activex" Then
objCalendar = objSel.XMLParentNode.SmartTag.SmartTagActions("Calendar")
If objCalendar.PresentInPane Then
objCal = objCalendar.ActiveXControl
End If
End If
Funziona???? Ve lo chiedo
poichè alcuni sviluppatori sono antipatici a questo controllo e potrebbe non
funzionare... ahahaha!
powered by IMHO 1.2
Segnalo a quanti ancora non la conoscessero (i miei due
stagisti...) la webpart dedicata all'host di controlli .ascx utile per chi vuole
sviluppare usercontrols senza dover rinunciare all'ambiente grafico di
VisualStudio
UgiSharepoint
powered by IMHO 1.2
Riporto qui il post di Carlo Pinasco dove è possibile venire a conoscenza delle possibili problematiche per l'installazione della SP4 per Sql Server 2000! Per fortuna non è stato il caso mio :-)
http://blogs.ugidotnet.org/carlop/archive/2005/05/13/16185.aspx
Penso che molti hanno il problema di condividere più applicazioni server sulla stessa web application, come ade sempio PHP,ASP.NET,JSP ecc.... Allo stesso modo quando estendiamo il nostro virtual server con il servizio Sharepoint non sempre ci viene resa la vita facile! Vi rimando a questo articolo interessante dove potete trovare la soluzione ideale alle varie personalizzazioni che possono essere fatte su IIS6
http://support.microsoft.com/?id=828810
powered by IMHO 1.2
Segnalo con molto piaciere grazie a Marco Bellinaso che anche in italia è OnLine il portale di sviluppo della comunità SP al seguente url http://www.ugisharepoint.it/
powered by IMHO 1.2
In questi giorni mi trovavo nella necessità di spostare alcuni siti SP dalla macchina di sviluppo al server che doveva gestirli, ho guardato un po quà e un po là ed ho riscoperto le funzionalità di Smigrate.exe, infatti questo piccolo tool non è utilizzato soltanto per l'aggiornamento di versioni di SP ma in questo caso mi è stato utilissimo per questo tipo di operazioni. Di seguito vi illustro cosa dovete fare per "migrare" i vostri siti SP da una macchina all'altra:
a) Backup del sito/siti sulla macchina di sviluppo
- eseguire "smigrate.exe" al seguente path \\servername\localdrive\Program Files\Common Files\Microsoft Shared\web server extensions\60\BIN
- eseguire il seguente comando: smigrate -w http://server[/site] -f filename.fwp -u domain\id -pw *
- vi verrà chiesta la password ed attendete per qualche istante (a seconda di quanto è pesante il vostro sito)
- verifictae la presenza del file *.fwp al path da voi specificato
b) Ripristinare sito/siti su macchina di produzione
- Creare un nuovo sito attraverso l'estensione di una nuova application server o semplicemente creando un nuovo sito dal portale
- fermarsi e chiudere il browser al momento di scegliere il template
- eseguire il seguente comando ricordando di metere come "siteurl" il vostro nuovo sito che avete creato: smigrate -r -w siteurl -f filename.fwp -u domain\id -pw *
- vi verrà chiesta la password ed attendete per qualche istante (a seconda di quanto è pesante il vostro sito)
il gioco è fatto, controllate ora che tutto il contenuto sia a suo posto!
*Nota
il comando "smigrate" non riconosce le impostazioni di security sulla amcchina di destinazione (es: account) e funziona sia per siti principali e/o sotto siti
Buon lavoro!
UPDATE:
Da questo post ho scritto un articolo su www.ugisharepoint.it , al seguente url:
http://www.ugisharepoint.it/ShowContent.aspx?Type=knowledge,slide&ID=b14c0d62-70a2-4e44-b5ae-31f597087b97&Page=1&#RET
Buona lettura!
powered by IMHO 1.2