Www.devleap.com Sviluppare Smart Document di Office 2003 Introduzione Luca Regnicoli MCSD.NET MCSE+I...

Post on 01-May-2015

213 views 0 download

Tags:

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

luka@devleap.itluka@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

– info@DevLeap.it