Creación y publicación de documentos de Excel 2010 con flujos de trabajo personalizados de SharePoint 2010

**Resumen:**SharePoint Server 2010 proporciona una plataforma completa para crear aplicaciones de línea de negocio que se integren con procesos de flujo de trabajo y publiquen información en sitios web de intranet, Internet y extranet. Los formatos de archivo Office Open XML posibilitan la generación de documentos, hojas de cálculo y presentaciones de Microsoft Office mediante programación. Mediante la combinación de ambas tecnologías, puede automatizar fácilmente procesos de negocio comunes como la publicación y generación de documentos. Obtenga información sobre cómo generar hojas de cálculo de Excel 2010 en flujos de trabajo de SharePoint y publicarlas en sitios de SharePoint.

Última modificación: jueves, 14 de febrero de 2013

Hace referencia a: Business Connectivity Services | Excel 2010 | Office 2010 | Open XML | SharePoint Designer 2010 | SharePoint Foundation 2010 | SharePoint Online | SharePoint Server 2010 | Visual Studio

En este artículo
Introducción
Creación de flujos de trabajo personalizados de SharePoint con Visual Studio 2010
Adición de compatibilidad con los métodos auxiliares de la API de Open XML 2.0 para el flujo de trabajo
Implementación de flujos de trabajo personalizados en SharePoint 2010
Pruebas de flujos de trabajo personalizados
Conclusión
Recursos adicionales
Acerca del autor

**Se aplica a:**Microsoft SharePoint Server 2010 | Microsoft Office 2010 | Microsoft Visual Studio 2010

Proporcionado por: Todd Baginski, Aptillon (en inglés), MVP de SharePoint Server | Acerca del autor

Contenido

  • Introducción

  • Creación de flujos de trabajo personalizados de SharePoint con Visual Studio 2010

  • Adición de compatibilidad con los métodos auxiliares de la API de Open XML 2.0 para el flujo de trabajo

  • Implementación de flujos de trabajo personalizados en SharePoint 2010

  • Pruebas de flujos de trabajo personalizados

  • Conclusión

  • Recursos adicionales

  • Acerca del autor

Hacer clic para obtener código Código de descarga: Creación y publicación de documentos de Excel 2010 con flujos de trabajo personalizados en SharePoint 2010

Introducción

Este artículo es parte de una serie de artículos que describen cómo integrar las aplicaciones de cliente con flujos de trabajo y procesos de negocio:

Formatos de archivo Open XML

Los documentos de Microsoft Office 2010 se basan en el estándar Office Open XML (en inglés). Open XML SDK 2.0 para Microsoft Office 2010 permite crear y actualizar documentos de Office 2010 mediante programación.

Flujos de trabajo de SharePoint Server 2010

Los flujos de trabajo de Microsoft SharePoint Server 2010 se basan en Windows Workflow Foundation. Puede crear flujos de trabajo de SharePoint dentro de sitios de SharePoint mediante un explorador web, en Microsoft SharePoint Designer 2010 o con Microsoft Visual Studio 2010. Se necesita Microsoft Visual Studio 2010 para crear flujos de trabajo que usen las API de Open XML. También es posible crear actividades de flujo de trabajo personalizado que usen las API de Open XML en Visual Studio y, a continuación, publicarlas en los servidores de SharePoint para que las actividades se puedan usar dentro de los flujos de trabajo creados mediante SharePoint Designer 2010. Este artículo se centra en la creación de flujos de trabajo personalizado con Visual Studio 2010.

SharePoint Foundation 2010

Microsoft SharePoint Foundation 2010 ofrece una plataforma extensible que se integra con los flujos de trabajo de SharePoint. Esta integración permite asociar flujos de trabajo con datos almacenados en listas y bibliotecas de documentos de SharePoint. Los flujos de trabajo pueden crear, leer, actualizar y eliminar elementos y documentos de las listas de SharePoint. En este artículo se describe cómo crear un flujo de trabajo de SharePoint que lea información de los elementos de la lista de SharePoint en el flujo de trabajo y cómo usar la información del elemento de la lista para generar un documento de Excel.

Las funciones de administración de documentos de SharePoint 2010 permiten crear y administrar documentos de forma segura. Una vez que el flujo de trabajo genera el documento de Excel, dicho documento se publica en una biblioteca de documentos de SharePoint.

