340 likes | 473 Views
Aplikacje oparte na VS/Office. Rozszerzanie VS , MSOffice. Cel: nowe narzedzia integracja środowisk pracy platforma aplikacyjna (MSOffice) Środki: Snippety Makra Własna strona startowa np.: TFS stats/ostatnie błędy/zadania Wtyczki A plikacje oparte na VS. Rozszerzanie VS - jak.
E N D
Rozszerzanie VS, MSOffice Cel: • nowe narzedzia • integracja środowisk pracy • platforma aplikacyjna (MSOffice) Środki: • Snippety • Makra • Własna strona startowa np.: TFS stats/ostatnie błędy/zadania • Wtyczki • Aplikacje oparte na VS
Rozszerzanie VS - jak • Wtyczki i kreatorzy • natywny model obiektowy • obiekty ActiveX • projekt integracji VS (VSIP) (VS2008) • VSIX (VS2010) • MEF • VS SDK VS SDK Samples • MS VS Shell – tryb zintegrowany lub wydzielony • Visualization and Modeling Feature Pack
VS - wtyczki Model COM : Wtyczka VS Dostęp obejmuje: • makra • narzędzi • ustawień • praktycznie wszystkich okien (m.in.Toolboxy, Code Editor, Solution Explorer itd.) • kontrolę np.: edycji kodu, debugingu, konfiguracji itd
Realizacja wtyczek • OnConnection – wywoływana jest w momencie ładowania dodatku • OnDisconnection – wywoływana w momencie wyłączenia dodatku • OnStartupComplete – wywoływana po załadowaniu się środowiska (Visual Studio, Word itd.) • OnAddInsUpdate – powiadomienie o zmianach w kolekcji dodatków • OnBeginShutdown – powiadomienie o zamykaniu środowiska; przydatne aby na przykład zapisać konfigurację
OnConnection if (connectMode == Extensibility.ext_ConnectMode.ext_cm_UISetup || connectMode == Extensibility.ext_ConnectMode.ext_cm_Startup || connectMode == Extensibility.ext_ConnectMode.ext_cm_AfterStartup) • sprawdzenie trybu uruchamiania • zapamietanie obiektow globalnych • tworzenie elementow interfejsu
QueryStatus public void QueryStatus(string commandName, vsCommandStatusTextWanted neededText, ref vsCommandStatus status, ref object commandText) { if(neededText == vsCommandStatusTextWanted.vsCommandStatusTextWantedNone) { if (commandName == "MyAddin1.Connect.MakeProperty") { status = vsCommandStatus)vsCommandStatus.vsCommandStatusSupported | vsCommandStatus.vsCommandStatusEnabled; } ... • aktualizacja stanu komend
Exec publicvoid Exec(string commandName, EnvDTE.vsCommandExecOption executeOption, refobject varIn, refobject varOut, refbool handled) • punkt wejścia dla wszystkich komend
Rejestracja • plik MyAddin.AddIn powinien zostać umieszczony w katalogu przeglądanym przez VS w poszukiwaniu wtyczek • lista przeszukiwanych katalogów dostępna przez:Tools | Options | Environment | Add-In/Macros Security
Materiały MS o VS automation • http://msdn.microsoft.com/en-us/vsx/default.aspx • http://msdn.microsoft.com/pl-pl/library/xc52cke4(en-us).aspx • http://msdn.microsoft.com/en-us/library/tz746te4.aspx
Makra • Pisane w VBA (podobnie jak MSOffice) • Nagrywanie makr – podglądanie możliwości VS
Start Page • Można personalizowac jej zawartość (projekty/podzakładki/źródło newsów) • Można ją wyłączyć • Można napisać nową np.: • TFS stats/ostatnie błędy/zadania • (XAML) -> VS Gallery -> Custom Start Page Project Template
Szablon • Wbudowane: Program files (x86)/Microsoft/visual Studio 10.0/Common7/IDE/ • Własne: MyDocuments.../Visual Studio 2010\Templates\ • ItemTemplates • ProjectTemplates • 1 plik (zip) -> File/ExportTemplate • Pliki wewnatrz przetwarzanie z użyciem symboli: • $parameter$ • Np.: $projectname$, $safeprojectname$ • Wiecej tutaj: http://msdn.microsoft.com/en-us/library/eehb4faa%28v=vs.100%29.aspx
Szablon - wdrożenie • Należy szablon umieścić w odpowiednim katalogu • Nazwy podkatalogów mozna wykorzystać do kategoryzacji • VS – galery->export VSIX • Export Template Wizard – rozszerzenie pozwalające exportować szablony w formacie VSIX
VSIX • 1 plik (zip) zawiera kod, metadane, help, obrazki, manifest itd • Instalowalny / deinstalowany1 kliknięciem • Możliwe blokowanie bez deinstalacji • Projekt – dostepny po instalacji VS SDK • %VSDirectory%\Common7\IDE\Extensions\ • %VSDirectory%\Common7\IDE\CommonExtensions\ • %LocalAppData%\Microsoft\VisualStudio\10.0\Extensions\
VS vs. MEF • Typy contentu • Klasyfikacja typów i formatów • Marginesy i paski przewijania • Tagi (np. dla linii/lub fragmentów – kolorowanie,sprawdzanie składni) • Dekoracje (elementy rysowane na obszarze edytora) • Obsługa myszy (np gesty) • Obsługa upuszczania • Opcje • IntelliSense i debugger
Przykład • Do projektu typu Editor Margin • textViewHost.TextView.VisualElement.LayoutTransform = new RotateTransform(245); Editor extension points: http://technet.microsoft.com/en-us/query/dd885244%28v=vs.85%29
VSIX - uruchamianie • Druga instancja działa z wydzielona konfiguracja • %LocalAppData%\Microsoft\VisualStudio\10.0Exp\Extensions\ • Dodatkowe logowanie: -i logfile • Można użyc deinstalatora, ale ważne w której instancji VS. • Prywatne galerie: • http://msdn.microsoft.com/en-us/library/hh266746.aspx
Tagi ? przyklad
VSShell • Integrated mode • Narzedzia i języki • Isolated mode: • Pusty" shell z funkcjonalnościa IDE (pliki/drukowanie itd) bez jezyków • Nie wymaga instalacji VS http://msdn.microsoft.com/en-us/library/bb685612.aspx
Platforma aplikacyjna MS Office • VBA (W/E/PP/P/O/I/V/A) • VS Wtyczki dla aplikacji (W/E/PP/P/O/I/V) • Udostępnianie dodatkowej funkcjonalności na poziomie dokumentu (Menu, Actions Pane, SmartTags) • VS Personalizacje Dokumentów (Word/Excel) • Kompleksowe sterowanie aplikacją • kod VS może być wołany z poziomu VBA (i odwrotnie) • Open XML (E/W/PP)
Rozszanie MSOffice • Visual Basic for Aplication • Obiekty COM (rejestrowane przez MS Office) • Zarządzane wrapery (PIO) instalowane z VSTO Witryna o MS Office based applications • http://msdn2.microsoft.com/en-us/office/aa905528.aspx
OM OM VSTO Document-Centric Solutions MyCode MyTaskPane Office Application Solutions (Add-In) MyMenu MyCode
MSOffice extensions Visual Studio Tools for Office • Microsoft.Office.Interop.Excel. Application • Microsoft.Office.Interop.InfoPath.Application • Microsoft.Office.Interop.Outlook.Application • Microsoft.Office.Interop.PowerPoint.Application • Microsoft.Office.Interop.MSProject.Application • Microsoft.Office.Interop.Visio.Application • Microsoft.Office.Interop.Word.Application
Modele Office Object Model Excel Object Model Referencehttp://msdn.microsoft.com/en-us/library/bb149081.aspx Outlook Object Model Referencehttp://msdn.microsoft.com/en-us/library/bb176619.aspx PowerPoint Object Model Referencehttp://msdn.microsoft.com/en-us/library/bb251394.aspx Visio Automation Object Model Referencehttp://msdn.microsoft.com/en-us/library/aa730930.aspx Word Object Model Referencehttp://msdn.microsoft.com/en-us/library/bb244515.aspx
Product Team Blogs Eric Carter: .NET4Office http://blogs.msdn.com/eric_carter/ Peter Torr: Office Development, Security, Randomness… http://blogs.msdn.com/ptorr/ Eric Lippert: Fabulous Adventures in Coding http://blogs.msdn.com/EricLippert Paul Stubbs: Office Development with .NET http://blogs.msdn.com/pstubbs/ VSTO Team Blog http://blogs.msdn.com/vsto/
Integracja na poziomie dokumentow Rozwiazania firm 3 np. Aspose Wykorzystanie automatyzacji aplikacji Ms Office np.: via PIO (problem na serwerze) Dla dokumentów XML: reczne lub przez Open XML Format SDK -> http://msdn.microsoft.com/en-us/library/dd440953.aspx
Dokumenty MS Office Tworzenie/czytanie dokumentów MS Office: XML vs MS Office: • Open Document - czesciowo zaimplementowany w MS Office 2007 standard Office Open XML . • WordXML, ExcelXML(SpreadSheetML) (MSOffice 2003) • Open XML SDK 2.0 for Microsoft Office (2007+) ≠ OpenDocument • XML Paper Specification (XPS) – zbliżony do Open XML ale opracowany dla reprezentacji przenośnego, trwałego dokumentu (np.: w XAML)
Open XML SDK • Zbudowany w oparciu o System.IO.Packaging API • Wykorzystuje LINQ dla zapewniwnia silnie typowanego dostępu do zawartości XML-a • Upraszcza manipulacje pakietami oraz schema-mi w pakietach • Automatyzuje typowe zadania • Productivity Tool for Office – np.:generowanie kodu w oparciu o dokument, porównywanie żródłowego i wynikowego XML-a, walidacja dokumentów
Tworzenie Dokumentu MS Office (via Open XML) using (WordprocessingDocument myDoc = WordprocessingDocument.Create( documentFileName, WordprocessingDocumentType.Document)) {// Add a new main document part.MainDocumentPart mainPart = myDoc.AddMainDocumentPart();//Create Document tree for simple document.mainPart.Document = new Document();//Create Body (this element contains other elements that we want to includeBody body = new Body();//Create paragraphParagraph paragraph = new Paragraph();Run run_paragraph = new Run();// we want to put that text into the output documentText text_paragraph = new Text("Hello World!");//Append elements appropriately.run_paragraph.Append(text_paragraph);paragraph.Append(run_paragraph);body.Append(paragraph);mainPart.Document.Append(body);// Save changes to the main document part.mainPart.Document.Save(); }