thespot4sap.com independent sap information
 

get SAP Access - pay monthly

SAP Tutorials    Online SAP Training    SAP CBT's    Forums    SAP Articles    SAP Jobs    Resumes
  SAP Access    SAP Blogs    SAP Books     Links     Vendor Directory     Submit Content    Search
Previous posts in SAP TechEd
Page 1006 of 5561

Disponibili la nuova versione dell' Open XML SDK e relativa ROADMAP

Blogger : MSDN Blogs
All posts : All posts by MSDN Blogs
Category : SAP TechEd
Blogged date : 2008 Mar 14

Era il "lontano" Giugno 2007 quando al TechEd è stato annunciato l' Open XML SDK (OOXML) per facilitare la creazione di soluzioni basate sul nuovo formato aperto dei file Office Ecma Office Open XML Formats (ECMA-376). Le classi per la manipolazione del formato OOXML sono presenti dalla versione 3.0 del .NET Framework (le Packaging API - System.IO.Packaging ). Queste classi però lavorano a basso livello sul formato rendendo non proprio intuitiva la scrittura di operazioni sui formati. L' Open XML SDK ha quindi l'obiettivo di fornire un insieme di classi .NET più ad alto livello per semplificaree la vita ai programmatori... soprattutto nei principali scenari applicativi :

  • creazione di documenti office via codice.
  • customizzazione di parti dei documenti.
  • manipolazione dei contenuti.
  • verifica dei formati
  • customizzazione delle proprietà dei documenti.

lasciando l'uso diretto delle classi in System.IO.Packaging come alternativa solo per i casi in cui si vuole avere il controllo diretto di ogni singolo aspetto del formato.

Da un punto di vista architetturale la presenza di System.IO.Packaging e dell' SDK ci permette di realizzare in modo "supportato" uno degli scenari applicativi più comuni e più difficilmente realizzabili con le versioni precedenti di office e del formato binario : la creazione di documenti office server side !!! Perchè dico difficilmente realizzabili? Perchè spesso questa operazione veniva svolta tramite due passi :

  1. Installazione di Office lato server!!!
  2. Scrittura di codice che istanziando server side i vari prodotti Office tipo Word.Application via OLE Automation andava a creare/modificare i documenti.

La difficoltà non stava tanto nell'eseguire questi due punti ma piuttosto far si che il server non adasse in crisi nel tempo... Infatti parliamo subito del punto 2 (per il punto 1 dico solo che non è mai una buona soluzione installare codice di tipo client-side sui server perchè di certo non aiuta nel limitare l'attack surface del server stesso). Il problema tecnico del punto 2 è semplice. Gli strumenti Office sono by design implementati per avere interazioni con un utente. Qualsiasi cosa debba comunicare lo fa via MessageBox !! Purtroppo server side, soprattutto se il codice era scritto come servizio NT non c'era modo di premere il bottone OK o CANCEL perchè non c'era nessun desktop associato (oltre che probabilmente nessun utente disponibile 7x24). Questo comportava che il Thread di IIS rimaneva bloccato per sempre (a meno di non gestire  il recycle degli application pool di IIS 6.0). Col tempo le risorse del server venivano via via "mangiate" dall'applicazione portando il server ad avere gravi problemi di performance. Per risolvere questa problematica ne ho viste di tutte... da programmi sentinella che killavano brutalmente word se rimaneva per troppo tempo aperto... magari rovinando il normal.dot... e quindi non vi dico cosa succedeva...) a soluzioni più estreme... IISRESET (o equivalente via codice) ogni tot ore...con la felicità degli utenti di altre applicazioni hostate sullo stesso server che magari in quattro e quattrotto perdevano tutto il loro lavoro perchè lo stato dell'applicazione PUFF svaniva...e mi fermo qui...).
Questo è il vero motivo per cui anche sulla documentazione Microsoft lo scenario di Office Server side non è mai stato supportato!!!

Ora con System.IO.Packaging e l' SDK è possibile creare, modificare e gestire i documenti office anche server side senza nessun problema di stabilità e di supporto!!!! Un esempio?

// How to: Create a new package as a Word document.
public static void CreateNewWordDocument(string document)
{
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(document, WordprocessingDocumentType.Document))
    {
        // Set the content of the document so that Word can open it.
        MainDocumentPart mainPart = wordDoc.AddMainDocumentPart();

        SetMainDocumentContent(mainPart);
    }
}

// Set content of MainDocumentPart.
public static void SetMainDocumentContent(MainDocumentPart part)
{
    const string docXml =
 @"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?> 
<w:document xmlns:w=""http://schemas.openxmlformats.org/wordprocessingml/2006/main"">
<w:body><w:p><w:r><w:t>Hello world!</w:t></w:r></w:p></w:body>
</w:document>";

    using (Stream stream = part.GetStream())
    {
        byte[] buf = (new UTF8Encoding()).GetBytes(docXml);
        stream.Write(buf, 0, buf.Length);
    }
}

 

Le Open XML API verranno rilasciate in 2 versioni entrambe scaricabili gratuitamente QUI.

La versione 1.0 sarà un update della CTP (Community Technology Preview) di Giugno 2008. La successiva versione della CTP verrà rilasciata ad Aprile 2008 mentre la versione finale è prevista per Maggio 2008. Le maggiori novità sono l'accesso strongly-typed a parti dei documenti Office, facilitazioni per l'uso del'' SDK via Linq to XML più molti altre piccole modifiche richieste dai beta tester e dalla comunità degli sviluppatori.

La versione 2.0 invece estenderà l'object model con varie funzionalità avanzate come il search contestuale, le funzioni di validazione dei formati, alcune classi *ML  per gestire oggetti presenti in più tipi di documenti,il content object model per accedere direttamente a singole parti di documenti... La prima CTP vedrà la luce a Giugno 2008 mentre la versione RTW (Release to Web) sarà disponibile compatibilmente con l'uscita di Office 14 ovvero la prossima major release di Office.

 

clip_image002

 

Per maggiori informazioni : http://openxmldeveloper.org/archive/2008/03/13/OpenXMLSDK.aspx

Per dare un'idea di come si stia semplificando la programmazione del nuovo formato OOXML via .NET riporto alcuni brevi esempi... per maggiori informazioni consultare l'SDK e le sezioni How-to

 

Aggiungere un immagine ad un package

 public static void AddImagePart(string document, string fileName)
 {
  using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
   {
     MainDocumentPart mainPart = wordDoc.MainDocumentPart;

     ImagePart imagePart = mainPart.AddImagePart(ImagePartType.Jpeg);

     using (FileStream stream = new FileStream(fileName, FileMode.Open))
     {
       imagePart.FeedData(stream);
     }
   }
 } 

Validare un Package

public void ValidateSimplePackage(string xlsxFile)
{
   SpreadsheetDocument xlsxDoc = SpreadsheetDocument.Open(xlsxFile, true);
   Using(xlsxDoc)
   {
      // Remove the main workbook part.
      xlsxDoc.DeletePart(xlsxDoc.WorkbookPart);

      // Validate the package. Will return an exception 
      // because of the missing part.
      xlsxDoc.Validate(null);
   }
}

--Mario


Read comments or post a reply to : Disponibili la nuova versione dell' Open XML SDK e relativa ROADMAP
Page 1006 of 5561

Newest posts
New Page 1

 

 

About Us   Contact Us   Privacy   Disclaimer   Feedback   Email Discussion   Newsletter  

Copyright © - Independent SAP Information
Learn XML, Guesthouses and B&B's