Escenario de ejemplo: Generación de facturas

Imagine un escenario en el que una tienda de productos deportivos, AdventureWorks Inc., realiza un seguimiento de los pedidos que recibe en una lista de SharePoint en la intranet de AdventureWorks. Después de agregar los pedidos, se generan las facturas para los pedidos y se envían a los clientes. La creación de facturas es un proceso manual que requiere que los empleados abran un documento de Excel para generar facturas, agreguen los datos apropiados al documento y, a continuación, guarden la factura en una biblioteca de documentos en un sitio de SharePoint al que puedan tener acceso los clientes.

Para automatizar este proceso, AdventureWorks, Inc. crea un flujo de trabajo personalizado que genere automáticamente las facturas de los pedidos una vez estos se han agregado a la lista de SharePoint. El flujo de trabajo también publica las facturas en el sitio de SharePoint al que pueden tener acceso los clientes. El flujo de trabajo disminuye considerablemente el tiempo que se tarda en crear facturas y mejora la precisión de las facturas al eliminar la posibilidad de que se cometan errores relacionados con la generación manual de facturas por parte de los empleados.

Entorno de ejemplo

El escenario se basa en los siguientes elementos que se describen en esta sección. Antes de continuar, configure el entorno de ejemplo tal como se describe:

  • Lista de pedidos. El flujo de trabajo personalizado de SharePoint que se crea en este artículo se publica en una lista de SharePoint denominada Pedidos. La lista de pedidos se basa en una lista personalizada. El código de ejemplo para este artículo incluye la plantilla de la lista necesaria para volver a crear la lista de pedidos. La lista de pedidos contiene columnas tal como se indica en la siguiente figura.

    Figura 1. Columnas de la lista de pedidos

    Columnas de la lista de pedidos

  • Sitio de intranet. La lista de pedidos se encuentra en la intranet de AdventureWorks (http://intranet/Lists/Orders). La colección de sitios de intranet se basa en una plantilla de sitio de portal de publicación.

  • Archivo SalesInvoiceTemplate.xlsx. El flujo de trabajo usa el documento de Excel denominado SalesInvoiceTemplate.xlsx para crear facturas de ventas. El archivo SalesInvoiceTemplate.xlsx se guarda en la biblioteca de documentos compartidos de la intranet de AdventureWorks (http://intranet/Shared Documents/SalesInvoiceTemplate.xlsx).

    Figura 2. SalesInvoiceTemplate.xlsx

    SalesInvoiceTemplate.xlsx

  • Sitio de extranet. El flujo de trabajo publica las facturas de ventas que se generan para el sitio del cliente de extranet de AdventureWorks y las guarda en una biblioteca de documentos denominada Facturas (http://extranet/Invoices). La colección de sitios de extranet se basa en la plantilla de sitio de portal de publicación.

Creación de flujos de trabajo personalizados de SharePoint con Visual Studio 2010

Microsoft Visual Studio 2010 proporciona dos plantillas para crear flujos de trabajo personalizado de SharePoint: flujo de trabajo secuencial y flujo de trabajo de la máquina de estado. Este artículo usa la plantilla de proyecto de flujo de trabajo secuencial.

Uso de plantillas de Visual Studio para flujos de trabajo

En primer lugar, debe crear flujos de trabajo personalizados de SharePoint para generar documentos Excel de factura de ventas y publicarlos en el sitio de extranet.

Para crear flujos de trabajo personalizados de SharePoint

  1. Abra Visual Studio 2010.

  2. Haga clic en Archivo, seleccione Nuevo y, a continuación, haga clic en Proyecto.

  3. En la sección Plantillas instaladas, expanda Visual C# y SharePoint y, a continuación, seleccione 2010.

  4. En el lado derecho de la sección Plantillas instaladas, seleccione Flujo de trabajo secuencial.

  5. En el cuadro Nombre, escriba el nombre que desea para el flujo de trabajo. En este ejemplo, el proyecto se denomina SharePoint.Workflow.ExcelGenerator.

  6. En la lista de Versión de .NET Framework, en la parte superior del cuadro de diálogo Nuevo proyecto, seleccione .NET Framework 3.5.

  7. Haga clic en Aceptar. Se abrirá el Asistente para la personalización de SharePoint.

    Figura 3. Creación de un cuadro de diálogo Nuevo proyecto para el flujo de trabajo secuencial de SharePoint

    Creación de cuadro de diálogo Nuevo proyecto

  8. En el cuadro ¿Qué sitio local desea usar para la depuración?, escriba la dirección URL del sitio de intranet donde se implementará el flujo de trabajo. En este ejemplo, la dirección URL es http://intranet. Haga clic en Siguiente.

  9. En el cuadro ¿Cuál es el nombre del flujo de trabajo?, escriba el nombre del flujo de trabajo. En este ejemplo, el flujo de trabajo se denomina Generación de factura de ventas.

  10. Seleccione Flujo de trabajo de lista y haga clic en Siguiente.

  11. Active la casilla Sí, asociar este flujo de trabajo a las siguientes bibliotecas y listas.

  12. En la opción La biblioteca o lista a la que va a asociar el flujo de trabajo, seleccione la lista Pedidos. Si no encuentra la lista de pedidos en la lista, vea la sección "Escenario de ejemplo: Generación de facturas" para asegurarse de que su entorno se haya configurado correctamente y contenga la lista Pedidos. Haga clic en Siguiente.

  13. Active la casilla de verificación El usuario inicia manualmente el flujo de trabajo.

  14. Desactive las otras casillas de verificación y haga clic en Finalizar.

Visual Studio 2010 agrega automáticamente el siguiente código a la clase Worfkflow1.cs. En el siguiente ejemplo de código se crea un Guid que identifica de manera única el flujo de trabajo.

public Guid workflowId = default(System.Guid);

En el siguiente ejemplo de código, se crea una instancia de la clase SPWorkflowActivationProperties. Esta clase recupera detalles relacionados con el contexto de la instancia de flujo de trabajo que se está ejecutando. La instancia de la clase workflowProperties recupera la dirección URL de la colección de sitios que el flujo de trabajo está ejecutando y los detalles sobre el elemento de lista de pedidos sobre el que el flujo de trabajo actúa.

public SPWorkflowActivationProperties workflowProperties = new SPWorkflowActivationProperties();

Adición de referencias de las API de Open XML 2.0

Para trabajar con la API de Open XML 2.0, agregue las siguientes referencias e instrucciones using al proyecto y a la clase Workflow1.cs.

Para agregar una referencia a las API de Open XML 2.0

  1. En el Explorador de soluciones, haga clic con el botón secundario en el nodo Referencias y seleccione Agregar referencia.

  2. Haga clic en Examinar.

  3. Busque la siguiente ubicación C:\Windows\assembly\GAC_MSIL\DocumentFormat.OpenXml\2.0.5022.0__31bf3856ad364e35\DocumentFormat.OpenXml.dll

  4. Seleccione DocumentFormat.OpenXml.dll y haga clic en Aceptar.

  5. En el Explorador de soluciones, haga clic con el botón secundario en el nodo Referencias y seleccione Agregar referencia.

  6. Haga clic en .NET.

  7. Seleccione WindowsBase

  8. Haga clic en Aceptar.

  9. En el Explorador de soluciones, haga clic con el botón secundario en el archivo Workflow1.cs y seleccione Ver código.

  10. Agregue las siguientes instrucciones using a la clase Workflow1.cs para agregar compatibilidad para la API de Open XML 2.0.

       using DocumentFormat.OpenXml.Packaging;
       using DocumentFormat.OpenXml.Spreadsheet;
       using DocumentFormat.OpenXml;
    
  11. Agregue la siguiente instrucción using para poder abrir el archivo SalesInvoiceTemplate.xlsx mediante una secuencia (o Stream en inglés).

       using System.IO;
    
  12. Agregue la siguiente instrucción using para admitir los métodos auxiliares de la API de Open XML 2.0 que se usan en el flujo de trabajo.

       using System.Collections.Generic;
    

Definición de constantes usadas en el flujo de trabajo

Las constantes se definen en el flujo de trabajo para indicar dónde se almacena el archivo SalesInvoiceTemplate.xlsx y dónde desea publicar los documentos de Excel de factura de ventas generados.

Para definir las constantes en el flujo de trabajo, agregue las siguientes líneas de código para el archivo Workflow1.cs.

readonly string[] excelDocumentHeaderColumns = new[] { "A", "B", "C" };
const string sourceDocumentPath = "http://intranet/shared documents/SalesInvoiceTemplate.xlsx";
const string destinationSitePath = "http://extranet";
const string destinationDocumentLibraryName = "Destination Document Library";

En el siguiente ejemplo de código, se crea una matriz de cadena que contiene los nombres de las columnas en el archivo SalesInvoiceTemplate.xlsx. Estos nombres de columna insertan valores en la hoja de cálculo mediante la API de Open XML 2.0.

readonly string[] excelDocumentHeaderColumns = new[] { "A", "B", "C" };

En el siguiente ejemplo de código, se crean constantes que representan la ubicación donde se desea guardar el archivo SalesInvoiceTemplate.xlsx y la biblioteca de documentos y sitios donde se desea publicar los documentos Excel de factura de ventas generados.

const string sourceDocumentPath = "http://intranet/shared documents/SalesInvoiceTemplate.xlsx";
const string destinationSitePath = "http://extranet";
const string destinationDocumentLibraryName = "Destination Document Library";

Adición de una actividad de código al flujo de trabajo

Una actividad de código se agrega al flujo de trabajo para ejecutar el código personalizado que se necesita para generar el documento de Excel de factura de ventas y para publicarlo en el sitio web de extranet.

Para agregar una actividad de código

  1. En Visual Studio 2010, haga clic en la pestaña Cuadro de herramientas para abrir la ventana Cuadro de herramientas

  2. Arrastre una actividad de código desde el cuadro de herramientas y colóquela en la superficie de diseño para el archivo Workflow1.cs. Coloque la actividad de código en la flecha que aparece debajo de la actividad de onWorkflowActivated1 en la superficie de diseño.

  3. En la superficie de diseño, seleccione la actividad de codeActivity1.

  4. En la ventana Propiedades, configure la propiedad Name para la actividad de código para indicar así que la actividad genera y publica los documentos Excel. En este ejemplo, la actividad de código se denomina createAndPublishExcelDocument.

  5. En la ventana Propiedades, haga clic en el vínculo Generar controladores. De esta manera, se genera el controlador de eventos createAndPublishExcelDocument_ExecuteCode(object sender, EventArgs e) en el archivo Workflow1.cs.

Creación y publicación de documentos de Excel en flujos de trabajo de SharePoint

Para crear la actividad de código que usa el archivo SalesInvoiceTemplate.xlsx para generar plantillas de facturas de venta y publicarlas en el sitio de extranet, agregue el siguiente código al controlador de eventos createAndPublishExcelDocument_ExecuteCode en la clase Workflow1.cs.

SPListItem listItem = workflowProperties.Item;
            
using (SPSite sourceSite = new SPSite(workflowProperties.SiteUrl))
{
   SPFile sourceFile = sourceSite.RootWeb.GetFile(sourceDocumentPath);

   using (SPSite destinationSite = new SPSite(destinationSitePath))
   {
      using (SPWeb web = destinationSite.OpenWeb())
      {
         if (sourceFile != null)
         {
            SPFolder destinationDocumentLibrary = 
   web.Folders[destinationDocumentLibraryName];

            using (Stream sourceFileStream = 
   sourceFile.OpenBinaryStream())
            {
               using (SpreadsheetDocument spreadSheet = 
                  SpreadsheetDocument.Open(sourceFileStream, true))
               {
                  WorksheetPart worksheetPart = 
   ReturnWorksheetPart(spreadSheet, "Sheet1");
                  if (worksheetPart != null)
                  {
                     Worksheet worksheet = worksheetPart.Worksheet;
                     InsertTextCellValue(worksheet, "A", 3, 
      listItem["Customer"].ToString());
                     InsertTextCellValue(worksheet, "A", 4, 
listItem["Address"].ToString());
                     InsertTextCellValue(worksheet, "B", 3, 
"Invoice: " + listItem.Title);
                     InsertTextCellValue(worksheet, "B", 4, "Invoice 
Date: " + DateTime.Now.ToShortDateString());
                     InsertTextCellValue(worksheet, "A", 7, 
listItem["Description"].ToString());
                     InsertNumberCellValue(worksheet, "B", 7, 
listItem["Amount"].ToString());
                     InsertNumberCellValue(worksheet, "B", 9, 
listItem["Amount"].ToString());
                     double tax = 
                        ((double)listItem["Amount"] * .07);
   InsertNumberCellValue(worksheet, "B", 10, 
tax.ToString());
                     double total = ((double)listItem["Amount"] * 
1.07);
                     InsertNumberCellValue(worksheet, "B", 11, 
total.ToString());
   destinationDocumentLibrary.Files.Add("Invoice "
                   + listItem.Title + ".xlsx", 
                        sourceFileStream, true);
                  }
               }
            }
         }
      }
   }
}

La propiedad Item en la clase workflowProperties proporciona acceso al elemento actual con el que trabaja el flujo de trabajo. En esta situación, el elemento representa un elemento de la lista en la lista de pedidos.

SPListItem listItem = workflowProperties.Item;

La propiedad SiteUrl en la clase workflowProperties proporciona acceso al sitio actual en el que se ejecuta el flujo de trabajo. La propiedad SiteUrl construye un objeto SPSite que corresponde a la colección de sitios desde el cual se ejecuta el flujo de trabajo.

SPSite sourceSite = new SPSite(workflowProperties.SiteUrl)

El siguiente código devuelve un objeto SPFile que corresponde al archivo SalesInvoiceTemplace.xlsx. Este archivo funciona como plantilla para la factura de ventas.

SPFile sourceFile = sourceSite.RootWeb.GetFile(sourceDocumentPath);

El siguiente código crea un objeto SPSite que corresponde a la colección de sitios donde se publicará la factura de ventas generada.

SPSite destinationSite = new SPSite(destinationSitePath)

El siguiente código crea un objeto SPFolder que corresponde a la biblioteca de documentos donde se publicará la factura de ventas generada.

SPFolder destinationDocumentLibrary = web.Folders[destinationDocumentLibraryName];

El siguiente código crea un objeto Stream que corresponde al archivo de plantilla de la factura de ventas. El método OpenBinaryStream devuelve el archivo SalesInvoiceTemplate.xlsx como un Stream.

Stream sourceFileStream = sourceFile.OpenBinaryStream()

El siguiente código crea un objeto SpreadSheetDocument que corresponde al archivo de la plantilla de la factura de ventas. El método Open carga la factura SalesInvoiceTemplate.xlsx. La clase SpreadSheetDocument es parte de la API de Open XML 2.0.

SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(sourceFileStream, true)

El siguiente código crea un objeto WorksheetPart que corresponde a la hoja de cálculo denominada Hoja1 en el archivo de la plantilla de la factura de ventas.

WorksheetPart worksheetPart = ReturnWorksheetPart(spreadSheet, "Sheet1");

El siguiente código crea un objeto Worksheet que corresponde a la hoja de cálculo denominada Hoja1 en el archivo de la plantilla de la factura de ventas. La propiedad Worksheet usa la API de Open XML 2.0 para devolver el objeto WorkSheet que, a continuación, actualiza los valores en la hoja de cálculo.

Worksheet worksheet = worksheetPart.Worksheet;

El siguiente código inserta valores en la hoja de cálculos en las ubicaciones adecuadas. El código listitem["<Column Name>"] recupera los valores de la columna para el elemento de la lista de pedidos con los que el flujo de trabajo trabaja actualmente. El método InsertTextCellValue y el método InsertNumberCellValue usan la API de Open XML 2.0 para insertar los valores de columna en la hoja de cálculo. Estos métodos usan el objeto worksheet, la columna de la hoja de cálculo y la fila de la hoja de cálculo para ubicar las celdas que se deben actualizar.

InsertTextCellValue(worksheet, "A", 3, 
listItem["Customer"].ToString());
InsertTextCellValue(worksheet, "A", 4, 
listItem["Address"].ToString());
InsertTextCellValue(worksheet, "B", 3, "Invoice: " + listItem.Title);
InsertTextCellValue(worksheet, "B", 4, "Invoice 
Date: " + DateTime.Now.ToShortDateString());
InsertTextCellValue(worksheet, "A", 7, 
listItem["Description"].ToString());
InsertNumberCellValue(worksheet, "B", 7, listItem["Amount"].ToString());
InsertNumberCellValue(worksheet, "B", 9, 
listItem["Amount"].ToString());
double tax = ((double)listItem["Amount"] * .07);
InsertNumberCellValue(worksheet, "B", 10, tax.ToString());
double total = ((double)listItem["Amount"] * 1.07);
InsertNumberCellValue(worksheet, "B", 11, total.ToString());

Nota

En el ejemplo de código, los cálculos totales y de impuestos se realizan en el código que genera el documento de Excel mediante programación. Estos cálculos se realizan en el flujo de trabajo porque la API de Open XML 2.0 no es compatible con la ejecución de las fórmulas de celda que se definen en el documento de Excel. En los casos en que los cálculos se deben definir en las fórmulas de celda, se puede publicar el documento en Servicios de Excel. Servicios de Excel permite realizar los cálculos en los documentos Excel mediante programación. A continuación, el flujo de trabajo puede invocar mediante programación las fórmulas que se definen en el documento de Excel para realizar los cálculos.

El siguiente código usa el método Add en la colección Files relacionada con la biblioteca de documentos en el sitio web de extranet donde la factura de ventas se publicará para agregar la factura de ventas generada en la biblioteca de documentos. La propiedad Title del objeto listItem nombra la factura de ventas generada. El sourceFileStream que representa la factura de ventas generada especifica el documento que se guardará, y el parámetro booleano true indica el archivo que debe sobrescribirse en caso de que exista.

destinationDocumentLibrary.Files.Add("Invoice " + listItem.Title + ".xlsx", sourceFileStream, true);

Este enfoque muestra cómo se carga el archivo SalesInvoiceTemplate.xlsx en una secuencia (o Stream) y se modifica y, a continuación, se guarda directamente en la biblioteca de documentos de destino. No es necesario guardar el documento en un paso intermedio. Después de guardar el documento en la biblioteca de documentos de destino, el objeto Stream relacionado con el documento generado se elimina automáticamente porque el código se ha implementado con las instrucciones using.

Adición de compatibilidad con los métodos auxiliares de la API de Open XML 2.0 para el flujo de trabajo

Para terminar el flujo de trabajo, agregue los siguientes métodos auxiliares a la clase Workflow1.cs.

El método ReturnWorksheetPart usa la API de Open XML 2.0 para devolver un WorkSheetPart, según un SpreadSheetDocument y el nombre de una hoja de cálculo.

private static WorksheetPart ReturnWorksheetPart(SpreadsheetDocument document, string sheetName)
{
IEnumerable<Sheet> sheets = 
   document.WorkbookPart.Workbook.GetFirstChild<Sheets>().
   Elements<Sheet>().Where(s => s.Name == sheetName);

   if (sheets.Count() == 0)
            {
                return null;
            }

            string id = sheets.First().Id.Value;
            WorksheetPart worksheetPart = 
   (WorksheetPart)document.WorkbookPart.GetPartById(id);

return worksheetPart;
}

El método InsertTextCellValue usa la API de Open XML 2.0 para insertar un valor de texto en la celda de la hoja de cálculo. El parámetro worksheet especifica la hoja de cálculo donde se insertará la hoja de cálculo, y los parámetros column y row ubican la celda que se actualizará en la hoja de cálculo. Este método establece la propiedad DataType en la clase Cell para el valor de enumeración CellValues.String para dar formato a la celda como una cadena.

private void InsertTextCellValue(Worksheet worksheet, string column, uint row, string value)
{
Cell cell = ReturnCell(worksheet, column, row);
CellValue v = new CellValue();
v.Text = value;
cell.AppendChild(v);
cell.DataType = new EnumValue<CellValues>(CellValues.String);
worksheet.Save();
}

El método InsertNumberCellValue usa la API de Open XML 2.0 para insertar un valor de número en una celda de la hoja de cálculo. El parámetro worksheet especifica la hoja de cálculo donde se insertará la celda, y los parámetros column y row ubican la celda que se actualizará en la hoja de cálculo. Este método establece la propiedad DataType en la clase Cell para el valor de enumeración CellValues.Number para dar formato a la celda como un número.

private void InsertNumberCellValue(Worksheet worksheet, string column, uint row, string value)
{
Cell cell = ReturnCell(worksheet, column, row);
CellValue v = new CellValue();
      v.Text = value;
      cell.AppendChild(v);
      cell.DataType = new EnumValue<CellValues>(CellValues.Number);
      worksheet.Save();
}

El método ReturnCell usa la API de Open XML 2.0 para devolver una celda determinada en la hoja de cálculo. Se solicita mediante el método InsertTextCellValue y el método InsertNumberCellValue. El parámetro worksheet especifica la hoja de cálculo donde se ubica la celda, y los parámetros columnname y row ubican la celda que se actualizará en la hoja de cálculo.

private static Cell ReturnCell(Worksheet worksheet, string columnName, uint row)
{
Row targetRow = ReturnRow(worksheet, row);

if (targetRow == null)
return null;

return targetRow.Elements<Cell>().Where(c => 
   string.Compare(c.CellReference.Value, columnName + row, 
   true) == 0).First();
}

El método ReturnRow usa la API de Open XML 2.0 para devolver una fila determinada en la hoja de cálculo. Se solicita mediante el método ReturnCell. El parámetro worksheet especifica la hoja de cálculo en la que se sitúa la fila, y el parámetro row ubica la fila.

private static Row ReturnRow(Worksheet worksheet, uint row)
{
return worksheet.GetFirstChild<SheetData>().
Elements<Row>().Where(r => r.RowIndex == row).First();
}

Implementación de flujos de trabajo personalizados en SharePoint 2010

Se puede usar Visual Studio 2010 para implementar el flujo de trabajo personalizado en un sitio de SharePoint 2010 a efectos de pruebas. Para implementar el flujo de trabajo personalizado desde Visual Studio 2010, haga clic en Generar y seleccione Implementar solución. Para implementar el flujo de trabajo personalizado en un servidor de producción, cargue el WSP a la Galería de soluciones de Administración central. A continuación, habilite la característica relacionada.

Pruebas de flujos de trabajo personalizados

Para probar el flujo de trabajo personalizado

  1. Abra la lista de pedidos en el sitio web de intranet y cree un elemento en la lista.

    Figura 4. Elemento de ejemplo en la lista de pedidos

    Elemento de ejemplo

  2. Seleccione el elemento nuevo en la lista de pedidos.

  3. En la cinta de opciones, haga clic en Flujos de trabajo.

  4. En la sección Iniciar un nuevo flujo de trabajo, haga clic en el nombre del flujo de trabajo. En este ejemplo, el nombre es Generación de factura de ventas.

    Figura 5. Selección de un flujo de trabajo para iniciarlo

    Selección de un flujo de trabajo

  5. Una vez completado el flujo de trabajo, el elemento de la lista Pedidos indica que se ha completado. La columna Generación de factura de ventas en la lista de pedidos muestra un estado Completado para el flujo de trabajo.

    Figura 6. Flujo de trabajo completado

    Flujo de trabajo completado

  6. En el sitio web de extranet, abra la biblioteca de documentos de facturas. Observe que el documento de Excel de factura de ventas generado se encuentra en la biblioteca de documentos.

  7. Abra el documento de Excel de factura de ventas generado. Observe que los valores del elemento de la lista de pedidos se insertaron en las ubicaciones correspondientes del documento de Excel.

    Figura 7. Documento de Excel de factura de ventas generado

    Factura de ventas

Conclusión

En este artículo se describe cómo SharePoint Server 2010 proporciona una plataforma completa para crear una línea de aplicaciones empresariales que incluyen datos en las listas de SharePoint. También se muestra cómo usar los flujos de trabajo personalizados de SharePoint para generar documentos de Excel mediante la API de Open XML 2.0 y publicarlos en los sitios web de extranet.

Recursos adicionales

Los siguientes recursos están relacionados con los temas analizados en este artículo y ofrecen más información sobre los flujos de trabajo de SharePoint, Open XML y SharePoint Foundation.

Acerca del autor

Colaborador MVP  Todd Baginski, MVP de SharePoint Server, diseña e implementa intranets, extranets y sitios de Internet orientados al público, así como distintas aplicaciones personalizadas con las plataformas de Microsoft Windows SharePoint Services y SharePoint Server. En el año 2003, comenzó su trabajo durante las fases beta del producto. A menudo participa en importantes conferencias del sector, como TechEd, SharePoint Connections y la conferencia sobre Microsoft SharePoint, con ponencias relacionadas con SharePoint. Es uno de los creadores del contenido del programa de certificación de máster en SharePoint, además de impartir el módulo relacionado con el Catálogo de datos profesionales.