Www.devleap.com Sviluppare Smart Document di Office 2003 Introduzione Luca Regnicoli MCSD.NET MCSE+I...
-
Upload
bartolommeo-catania -
Category
Documents
-
view
213 -
download
0
Transcript of Www.devleap.com Sviluppare Smart Document di Office 2003 Introduzione Luca Regnicoli MCSD.NET MCSE+I...
www.devleap.comwww.devleap.com
Sviluppare Smart Sviluppare Smart Document di Office Document di Office
20032003
IntroduzioneIntroduzione
Luca RegnicoliLuca RegnicoliMCSD.NET MCSE+I MCDBA MCTMCSD.NET MCSE+I MCDBA MCT
[email protected]@devleap.it
www.devleap.com
Chi siamoChi siamo
• www.devleap.itwww.devleap.it• Un gruppo di 5 personeUn gruppo di 5 persone
• Studiare a fondo le tecnologieStudiare a fondo le tecnologie• Capire il “behind the scenes”Capire il “behind the scenes”• Implementare soluzioni realiImplementare soluzioni reali• Confrontarsi con le problematiche realiConfrontarsi con le problematiche reali• Sperimentare nuove ideeSperimentare nuove idee
• Facciamo Corsi, Conferenze, TrainingFacciamo Corsi, Conferenze, Training• Scriviamo libriScriviamo libri
• http://www.devleap.it/fullcontacthttp://www.devleap.it/fullcontact
www.devleap.com
AgendaAgenda
• Cos’è una soluzione SmartDocumentCos’è una soluzione SmartDocument• Requisiti di una soluzione Requisiti di una soluzione
SmartDocumentSmartDocument• Architettura di SmartDocumentArchitettura di SmartDocument
• Assembly e ISmartDocumentAssembly e ISmartDocument• ManifestManifest• SchemaSchema
• SecuritySecurity
www.devleap.comwww.devleap.com
Smart Document BasicsSmart Document Basics
Parte IParte I
www.devleap.com
Che cos’è una soluzione Che cos’è una soluzione SmartDocument?SmartDocument?
• Soluzione che fornisce informazioni Soluzione che fornisce informazioni contestuali ed azioni all’interno del task contestuali ed azioni all’interno del task panepane
• Scenari di utilizzoScenari di utilizzo• Compilazione di un’offerta commercialeCompilazione di un’offerta commerciale• Generazione di un documento contrattualeGenerazione di un documento contrattuale• Gestione di un budget finanziarioGestione di un budget finanziario
www.devleap.com
Requisiti di una soluzione Requisiti di una soluzione SmartDocumentSmartDocument
• PC ClientPC Client• Office System 2003 ProfessionalOffice System 2003 Professional
• oppure versioni stand-alone di Word o Excel 2003oppure versioni stand-alone di Word o Excel 2003
• Se utilizziamo .NET Se utilizziamo .NET • .NET Framework 1.1.NET Framework 1.1
• PC SviluppoPC Sviluppo• Office System 2003 ProfessionalOffice System 2003 Professional• Visual Studio .NET 2003Visual Studio .NET 2003
• Oppure un ambiente di sviluppo COMOppure un ambiente di sviluppo COM
• Microsoft Office SmartDocument SDKMicrosoft Office SmartDocument SDK• Non è fondamentale, ma è un utile “contenitore” di Non è fondamentale, ma è un utile “contenitore” di
sample, tool e documentazionesample, tool e documentazione
www.devleap.com
Architettura Smart DocumentArchitettura Smart Document
XML expansion pack
DLL Assembly
Office document
Schema file
Manifest file
Altri assemblies
www.devleap.com
DLL / AssemblyDLL / Assembly
• Deve contenere una classe che implementi Deve contenere una classe che implementi l’interfaccia COM ISmartDocumentl’interfaccia COM ISmartDocument
• Può essere scritto con qualsiasi linguaggio Può essere scritto con qualsiasi linguaggio che sia in grado di implementare un che sia in grado di implementare un interfaccia COMinterfaccia COM• Visual Basic 6.0Visual Basic 6.0• Visual C++ 6.0Visual C++ 6.0• DelphiDelphi• .NET (Interop).NET (Interop)
www.devleap.com
Interfaccia ISmartDocumentInterfaccia ISmartDocument
•ProprietàProprietà•SmartDocXmlTypeCountSmartDocXmlTypeCount•SmartDocXmlTypeCaptionSmartDocXmlTypeCaption•SmartDocXmlTypeNameSmartDocXmlTypeName•ControlCountControlCount•ControlIDControlID•ControlNameFromIDControlNameFromID•ControlCaptionFromIDControlCaptionFromID•ControlTypeFromIDControlTypeFromID
•MetodiMetodi•SmartDocInitializeSmartDocInitialize•Populate<Populate<ControlTypeControlType>>•On<On<ControlTypeControlType>Change>Change•ImageClickImageClick•InvokeControlInvokeControl
www.devleap.com
ISmartDocumentISmartDocument• Non posso invocare direttamente i metodi o le Non posso invocare direttamente i metodi o le
proprietàproprietà• Devo “attendere” che il runtime passi il controllo ai Devo “attendere” che il runtime passi il controllo ai
nostri metodi/proprietànostri metodi/proprietà• ControlCountControlCount• PopulateListOrComboContentPopulateListOrComboContent
• Non pilotiamo direttamente i controlli Non pilotiamo direttamente i controlli • NONO textBox1.Text = “Luca” textBox1.Text = “Luca” • NONO string s = comboBox1.SelectedItem.Text string s = comboBox1.SelectedItem.Text
• Non possiamo gestire esplicitamente eventi sui Non possiamo gestire esplicitamente eventi sui controllicontrolli• NONO private void button1_Click (object o, EventArgs e) private void button1_Click (object o, EventArgs e)
www.devleap.com
TerminologiaTerminologia
• Tipi XmlTipi Xml• Contenitori di controlli Contenitori di controlli • Definiti nelle proprietà Definiti nelle proprietà SmartDocXmlType*SmartDocXmlType*
• Controlli Smart DocumentControlli Smart Document• Controlli UI definiti all’interno di tipi XMLControlli UI definiti all’interno di tipi XML• Definiti nelle proprietà Definiti nelle proprietà Control*Control*• Devono avere ID unico all’interno Devono avere ID unico all’interno
dell’intero task panedell’intero task pane
www.devleap.com
Creare Tipi XmlCreare Tipi Xml• SmartDocXmlCountSmartDocXmlCount
• 1 o n1 o n
• SmartDocXmlNameSmartDocXmlName• NomeSchema#nomeElementoDelloSchema NomeSchema#nomeElementoDelloSchema • Per creare un task pane persistentPer creare un task pane persistent
•#actionPertainsToEntireSchema#actionPertainsToEntireSchema
• SmartDocXmlCaptionSmartDocXmlCaption• ““Esempio di SmartDocument” Esempio di SmartDocument”
www.devleap.com
Creare controlli Smart Creare controlli Smart DocumentDocument
• ControlCount ControlCount • 22
• ControlID ControlID • Come associare l’ID al controlloCome associare l’ID al controllo• Utilizzare ControlIndex passatoci dal runtimeUtilizzare ControlIndex passatoci dal runtime
• ControlTypeFromIDControlTypeFromID• Il controllo con ID = 1 è una labelIl controllo con ID = 1 è una label• Il controllo con ID = 2 è un pulsanteIl controllo con ID = 2 è un pulsante
www.devleap.com
Controlli Smart DocumentControlli Smart Document• ImagesImages• HyperlinksHyperlinks• Check boxesCheck boxes• List boxesList boxes• Combo boxesCombo boxes• Radio buttonsRadio buttons• Text boxesText boxes• LabelsLabels• SeparatorsSeparators• ActiveX controlsActiveX controls• Document fragmentsDocument fragments
www.devleap.com
Gestire clickGestire click
• InvokeControlInvokeControlswitch (ControlID)switch (ControlID)
{{case 2:case 2:
MessageBox.Show (“Pulsante cliccato”); MessageBox.Show (“Pulsante cliccato”);
......
}}
www.devleap.com
<manifest xmlns=<manifest xmlns="http://schemas.microsoft.com/office"http://schemas.microsoft.com/office/xmlexpansionpacks/2003">/xmlexpansionpacks/2003">
</manifest></manifest>
<manifest xmlns=<manifest xmlns="http://schemas.microsoft.com/office"http://schemas.microsoft.com/office/xmlexpansionpacks/2003">/xmlexpansionpacks/2003">
</manifest></manifest>
Struttura del file ManifestStruttura del file Manifest<manifest xmlns=<manifest xmlns="http://schemas.microsoft.com/office"http://schemas.microsoft.com/office/xmlexpansionpacks/2003">/xmlexpansionpacks/2003">
descrizione del manifestdescrizione del manifest
<solution><solution>descrizione della solutiondescrizione della solution
</solution></solution>
</manifest></manifest>
<manifest xmlns=<manifest xmlns="http://schemas.microsoft.com/office"http://schemas.microsoft.com/office/xmlexpansionpacks/2003">/xmlexpansionpacks/2003">
descrizione del manifestdescrizione del manifest
<solution><solution>descrizione della solutiondescrizione della solution
</solution></solution>
</manifest></manifest>
www.devleap.com
Manifest - Elementi fileManifest - Elementi file
<solution><solution>
. . .. . .
<file><file> <type>solutionActionHandler</type> <type>solutionActionHandler</type> <filePath>bin\Codice.dll</filePath> <filePath>bin\Codice.dll</filePath>
<CLSNAME>Libreria.ClasseAzione</CLSNAME><CLSNAME>Libreria.ClasseAzione</CLSNAME> <managed/> <managed/>
</file></file>
</solution></solution>
<solution><solution>
. . .. . .
<file><file> <type>solutionActionHandler</type> <type>solutionActionHandler</type> <filePath>bin\Codice.dll</filePath> <filePath>bin\Codice.dll</filePath>
<CLSNAME>Libreria.ClasseAzione</CLSNAME><CLSNAME>Libreria.ClasseAzione</CLSNAME> <managed/> <managed/>
</file></file>
</solution></solution>
www.devleap.com
Manifest - Elementi fileManifest - Elementi file
<solution><solution>
. . .. . .
<file><file> <type>schema</type> <type>schema</type> <filePath>bin\Schema.xsd</filePath> <filePath>bin\Schema.xsd</filePath> </file> </file>
</solution></solution>
<solution><solution>
. . .. . .
<file><file> <type>schema</type> <type>schema</type> <filePath>bin\Schema.xsd</filePath> <filePath>bin\Schema.xsd</filePath> </file> </file>
</solution></solution>
www.devleap.com
SchemaSchema<xs:schema <xs:schema xmlns=“urn:Devleap.SmartDocuments.Demo"xmlns=“urn:Devleap.SmartDocuments.Demo"xmlns:xs="http://www.w3.org/2001/XMLSchema">xmlns:xs="http://www.w3.org/2001/XMLSchema">
......
<xs:element name="cliente"><xs:element name="cliente"><xs:element name="nome" type="xs:string"/><xs:element name="nome" type="xs:string"/><xs:element name="cognome" type="xs:string"/><xs:element name="cognome" type="xs:string"/><xs:element name="email" type="xs:string" /><xs:element name="email" type="xs:string" />
</xs:element></xs:element>
......
</xs:schema></xs:schema>
<xs:schema <xs:schema xmlns=“urn:Devleap.SmartDocuments.Demo"xmlns=“urn:Devleap.SmartDocuments.Demo"xmlns:xs="http://www.w3.org/2001/XMLSchema">xmlns:xs="http://www.w3.org/2001/XMLSchema">
......
<xs:element name="cliente"><xs:element name="cliente"><xs:element name="nome" type="xs:string"/><xs:element name="nome" type="xs:string"/><xs:element name="cognome" type="xs:string"/><xs:element name="cognome" type="xs:string"/><xs:element name="email" type="xs:string" /><xs:element name="email" type="xs:string" />
</xs:element></xs:element>
......
</xs:schema></xs:schema>
www.devleap.com
Security Security
• XML expansion pack securityXML expansion pack security• Manifest può essere caricato solo se è stato Manifest può essere caricato solo se è stato
firmato con un certificato digitalefirmato con un certificato digitale• XMLSign.exe [SDK]XMLSign.exe [SDK]• DisableXMLExpansionPackSecurity.reg DisableXMLExpansionPackSecurity.reg
• Solo sulle macchine di sviluppo!Solo sulle macchine di sviluppo!
• Se utilizziamo .NET Se utilizziamo .NET • Office si “fida” di mscoree.dll Office si “fida” di mscoree.dll • Ma non si “fida” del nostro assemblyMa non si “fida” del nostro assembly• L’assembly deve avere permission di FullTrustL’assembly deve avere permission di FullTrust
www.devleap.com
Collegare Manifest al Collegare Manifest al documentodocumento
• In Word 2003In Word 2003• Menu “Tools” - “Templates and Add-ins”Menu “Tools” - “Templates and Add-ins”
• In Excel 2003In Excel 2003• Menu “Data“ - ”XML” - “XML Expansion Menu “Data“ - ”XML” - “XML Expansion
Packs”Packs”
www.devleap.com
Sviluppo .NETSviluppo .NET
• Utilizzare i Primary Interop Assembly Utilizzare i Primary Interop Assembly per Officeper Office
• Microsoft.Office.Interop.SmartTag.dllMicrosoft.Office.Interop.SmartTag.dll• ISmartDocumentISmartDocument
• Microsoft.Office.Interop.ExcelMicrosoft.Office.Interop.Excel• Microsoft.Office.Interop.WordMicrosoft.Office.Interop.Word
www.devleap.com
Primary Interop AssemblyPrimary Interop Assembly
• Come vedere se sono installatiCome vedere se sono installati• Global Assembly CacheGlobal Assembly Cache
www.devleap.com
Primary Interop AssemblyPrimary Interop Assembly
• Come installare Come installare Microsoft.Office.Interop.SmartTag.dllMicrosoft.Office.Interop.SmartTag.dll
www.devleap.com
Primary Interop AssemblyPrimary Interop Assembly
• Come installare Come installare Microsoft.Office.Interop.Word.dllMicrosoft.Office.Interop.Word.dll
www.devleap.com
Primary Interop AssemblyPrimary Interop Assembly
• Come vedere se li stiamo referenziando Come vedere se li stiamo referenziando correttamente da Visual Studio .NETcorrettamente da Visual Studio .NET
www.devleap.com
Ricapitolando... Step By StepRicapitolando... Step By Step• Aggiungere la reference COM a “Microsoft Smart Tag 2.0 Type Library”Aggiungere la reference COM a “Microsoft Smart Tag 2.0 Type Library”• Implementare l’interfaccia ISmartDocumentImplementare l’interfaccia ISmartDocument• Definire il namespace di baseDefinire il namespace di base• Definire il tipo XML del documento “#actionPertainsToEntireSchema” Definire il tipo XML del documento “#actionPertainsToEntireSchema” • Implementare le proprietà dell’interfaccia ISmartDocumentImplementare le proprietà dell’interfaccia ISmartDocument
• Caption dei controlliCaption dei controlli• Numero di controlliNumero di controlli• Id dei controlliId dei controlli• Tipo di controlliTipo di controlli• Nome dei controlliNome dei controlli• Controllare le azioni dei controlli quali button Controllare le azioni dei controlli quali button • Impostare la caption del task paneImpostare la caption del task pane• Numero di tipi xml del task paneNumero di tipi xml del task pane• Nome dei tipi xml del task paneNome dei tipi xml del task pane
• Creare lo schema xml Creare lo schema xml • Creare il manifestCreare il manifest• Configurare la Code Access Security Configurare la Code Access Security
• L’assembly deve avere diritto di FullTrustL’assembly deve avere diritto di FullTrust• Aggiungere l’xml expansion pack al documentoAggiungere l’xml expansion pack al documento
www.devleap.comwww.devleap.com
Demo SmartDocumentDemo SmartDocument
Finalmente del codice....Finalmente del codice....
www.devleap.com
Altre InformazioniAltre Informazioni
• Dove posso ottenere maggiori Dove posso ottenere maggiori informazioniinformazioni• http://www.devleap.it/http://www.devleap.it/• http://msdn.microsoft.com/officehttp://msdn.microsoft.com/office• http://www.microsoft.com/italy/msdn/http://www.microsoft.com/italy/msdn/
• Developer resourcesDeveloper resources• Microsoft Visual Studio.NETMicrosoft Visual Studio.NET• Microsoft .NET Framework SDKMicrosoft .NET Framework SDK• Microsoft Developer NetworkMicrosoft Developer Network• Microsoft Office 2003 Smart Document SDKMicrosoft Office 2003 Smart Document SDK
www.devleap.com
Sviluppare Smart Document di Office Sviluppare Smart Document di Office 20032003
I vostri feedback sono importantiI vostri feedback sono importanti•ScriveteciScriveteci
Grazie della partecipazione– A presto