LatinShare

 

¿Quienes Somos?

LatinShare es una consultora y desarrolladora especializada en tecnologías de colaboración y desarrollo, con oficinas en Costa Rica y Chile.

Contamos con un grupo de reconocidos profesionales Latinoamericanos, que cuentan con una amplia experiencia y trayectoria implementando soluciones tecnológicas sobre SharePoint, Project Server y .NET, en diversos países de Sur y Centro América.

¿Que Hacemos?

Nuestras principales áreas de negocio son SharePoint y Project Server , pero además contamos con consultores especializados en otros productos Microsoft , incluyendo un grupo especializado en desarrollo Microsoft

http://www.latinshare.biz/sitepages/quienessomos.aspx

Click on pen to Use a Highlighter on this page
Tagged with:
 

Este conjunto de artículos son muy útiles y considero imprescindibles para un DBA. Los dejo a vuestra consideración:

Cordialmente

Rolando Escobar

Gregory A. Larsen

By DatabaseJournal.com Staff

gregalarsen@msn.com

Gregory A. Larsen is a DBA at Washington State Department of Health (DOH). Greg is responsible for maintaining SQL Server and other database management software. Greg works with customers and developers to design and implement database changes, and solve database/application related problems. Greg builds homegrown solutions to simplify and streamline common database management tasks, such as capacity management.

Greg has been working with computers since the late 1970′s and has a Bachelors of Science Degree in Computer Science, with a minor area of study in Mathematics. Greg’s background in DBA work goes back to the mid 1980′s. Gregory has been a DBA for a number of different organizations within the State of Washington. This has given him a broad perspective on how organizations manage databases and applications. During Greg’s DBA career, he has managed databases on Windows, UNIX, and IBM mainframes. Greg remembers the days when DBAs frequently had to recover from hard disk crashes, as the normal course of business. Greg is currently a PASS chapter leader.

Prior to becoming a DBA, Greg developed and maintained applications. Greg has written a number of articles for different web publishing sites, as well as SQL Server Magazine. Greg also maintains a website ( http://www.sqlserverexamples.com) that contains a number of SQL Server examples to common DBA and SQL developer issues. Greg currently holds a MCITP: Database Administrator and MCITP: Database Developer certificates, and is a SQL Server MVP.

Series Articles

T-SQL Best Practices

T-SQL Best Practices – Don’t Use Scalar Value Functions in Column List or WHERE Clauses
T-SQL Best Practices – Parameter Sniffing
Parameterized Queries
T-SQL Best Practices – Part 2
T-SQL Best Practices

T-SQL Programming

Using a Correlated Subquery in a T-SQL Statement
Using a Subquery in a T-SQL Statement
T-SQL Programming Part 5 – Using the CASE Function
T-SQL Programming Part 4 – Setting Variables in Calling T-SQL Code While Using sp_executesql
T-SQL Programming Part 3 – Processing Sequentially Through a Set of Records
T-SQL Programming Part 2 – Building a T-SQL Loop
T-SQL Programming Part 1 – Defining Variables, and IF…ELSE logic

Working with SQL Server Date/Time Variables

Working with SQL Server Date/Time Variables: Part Four – Date Math and Universal Time
Working with SQL Server Date/Time Variables: Part Three – Searching for Particular Date Values and Ranges
Working with SQL Server Date/Time Variables: Part Two – Displaying Dates and Times in Different Formats
Working with SQL Server Date/Time Variables

Current Articles:

Color Coding Your SQL Server Connections
Automatically Capturing SQL Server Performance Metrics
Top 10 SQL Server Counters for Monitoring SQL Server Performance
Obtaining Identity Column Values in SQL Server
Generating Surrogate Keys Using an Identity Column in SQL Server
SQL Server: Natural Key Verses Surrogate Key
Improve Database Allocations through Instant File Initialization
Collecting Performance Metrics Using SQL Server DMV
Tips for Using Common Table Expressions
Top 10 Mistakes When Building and Maintaining a Database
Introduction to Common Table Expressions
Nine Steps to Troubleshooting SQL Server problems
Using Dynamic Management Objects to Monitor I/Os Against an Instance of SQL Server
How to Automate Report Deployment Using SSRS Web Service
Encryption Primer for SQL Server Data
Efficient SQL Server Indexing by Design
Proactive Database Index Creation
SQL Server Column Considerations and Column Placement
The Dos and Don’ts of Database Indexing
Getting Acquainted with SQL Server 2008′s Resource Governor
Database Indexing Development Lifecycle…Say What?
Final Keynotes of Pass Summit 2009
PASSion Award and Tom Casey’s Keynote Address – Pass Summit 2009
Bob Muglia & Ted Kummert Keynote Address: Pass Summit 2009
Pass Summit 2009 – Volunteer Meetings, Welcome Reception and Quiz Bowl
T-SQL Best Practices – Don’t Use Scalar Value Functions in Column List or WHERE Clauses
T-SQL Best Practices – Parameter Sniffing
Parameterized Queries
Building Code that Promotes Plan Re-usage
T-SQL Best Practices – Part 2
T-SQL Best Practices
Calling a Web Service from within SQL Server
10 New SQL Server 2008 Features
Using Check Constraints to Validate Data in SQL Server
Finding the Worst Performing T-SQL Statements on an Instance
Creating Your Own Custom Data Collections
Kilimanjaro, Gemini and Madison – Get the lowdown
A SQL Monitor by Red-Gate Software
Reports for SQL Server 2008 System Data Collections
SQL Server 2008 Data Collections and the Management Data Warehouse
What Kind of DBA Are You?
SQL Server 2008 MERGE Statement
SQL Server 2008 Date Functions, Part 2
New Date Data Types with SQL Server 2008
Connection Strategy for Multiple Database Environments
Exam 70-443 Practice Test from uCertify.com
SQL Server DBA Dashboard
Building Custom Reporting Services Reports for SQL Server Management Studio
Disk Space Usage and SQL Server Performance
SQL Server Security Model
How to Build a Profile Script to Monitor SQL Server off Hours
Preparing for the M70-444 Exam
Setting Up Delegation for Linked Servers
Setting up a Linked Server for a Remote SQL Server Instance
Using Non-Standard Port for SQL Server
Monitoring Stored Procedure Usage
Monitoring Changes to your Database Schema
How Useful Are Those Indexes
Scripting the Installation of SQL Server 2005
Using and Managing Database Mail
New Ranking Functions within SQL Server 2005
Dealing With Upper and Lower Case Data
Calculating Days of the Week and Accounting Months 5-4-4
Creative Ways to Use the TOP Clause
The Five W’s of Database Restores
Automatically Stopping and Restarting SQL Server
Working with Comma Separated Data – Part 2
Dealing with Comma Delimited Strings
SQL Server 2005 Large Value Data Types
Copying Database Backups to an Alternative Location
Monitoring SQL Servers Availability
Apply Operator
Dynamic Management Views and Functions
Quest Capacity Manager Review
SQL Server 2005 Upgrade Advisor
Try/Catch Block in SQL Server 2005
Cycling the ERRORLOG file and Deleting Backup History Information
SQL Server 2005 Import / Export Wizard
Finding Database Object Dependencies
Using SQL Server 2005 sqlcmd Utility
Setting DTS Package Properties at Runtime
Automatically Running a Process When SQL Server or SQL Agent Starts
Point in Time Recovery
Index Tuning Wizard
Implementing the Equivalent of a FULL OUTER JOIN in Microsoft Access
Transferring Data from One Table to Another
Identifying Long Running SQL Server Agent Jobs
Detecting The State of a SQL Server Agent Job
Using a Correlated Subquery in a T-SQL Statement
Using a Subquery in a T-SQL Statement
SQL Server: Updating Integer Status Columns
SQL Server Undocumented Stored Procedures sp_MSforeachtable and sp_MSforeachdb
Submitting A Stored Procedure Asynchronously
Gathering Space Usage Statistics
Working With Columns That Contain Null Values
How To Get Output Into SQL Server Table
Using xp_cmdshell
Storing Multiple Statuses Using an Integer Column
SQL MAIL and SQL Agent Mail using POP3 and SMTP
Web Data Administration Tool from Microsoft
Microsoft SQL Server Survival Guide
Benchmarking Performance of a Query – Part 2 CPU and I/O
Benchmarking Performance of a Query – Part 1 Elapsed Time
T-SQL Programming Part 5 – Using the CASE Function
T-SQL Programming Part 4 – Setting Variables in Calling T-SQL Code While Using sp_executesql
SQL Server: Calculating Running Totals, Subtotals and Grand Total Without a Cursor
T-SQL Programming Part 3 – Processing Sequentially Through a Set of Records
T-SQL Programming Part 2 – Building a T-SQL Loop
T-SQL Programming Part 1 – Defining Variables, and IF…ELSE logic
Using xp_fixeddrives to Monitor Free Space
Examples of how to Calculate Different SQL Server Dates
Using SQL Server’s CHARINDEX and PATINDEX
Migrating a Maintenance Plan from One SQL Server to Another
Sequential Numbering/Counting of Records with SQL Server
Dealing with MS SQL Tables that contain Duplicate Rows
Migrating Logins from One SQL Server to Another
Padding, Rounding, Truncating and Removing Trailing Zeroes
Working with SQL Server Date/Time Variables: Part Four – Date Math and Universal Time
Working with SQL Server Date/Time Variables: Part Three – Searching for Particular Date Values and Ranges
Working with SQL Server Date/Time Variables: Part Two – Displaying Dates and Times in Different Formats
Working with SQL Server Date/Time Variables
Streamlining the Database Server Recovery Process on SQL Server
Nightly Failed Jobs Report
Beware of Mixing Collations: Part 2- Converting Collations
Beware of Mixing Collation with SQL Server 2000 – Part 1
Removing Orphan Users from All databases on SQL Server
Beware of the System Generated Constraint Name
Using and Building Query Analyzer Templates

Click on pen to Use a Highlighter on this page
Tagged with:
 

Este es un muy buen artículo útil para aquellos que tienen que decidir cual tipo de acceso a datos es más conveniente utilizar según los distintos escenarios.

 

http://msdn.microsoft.com/es-es/magazine/ee335715.aspx

 

Creación de aplicaciones de N niveles con EF4

Daniel Simmons

Descargar el ejemplo de código

Este es el tercer artículo de una serie acerca de la programación de N niveles con Entity Framework (consulte msdn.microsoft.com/magazine/dd882522.aspx y msdn.microsoft.com/magazine/ee321569.aspx), en especial sobre la creación de servicios web personalizados con Entity Framework (EF) y Windows Communication Foundation (WCF). (En algunas situaciones, es adecuado un servicio basado en REST o algún otro enfoque, pero en estos artículos me he centrado en los servicios web personalizados). El primer artículo describió un número de importantes antipatrones y consideraciones del diseño. En el segundo artículo escribí acerca de cuatro patrones que se pueden usar correctamente en una aplicación de N niveles. Ese artículo también incluyó ejemplos de código que ilustran cómo se puede usar la primera versión de Entity Framework (EF 3.5 SP1) para implementar lo que llamo el patrón Entidades simples. En este artículo examinaremos algunas características que aparecen en la segunda versión de Entity Framework (EF4) y la manera de usarlas para implementar los patrones de N niveles Entidades de seguimiento automático y Objetos de transferencia de datos (DTO).

A pesar de que Entidades simples normalmente no es el patrón preferido para las aplicaciones de N niveles, es la opción más viable en la primera versión de EF. Sin embargo, EF4 cambia significativamente las opciones para la programación de N niveles con el marco. Algunas de las nuevas características clave incluyen lo siguiente:

  1. Nuevos métodos de marco que admiten operaciones desconectadas, como ChangeObjectState y ChangeRelationshipState, que cambian una entidad o una relación a un estado nuevo (por ejemplo, agregado o modificado); ApplyOriginalValues, que permite definir los valores originales para una entidad y el nuevo evento ObjectMaterialized que se activa cada vez que el marco crea una entidad.
  2. Compatibilidad con objetos CLR tradicionales (POCO) y valores de clave externa en las entidades. Estas características le permiten crear clases de entidad que se pueden compartir entre la implementación del servicio de nivel intermedio y otros niveles, que probablemente no tengan la misma versión de Entity Framework (.NET 2.0 o Silverlight, por ejemplo). Los objetos POCO con claves externas tienen un formato de serialización sencillo que simplifica la interoperabilidad con plataformas como Java. El uso de claves externas también permite un modelo de concurrencia mucho más simple para las relaciones.
  3. Plantillas T4 para personalizar la generación de código. Estas plantillas proporcionan una manera de generar clases que implementan los patrones DTO o Entidades de seguimiento automático.

El equipo de Entity Framework ha usado estas características para implementar el patrón Entidades de seguimiento automático en una plantilla, con lo que ese patrón es mucho más accesible, y a pesar de que los DTO siguen necesitando la mayor cantidad de trabajo durante la implementación inicial, este proceso también es más fácil con EF4. (La plantilla Entidades de seguimiento automático y algunas otras características de EF están disponibles como parte de una característica de descarga web de Community Technology Preview (CTP) en lugar de estarlo en la caja de Visual Studio 2010/.NET 4. Los ejemplos que aparecen en este artículo suponen que tanto Visual Studio 2010/.NET 4 como la característica CTP están instalados). Con estas nuevas capacidades, una forma de evaluar los cuatro patrones que he descrito (Entidades simples, Conjunto de cambios, Entidades de seguimiento automático y DTO) es en términos de un equilibrio entre el valor de la arquitectura (separación de preocupaciones/acoplamiento flexible, resistencia del contrato, formato eficiente de la conexión e interoperabilidad) y la facilidad de la implementación y el tiempo de comercialización. Si traza los cuatro patrones en un gráfico que represente este equilibrio, es probable que el resultado se vea similar a la figura 1.


Figura 1 Comparación de los patrones de N niveles con EF4

El patrón correcto para una situación específica depende de muchos factores. En general, los DTO proporcionan muchas ventajas de arquitectura con un alto costo inicial de implementación. Conjunto de cambios exhibe pocas características de arquitectura buenas, pero es fácil de implementar (cuando está disponible para una tecnología específica, por ejemplo, el DataSet en el ADO.NET tradicional).

Recomiendo un equilibrio pragmático y ágil entre estas preocupaciones al empezar con Entidades de seguimiento automático y avanzando a los DTO si la situación así lo garantiza. A menudo puede levantarse y ponerse en ejecución rápidamente con Entidades de seguimiento automático y seguir logrando muchos importantes objetivos de arquitectura. Este enfoque representa un equilibrio mucho mejor que Conjunto de cambios o Entidades simples, las que sólo recomendaría si no hubiese otras opciones viables. Por otro lado, los DTO son definitivamente la mejor opción cuando la aplicación se vuelve cada vez mayor y más compleja, o en caso de que tenga requisitos que Entidades de seguimiento automático no pueda satisfacer, como tasas distintas de cambio entre el cliente y el servidor. Estos dos patrones son las herramientas más importantes que tiene en su cuadro de herramientas, por lo que vamos a darles un vistazo.

Entidades de seguimiento automático

Para usar este patrón con Entity Framework, comience por crear un modelo de datos de entidades que represente las entidades conceptuales y asígnelo a una base de datos. Puede aplicar ingeniería inversa a un modelo proveniente de una base de datos que tenga y personalizarlo, o puede crear un modelo desde cero y luego generar una base de datos para hacerlos coincidir (otra característica nueva en EF4). Una vez establecido este modelo y la asignación, reemplace la plantilla de generación de código predeterminada con la plantilla Entidades de seguimiento automático con un clic del botón secundario en la superficie del diseñador de entidades y eligiendo Agregar elemento de generación de código.

A continuación, elija la plantilla Entidades de seguimiento automático desde la lista de plantillas instaladas. Este paso desactiva la generación de código predeterminada y agrega dos plantillas al proyecto: una plantilla genera ObjectContext y la otra genera clases de entidad. Separar la generación de código en dos plantillas hace posible dividir el código en ensamblados independientes, uno para las clases de entidad y otro para el contexto.

La ventaja principal que tiene este enfoque es que puede tener sus clases de entidad en un ensamblado que no tenga dependencias en Entity Framework. De este modo y si lo desea, el nivel intermedio y el cliente pueden compartir el ensamblado de entidad (o al menos el código que genera) y cualquier lógica de negocios que haya implementado. El contexto se mantiene en un ensamblado que tiene dependencias tanto en las entidades como en EF. Si el cliente del servicio está ejecutando .NET 4, simplemente puede hacer referencia al ensamblado de entidad desde el proyecto del cliente. Si el cliente ejecuta una versión anterior de .NET o Silverlight, es probable que desee agregar vínculos desde el proyecto del cliente a los archivos generados y volver a compilar el origen de la entidad en ese proyecto (teniendo como objetivo el CLR adecuado).

Independiente de la manera en que estructura el proyecto, las dos plantillas trabajan en conjunto para implementar el patrón Entidades de seguimiento automático. Las clases de entidad generadas son simples clases de POCO cuya única característica que va más allá del almacenamiento básico de propiedades de entidad es llevar un registro de los cambios en las entidades, el estado general de una entidad, los cambios en propiedades críticas como tokens de concurrencia y cambios en las relaciones entre las entidades. Esta información de seguimiento adicional es parte de la definición de DataContract para las entidades (para que cuando envía una entidad desde o hasta un servicio WCF, se transporte la información de seguimiento).

En el cliente del servicio, se realiza un seguimiento automático de los cambios en las entidades incluso si las entidades no están conectadas a ningún contexto. Cada entidad generada tiene código similar al siguiente para cada propiedad. Si cambia el valor de una propiedad en una entidad que tenga, por ejemplo, el estado Sin modificar, el estado cambia a Modificado:

[DataMember]
public string ContactName
{
    get { return _contactName; }
    set
    {
            if (!Equals(_contactName, value))
            {
                _contactName = value;
                OnPropertyChanged("ContactName");
            }
    }
}
private string _contactName;

De manera similar, si las entidades nuevas se agregan a un gráfico o se eliminan entidades de un gráfico, se registra esa información. Debido a que el estado de cada entidad se registra en la misma entidad, el mecanismo de seguimiento se comporta como se podría esperar, incluso cuando relaciona entidades recuperadas desde más de una llamada de servicio. Si establece una nueva relación, sólo se registra ese cambio; la entidad implicada mantiene el mismo estado, como si todas se hubiesen recuperado desde una sola llamada de servicio.

La plantilla de contexto agrega un método nuevo, ApplyChanges, al contexto generado. ApplyChanges adjunta un gráfico de entidades al contexto y configura la información en el ObjectStateManager para coincidir con la información registrada en las entidades. Con la información que las entidades registran sobre ellas mismas y ApplyChanges, el código generado administra tanto las preocupaciones de seguimiento de cambios como las de concurrencia, dos de las partes más difíciles de implementar correctamente una solución de N niveles.

Como ejemplo concreto, la figura 2 muestra un ServiceContract simple que podría usar con Entidades de seguimiento automático para crear un sistema de envío de pedidos de N niveles basado en la base de datos de ejemplo de Northwind.

Figura 2 Un contrato de servicio simple para el patrón Entidades de seguimiento automático

[ServiceContract]
public interface INorthwindSTEService
{
    [OperationContract]
    IEnumerable<Product> GetProducts();

    [OperationContract]
    Customer GetCustomer(string id);

    [OperationContract]
    bool SubmitOrder(Order order);

    [OperationContract]
    bool UpdateProduct(Product product);
}

El método de servicio GetProducts se usa para recuperar datos de referencia en el cliente acerca del catálogo de productos. Normalmente esta información se almacena en la memoria caché de forma local y no se actualiza a menudo en el cliente. GetCustomer recupera un cliente y una lista de los pedidos de ese cliente. La implementación de ese método es muy simple, como aquí aparece:

public Customer GetCustomer(string id)
{
    using (var ctx = new NorthwindEntities())
    {
        return ctx.Customers.Include("Orders")
        .Where(c => c.CustomerID == id)
        .SingleOrDefault();
    }
}

Este es esencialmente el mismo código que escribiría para una implementación de este tipo de método con el patrón Entidades simples. La diferencia es que las entidades que se devuelven son de seguimiento automático, lo que significa que el código de cliente para usar estos métodos también es muy simple, pero puede lograr mucho más.

Para ilustrarlo, supongamos que en el proceso de envío de pedidos no sólo desea crear un pedido con líneas de detalles de pedidos adecuadas, sino que también actualizar partes de la entidad de cliente con la información de contacto más reciente. Además, desea eliminar cualquier pedido que tenga una OrderDate nula (quizás el sistema marca como rechazados los pedidos de esa manera). Con el patrón Entidades simples, la combinación de agregar, modificar y eliminar entidades en un solo gráfico requeriría varias llamadas de servicio para cada tipo de operación o una implementación de servicio y contrato personalizado muy complicada si intentase implementar algo similar a Entidades de seguimiento automático en la primera versión de EF. Con EF4, el código de cliente podría verse como la figura 3.

Figura 3 Código de cliente para el patrón Entidades de seguimiento automático

var svc = new ChannelFactory<INorthwindSTEService>(
    "INorthwindSTEService")
    .CreateChannel();

var products = new List<Product>(svc.GetProducts());
var customer = svc.GetCustomer("ALFKI");

customer.ContactName = "Bill Gates";

foreach (var order in customer.Orders
    .Where(o => o.OrderDate == null).ToList())
{
    customer.Orders.Remove(order);
}

var newOrder = new Order();
newOrder.Order_Details.Add(new Order_Detail()
    {
        ProductID = products.Where(p => p.ProductName == "Chai")
                    .Single().ProductID,
        Quantity = 1
    });
customer.Orders.Add(newOrder);

var success = svc.SubmitOrder(newOrder);

Este código crea el servicio, llama a los dos primeros métodos en él para obtener la lista de productos y una entidad de cliente y luego realiza cambios en el gráfico de la entidad de cliente usando el mismo tipo de código que podría escribir si estuviese creando una aplicación de Entity Framework de dos niveles que se comunique directamente con la base de datos o si estuviese implementando un servicio en el nivel intermedio. (Si no está familiarizado con este estilo de creación de un cliente de servicio WCF, crea automáticamente un proxy de cliente sin crear servidores proxy para las entidades, porque estamos usando nuevamente las clases de entidad desde la plantilla Entidades de seguimiento automático. También podría usar el cliente generado por el comando Agregar referencia de servicio en Visual Studio si lo desea). Pero aquí no hay ObjectContext implicado. Sólo está manipulando las entidades. Finalmente, el cliente llama al método de servicio SubmitOrder para hacer subir los cambios al nivel intermedio.

Por supuesto, en una aplicación real los cambios que el cliente hace en el gráfico probablemente vendrían desde una interfaz de usuario de algún tipo y agregaría control de excepciones en torno a las llamadas de servicio (es importante especialmente cuando tiene que comunicarse a través de la red), pero el código que aparece en la figura 3 ilustra los principios. Otro elemento importante que hay que observar es que cuando crea la entidad de detalle de pedido para el pedido nuevo, configura sólo la propiedad ProductID en lugar de configurar la entidad Product misma. Esta es la nueva característica de relación de clave externa en acción. Reduce la cantidad de información que viaja a través de la transmisión, porque sólo serializa el ProductID de vuelta al nivel intermedio y no una copia de la entidad de producto.

Es en la implementación del método de servicio SubmitOrder donde realmente se destaca Entidades de seguimiento automático:

public bool SubmitOrder(Order newOrder)
{
    using (var ctx = new NorthwindEntities())
    {
        ctx.Orders.ApplyChanges(newOrder);
        ValidateNewOrderSubmission(ctx, newOrder);
        return ctx.SaveChanges() > 0;
    }
}

La llamada a ApplyChanges realiza toda la magia. Lee la información de cambios desde las entidades y la aplica al contexto de manera tal que el resultado sea el mismo que si esos cambios se hubiesen realizado todo el tiempo en entidades adjuntas al contexto.

Validación de los cambios

Otra cosa que debe tener en cuenta en la implementación de SubmitOrder es la llamada a ValidateNewOrderSubmission. Este método, que agregué a la implementación de servicio, examina el ObjectStateManager para asegurarse de que sólo están presentes los tipos de cambios que esperamos en una llamada a SubmitOrder.

Este paso es muy importante porque, por sí mismo, ApplyChanges empuja cualquier cambio que encuentra en un gráfico completo de objetos relacionados al contexto. Nuestra expectativa de que el cliente sólo agregará pedidos nuevos, actualizará al cliente, etc., no significa que un cliente con errores (o incluso malicioso) no haría nada más. ¿Qué pasa si cambiara el precio de un producto para hacer que un pedido sea más barato o más caro de lo que debiera ser? Los detalles sobre cómo se realiza la validación son menos importantes que la regla crítica que establece que siempre debe validar los cambios antes de guardarlos en la base de datos. Esta regla se aplica independiente del patrón de N niveles que use.

Un segundo principio de diseño crítico es que debe desarrollar métodos de servicio específicos por separado para cada operación. Sin estas operaciones por separado, no tiene un contrato seguro que represente lo que se permite y lo que no entre los dos niveles y la validación adecuada de los cambios puede llegar a ser imposible. Si tenía un solo método de servicio SaveEntities en lugar de un método SubmitOrder y UpdateProduct por separado (al que sólo pueden obtener acceso usuarios autorizados para modificar el catálogo de productos), podía implementar fácilmente la parte de aplicar y guardar de ese método, pero no podría validar de manera adecuada, porque no tendría manera de saber cuándo se permiten las actualizaciones de productos y cuando no.

Objetos de transferencia de datos

El patrón Entidades de seguimiento automático hace que el proceso de N niveles sea fácil, y si crea métodos de servicio específicos y valida cada uno de ellos, puede ser bastante firme en términos de arquitectura. Incluso así, hay límites para lo que puede hacer con el patrón. Cuando se encuentra con esos límites, los DTO son la solución para el dilema.

En los DTO, en lugar de compartir una implementación de entidad única entre el nivel intermedio y el cliente, crea un objeto personalizado que sólo se usa para transferir datos a través del servicio y desarrollar implementaciones de entidad por separado para el nivel intermedio y el cliente. Este cambio brinda dos beneficios principales: aísla el contrato de servicio de los problemas de implementación en el nivel intermedio y el cliente, lo que permite que el contrato siga estable incluso si cambia la implementación en los niveles, y le permite controlar los datos que fluyen a través de la transmisión. Por lo tanto, puede impedir el envío de datos innecesarios (o de datos a los que el cliente no está autorizado a obtener acceso) o volver a dar forma a los datos para hacerlos más convenientes para el servicio. Generalmente, el contrato de servicio está diseñado teniendo en mente los escenarios de cliente para que sea posible volver a dar forma a los datos entre las entidades de nivel intermedio y los DTO (probablemente combinando varias entidades en un DTO y pasando por alto las propiedades que no se necesitan en el cliente), mientras que es posible usar directamente los DTO en el cliente.

Sin embargo, estos beneficios implican el costo de tener que crear y mantener una o dos capas adicionales de objetos y asignaciones. Para ampliar el ejemplo de envío de pedidos, podría crear una clase sólo con el fin de enviar pedidos nuevos. Esta clase combinaría propiedades de la entidad de cliente con propiedades del pedido que se están configurando en el nuevo escenario de pedidos, pero la clase dejaría fuera propiedades de ambas entidades que están calculadas en el nivel intermedio o configuradas en alguna otra etapa del proceso. Esto hace que el DTO sea lo más pequeño y eficiente posible. Es posible que la implementación tenga el siguiente aspecto:

public class NewOrderDTO
{
    public string CustomerID { get; set; }
    public string ContactName { get; set; }
    public byte[] CustomerVersion { get; set; }
    public List<NewOrderLine> Lines { get; set; }
}

public class NewOrderLine
{
    public int ProductID { get; set; }
    public short Quantity { get; set; }
}

Está bien, en realidad son dos clases, una para el pedido y otra para las líneas de detalles de pedidos, pero el tamaño de los datos se mantiene lo más pequeño posible. La única información aparentemente externa en el código es el campo CustomerVersion, que contiene la información de versión de la fila que se usa para las comprobaciones de concurrencia en la entidad de cliente. Necesita esta información para la entidad de cliente, porque la entidad ya existe en la base de datos. Para el pedido y las líneas de detalles, son entidades nuevas que se envían a la base de datos, por lo que no se necesita su información de versión y el OrderID; las genera la base de datos cuando los cambios son persistentes.

El método de servicio que acepta este DTO usa las mismas API de Entity Framework de nivel inferior que la plantilla Entidades de seguimiento automático usa para lograr sus tareas, pero ahora debe llamar a esas API directamente, en lugar de dejar que el código generado las llame. La implementación viene en dos partes. Primero, cree un gráfico de entidades de cliente, pedido y detalle de pedido según la información en el DTO (consulte la figura 4).

Figura 4 Creación de un gráfico de entidades

var customer = new Customer
    {
        CustomerID = newOrderDTO.CustomerID,
        ContactName = newOrderDTO.ContactName,
        Version = newOrderDTO.CustomerVersion,
    };

var order = new Order
    {
        Customer = customer,
    };

foreach (var line in newOrderDTO.Lines)
{
    order.Order_Details.Add(new Order_Detail
        {
            ProductID = line.ProductID,
            Quantity = line.Quantity,
        });
}

Luego adjunte el gráfico al contexto y configure la información de estado adecuada:

ctx.Customers.Attach(customer);
var customerEntry = ctx.ObjectStateManager.GetObjectStateEntry(customer);
customerEntry.SetModified();
customerEntry.SetModifiedProperty("ContactName");

ctx.ObjectStateManager.ChangeObjectState(order, EntityState.Added);
foreach (var order_detail in order.Order_Details)
{
    ctx.ObjectStateManager.ChangeObjectState(order_detail,
       EntityState.Added);
}

return ctx.SaveChanges() > 0;

La primera línea adjunta todo el gráfico al contexto pero, cuando eso ocurre, cada entidad tiene el estado Sin modificar, por lo que primero indíquele al ObjectStateManager que cambie el estado de la entidad de cliente a Modificado, pero sólo con una propiedad, ContactName, marcada como modificada. Esto es importante porque en realidad no tiene toda la información de cliente, sino que sólo la información que estaba en el DTO. Si marcó todas las propiedades como modificadas, Entity Framework trataría de insistir en un buen número de valores nulos y ceros en otros campos de la entidad de cliente.

A continuación, cambie el estado del pedido y de cada uno de sus detalles de pedidos a Agregado y luego llame a SaveChanges.

¿Dónde está el código de validación? En este caso, como tiene un DTO muy específico para el escenario e interpreta ese objeto a medida que asigna la información desde él hacia sus entidades, realiza la validación a medida que avanza. No hay manera de que este código pudiera cambiar inadvertidamente el precio de un producto, porque nunca se toca la entidad de producto. Este es otro beneficio del patrón DTO, pero sólo de manera indirecta. Todavía tiene que realizar el trabajo de validación: el patrón sólo fuerza un nivel de validación. En muchos casos, el código necesita incluir la validación adicional de los valores u otras reglas empresariales.

Otra consideración es la administración adecuada de las excepciones de concurrencia. Como mencioné anteriormente, la información de versión para la entidad de cliente está incluida en el DTO, por lo que está configurado para detectar adecuadamente los problemas de concurrencia si alguien más modifica al mismo cliente. Un ejemplo más completo asignaría esta excepción a un error de WCF para que el cliente pudiera resolver el conflicto, o capturaría la excepción y aplicaría algún tipo de directiva automática para abordar el conflicto.

Si deseaba ampliar el ejemplo agregando otra operación, como la capacidad de modificar un pedido, podría crear otro DTO específicamente para ese escenario, con la información correcta justa para eso. Este objeto se vería similar a nuestro NewOrderDTO, pero tendría las propiedades OrderID y Version para las entidades de pedido y de detalles de pedido, así como también cada propiedad para la cual desea autorizar la autorización por parte de la llamada de servicio. La implementación del método de servicio también sería similar al método SubmitOrderDTO que mostramos anteriormente, revisando los datos de DTO, creando objetos de entidad correspondientes y luego definiendo su estado en el administrador de estados antes de guardar los cambios en la base de datos.

Si fuera a implementar el método de actualización de pedidos con Entidades de seguimiento automático y Objetos de transferencia de datos, encontraría que la implementación de Entidades de seguimiento automático vuelve a usar las entidades y comparte casi todo el mismo código de implementación de servicio con el nuevo método de envío de pedidos; la única diferencia sería el código de validación e incluso podría compartirse algo de eso. Sin embargo, la implementación de DTO requiere una clase de Objeto de transferencia de datos por separado para cada uno de los dos métodos de servicio y las implementaciones del método siguen patrones similares, pero tienen muy poco código, si lo hay, que se pueda compartir.

Sugerencias desde las trincheras

Presentamos algunas sugerencias sobre lo que se debe vigilar y comprender.

  • Asegúrese de volver a usar el código de entidad generado de la plantilla Entidad de seguimiento automático en el cliente. Si usa código proxy generado por Agregar referencia de servicio en Visual Studio o alguna otra herramienta, las cosas se ven correctas en su mayor parte, pero descubrirá que las entidades no realizan un seguimiento real de sus cambios en el cliente.
  • Cree una nueva instancia de ObjectContext en una instrucción Using para cada método de servicio a fin de eliminarlo antes de que el método se devuelva. Este paso es crítico para la escalabilidad del servicio. Asegura que las conexiones de base de datos no se mantienen abiertas a través de las llamadas de servicio y que el estado temporal usado por una operación en especial es basura que se recoge cuando se termina la operación. Entity Framework automáticamente almacena en caché los metadatos y otra información que necesita en el dominio de la aplicación, y las conexiones de base de datos de grupos ADO.NET, por lo que volver a crear el contexto cada vez es una operación rápida.
  • Use la nueva característica de relaciones de clave externa cada vez que sea posible. Hace que el cambio de relaciones entre las entidades sea mucho más fácil. Con asociaciones independientes (el único tipo de relación disponible en la primera versión de Entity Framework), las comprobaciones de concurrencia se realizan en las relaciones independiente de las comprobaciones de concurrencia realizadas en las entidades, y no hay forma de excluirse de estas comprobaciones de concurrencia de relaciones. El resultado es que los servicios deben llevar los valores originales de las relaciones y configurarlos en el contexto antes de cambiar las relaciones. Sin embargo, con relaciones de clave externa, la relación es simplemente una propiedad de la entidad, y si la entidad pasa su comprobación de concurrencia, no se necesita una comprobación adicional. Puede cambiar una relación si simplemente cambia el valor de clave externa.
  • Tenga cuidado con las colisiones de EntityKey cuando adjunte un gráfico a un ObjectContext. Por ejemplo, si usa DTO y partes del gráfico representan entidades agregadas recientemente para las que los valores clave de entidad no estén definidos, porque se generarán en la base de datos, debe llamar al método AddObject para agregar el gráfico completo de entidades y luego cambiar las entidades que no tengan estado Agregado al estado deseado, en lugar de llamar al método Attach y luego cambiando las entidades Agregadas a ese estado. De lo contrario, cuando llama por primera vez a Attach, Entity Framework piensa que cada entidad debe tener el estado Sin modificar, lo que supone que los valores clave de entidad son finales. Si más de una entidad de un tipo en especial tiene el mismo valor clave (por ejemplo, 0), Entity Framework arrojará una excepción. Si comienza con una entidad con estado Agregada, evita este problema porque el marco no espera que las entidades Agregadas tengan valores clave únicos.
  • Desactive la carga diferida automática (otra característica nueva de EF4) cuando se devuelvan entidades desde los métodos de servicio. Si no lo hace, el serializador activará la carga diferida y tratará de recuperar entidades adicionales desde la base de datos, lo que hará que se devuelvan más datos de los deseados (si las entidades están completamente conectadas, podría serializar toda la base de datos) o, lo que es más probable, recibirá un error porque se eliminará el contexto antes de que el serializador trate de recuperar los datos. Entidades de seguimiento automático no tiene activada la carga diferida de manera predeterminada, pero si crea una solución DTO es algo que tiene que vigilar.

Y al final

La versión .NET 4 de Entity Framework hace que la creación de aplicaciones de N niveles sólidas en su arquitectura sea mucho más fácil. Para la mayoría de las aplicaciones, recomiendo comenzar con la plantilla Entidades de seguimiento automático, que simplifica el proceso y permite volver a usar la mayor parte. Si tiene diferentes tasas de cambio entre el servicio y el cliente o si necesita tener el control absoluto del formato de la conexión, debe moverse a una implementación de Objetos de transferencia de datos. Independiente del patrón que elija, siempre tenga en cuenta los principios clave que representan los patrones y antipatrones y nunca olvide validar los datos antes de guardar.

Daniel Simmons es arquitecto miembro del equipo de Entity Framework en Microsoft.

Click on pen to Use a Highlighter on this page
Tagged with:
 

quinto simposio latinoamericano

Bienvenidos

Te invitamos a participar en el evento de SharePoint 2010 más grande de Latinoamérica, este 31 de agosto de 2011, en Pueblo Antiguo, San José, Costa Rica

Recibirás charlas impartidas por excelentes expositores nacionales e internacionales, enfocadas a Gerentes, tomadores de decisiones, desarrolladores y profesionales de TI.

En el evento recibirás alimentación completa y un certificado de participación. Además de tener la oportunidad de recibir obsequios de nuestros patrocinadores.

Deseamos tener un evento amigable con el ambiente y reducir el consumo de papel, así que cada participante recibirá una memoria USB con la información del evento y regalos de nuestros patrocinadores.

¿Por que debo asistir?
Con este simposio usted obtendrá conocimientos impartidos por los mejores profesionales de SharePoint de Habla Hispana, y también por expositores frecuentes de los grandes eventos de Microsoft, como Joel Oleson, Gustavo Velez, Juan Carlos Gonzáles, entre muchos otros.
El asistir a este evento equivale a recibir todo un día de capacitación en SharePoint, y usted obtendrá un certificado que lo confirme.

Precio

$100.00 hasta el 12 de agosto del 2011

$120.00 a partir del 13 de agosto del 2011

Instrucciones aquí

Contáctenos


Para recibir más información comuníquese con:
Vielka Rojas
vkrojas@hotmail.com
(506) 8373-6175
Ricardo Muñoz
rjmunozm@gmail.com
(56) 68774399



Logo: yo asistiré al simposio


Auspiciadores:

Organizan

Comunidad SharePoint Costa Rica
Microsoft

CTE

Patrocinadores Platino


Patrocinadores Oro


Patrocinadores Plata

Siderys
Kaldeera

Conzultek
Krasis

AtlantisSoft

Contáctenos


Click on pen to Use a Highlighter on this page

Me parece que este es un buen resumen para el trabajo con SharePoint Designer 2010, les dejo el artículo a mano, el original esta en: http://office.microsoft.com/es-hn/sharepoint-designer-help/introduccion-al-diseno-y-la-personalizacion-de-flujos-de-trabajo-HA101859249.aspx

En su empresa, diversos grupos usan sitios de Microsoft SharePoint para colaborar en documentos y compartir información. Suponga que desea crear soluciones de SharePoint que mejoren la productividad y la eficiencia de su organización, pero no desea escribir código. ¿Por dónde comenzar?

Con Microsoft SharePoint Designer 2010, puede diseñar soluciones de flujo de trabajo sin código que administren procesos de negocio simples y complejos de una organización. Los flujos de trabajo agregan lógica tanto a procesos del sistema como a procesos humanos. Los flujos de trabajo para procesos del sistema pueden actualizar un origen de datos cuando otro origen de datos cambia. Los flujos de trabajo para procesos humanos pueden enviar un documento, como un informe de gastos, al responsable de un empleado para que dé su aprobación y, si se aprueba, transferirlo al departamento de contabilidad para que se procese.

Ilustración de SharePoint Designer 2010

Esto es posible gracias al editor de flujos de trabajo intuitivo y eficaz, SharePoint Designer 2010, que permite lógica anidada, pasos secundarios y mucho más. Por ejemplo, si el flujo de trabajo está asociado con una biblioteca de documentos o si está filtrado con el tipo de contenido Documento, aparecerá un grupo de acciones contextuales de Conjunto de documentos. Un conjunto de documentos es una característica nueva de SharePoint Server 2010 por medio de la cual un grupo de documentos se trata como una sola unidad, de modo que una acción de flujo de trabajo para un conjunto de documentos se repetirá en todos los elementos de ese conjunto de documentos.

Entre las nuevas acciones de flujo de trabajo, se incluyen aquellas que conforman la base de los tres flujos de trabajo más utilizados de SharePoint Server (los flujos de trabajo Aprobación, Recopilar comentarios y Recopilar firmas), acciones de utilidad para manipular cadenas y fechas, una nueva acción relacional que usa el almacén de perfiles de usuario de SharePoint para buscar al jefe de una persona y acciones de lista nuevas que puede usar un flujo de trabajo para establecer permisos en un elemento de lista.

También es posible diseñar y compartir los flujos de trabajo mediante Microsoft Visio con las plantillas de diagramas de flujo que pueden exportarse a SharePoint Designer 2010.

Ilustración de SharePoint Designer 2010

En este artículo, se presentan los conceptos básicos de los flujos de trabajo. Cuando comprenda los tipos de flujos de trabajo y sus bloques de creación básicos (acciones, condiciones y pasos), podrá agregar rápidamente flujos de trabajo para automatizar procesos y ayudar a mejorar la productividad y eficiencia de su organización.

En este artí­culo:


¿Qué es un flujo de trabajo?

Los flujos de trabajo son la forma en la que funciona una organización, una serie de acciones que corresponden a un proceso de trabajo, como el proceso de los pedidos de compra. SharePoint 2010 le ayuda a automatizar estos flujos de trabajo, lo que mejora la eficiencia y la productividad de la organización. Esto se debe a que los flujos de trabajo automatizados controlan los procesos, de forma que la organización se puede centrar en realizar el trabajo, en lugar de en administrar los procesos.

Los flujos de trabajo pueden controlar la mayoría de los aspectos de un elemento de lista, tipo de contenido, biblioteca, lista o sitio de SharePoint 2010, como el ciclo de vida de dicho elemento. El flujo de trabajo puede incluir tanto acciones realizadas por personas (o participantes en el flujo de trabajo) como acciones realizadas por el propio flujo de trabajo. Los participantes en el flujo de trabajo pueden interaccionar con el flujo de trabajo a través de la lista Tareas designada, donde un flujo de trabajo puede crear una tarea para alguien y permanecer en pausa hasta que se marque la tarea como completa.

Los flujos de trabajo pueden ser tan sencillos o tan complejos como requieran los procesos empresariales. Puede crear un flujo de trabajo que inicie el usuario o un flujo de trabajo que se inicie automáticamente basándose en un evento, por ejemplo, cuando se cree o se cambie un elemento de lista.

Por lo general, al usar SharePoint Designer 2010 para diseñar un flujo de trabajo, seguirá estos pasos básicos:

  • Elija el tipo de flujo de trabajo que desee crear: lista, lista reutilizable o sitio.
  • Use el editor de flujos de trabajo para elegir y componer las condiciones y acciones que definirán los pasos del flujo de trabajo, de forma que represente al proceso de negocio que desea automatizar.
  • Guarde y publique el flujo de trabajo.
  • Personalice los formularios de flujo de trabajo generados automáticamente si es necesario.

Un flujo de trabajo se puede considerar como un diagrama de flujo de acciones con un principio, un fin y un flujo en secuencia de principio a fin. Los flujos de trabajo pueden incorporar ramas en paralelo pero, en definitiva, progresan desde la acción final hasta la acción final.

Por ejemplo, suponga que va a representar gráficamente el flujo de trabajo que distribuye un documento de SharePoint 2010 para su aprobación. Cuando se inicia el flujo de trabajo, notifica automáticamente al revisor especificado por correo electrónico de que tiene un documento para revisar. El revisor revisa el documento y cambia el estado del mismo para indicar que ha completado su tarea y si el documento se ha aprobado o rechazado. En función de la respuesta del revisor, el flujo de trabajo continuará por una o dos ramas paralelas. Si el revisor aprueba el documento, el flujo de trabajo moverá el documento aprobado a una biblioteca de documentos específica y enviará un mensaje por correo electrónico al grupo para notificarles la existencia del documento aprobado. Si el revisor rechaza el documento, el flujo de trabajo se lo notificará al creador del documento. En ambos casos, el flujo de trabajo llega así a su final y el proceso queda completado.

Diagrama de flujo de proceso de flujo de trabajo

Diagrama 1: Ejemplo de flujo de trabajo de aprobación

¿Qué tipos de flujo de trabajo se deben diseñar?

Existen tres tipos de flujos de trabajo en SharePoint 2010:

  • Lista
  • Lista reutilizable
  • Sitio

Nuevo flujo de trabajo

Flujos de trabajo de lista

Este tipo de flujo de trabajo era el que estaba disponible en SharePoint 2007. Dado que tienen el contexto de la lista para la que se han creado, los flujos de trabajo de lista tienen acceso automático a los valores de los campos personalizados para el elemento de lista en los que se ejecutan, como el campo personalizado Notas de una biblioteca de documentos. Los flujos de trabajo de lista no pueden estar disponibles para otras listas o bibliotecas de este o de otros sitios. Para disponer de la misma funcionalidad de flujo de trabajo en varias listas, es necesario volver a crear los flujos de trabajo en todas las ubicaciones.

Si sabe que únicamente va a necesitar los flujos de trabajo que diseña para una lista determinada, el flujo de trabajo de lista presenta la ventaja de que los campos personalizados de las listas se encontrarán disponibles automáticamente.

Flujos de trabajo de lista reutilizable

Puede crear un flujo de trabajo de lista reutilizable (flujo de trabajo reutilizable) en el sitio de nivel superior de la colección de sitios y ese flujo de trabajo será reutilizable globalmente, lo que significa que el flujo de trabajo se puede asociar con cualquier lista, biblioteca o tipo de contenido de la colección de sitios. También puede crear un flujo de trabajo reutilizable en cualquier subsitio de la colección de sitios; este flujo de trabajo estará disponible para volver a usarlo en este subsitio en particular.

También puede exportar un flujo de trabajo reutilizable de un sitio y luego cargarlo y activarlo en un sitio diferente. Por ejemplo, puede crear un flujo de trabajo reutilizable en un entorno de prueba, probarlo y, a continuación, exportarlo a un entorno de producción. SharePoint Designer 2010 admite la exportación de un flujo de trabajo como plantilla.

De forma predeterminada, los flujos de trabajo reutilizables no tienen el contexto de una lista o biblioteca específica. Por lo tanto, de forma predeterminada, solo proporcionan las columnas comunes en listas y bibliotecas, como Creado y Creado por.

Si el flujo de trabajo reutilizable requiere que ciertas columnas estén presentes en la lista o biblioteca a la que lo ha asociado, puede agregar las columnas como columnas de asociación. Las columnas de la asociación se agregan automáticamente a una lista o biblioteca cuando un flujo de trabajo reutilizable está asociado a esa lista o biblioteca.

Cuando crea un flujo de trabajo reutilizable, también puede elegir filtrarlo para un tipo de contenido específico. Esto le permitirá trabajar con los campos del tipo de contenido en SharePoint Designer 2010. Por ejemplo, si se asocia un flujo de trabajo de lista reutilizable con el tipo de contenido de documento, verá y usará en su flujo de trabajo campos específicos del tipo de contenido, como Id. de documento. A continuación, en el explorador, puede asociar el flujo de trabajo reutilizable con un tipo de contenido específico o con cualquier tipo de contenido que herede de ese tipo de contenido. Si asocia un flujo de trabajo con un tipo de contenido de sitio, hace que dicho flujo de trabajo esté disponible para todos los elementos de ese tipo de contenido en cada lista y biblioteca del sitio a la que se ha agregado ese tipo de contenido. También es posible que esté disponible para los sitios de una colección si el flujo de trabajo está configurado para ser un flujo de trabajo reutilizable globalmente.

Si desea que los usuarios puedan usar los flujos de trabajo que diseña en varios sitios, listas, bibliotecas y tipos de contenido, un flujo de trabajo reutilizable será probablemente el que mejor se adapte a sus necesidades. Esperamos que la mayoría de los flujos de trabajo para SharePoint 2010 usen flujos de trabajo reutilizables.

Flujos de trabajo de sitio

Un flujo de trabajo de sitio está asociado a un sitio, no a una lista, biblioteca ni tipo de contenido. Por lo tanto, a diferencia de la mayoría de los flujos de trabajo, un flujo de trabajo de sitio no se ejecuta en un elemento de lista específico. Por ello, muchas de las acciones que están disponibles para elementos no lo están para los flujos de trabajo de sitio.

En el explorador, puede iniciar un flujo de trabajo de sitio o ver el estado de los flujos de trabajo de sitio en ejecución si hace clic en el menú Acciones del sitio, a continuación, en Ver todo el contenido del sitio y, finalmente, en Flujos de trabajo del sitio.

Si desea crear un flujo de trabajo, pero no necesita una lista, biblioteca ni tipo de contenido para los flujos de trabajo, es probable que un flujo de trabajo de sitio se ajuste mejor a sus necesidades. Por ejemplo, puede crear un flujo de trabajo de sitio para que los usuarios dejen comentarios sobre su sitio.

Personalizar flujos de trabajo en SharePoint Server 2010

No es necesario empezar de cero a diseñar flujos de trabajo que se ajusten a los procesos de su organización. Los cuatro flujos de trabajo más utilizados en SharePoint Server 2007 (los flujos de trabajo Aprobación, Recopilar comentarios, Recopilar firmas y Aprobación de publicación) se han rediseñado por completo como flujos de trabajo reutilizables declarativos, por lo que ahora se pueden personalizar completamente en SharePoint Designer 2010. Puede copiar y modificar (recomendado) o editar estos flujos de trabajo, así como flujos de trabajo reutilizables personalizados, para satisfacer las necesidades de su organización.

Nota    En SharePoint 2010 hay flujos de trabajo adicionales, como el flujo de trabajo Tres estados, pero no son flujos de trabajo declarativos, luego no se pueden modificar.

Copiar y modificar un flujo de trabajo

Estos flujos de trabajo están controlados por eventos y todos los eventos importantes del flujo de trabajo se muestran en el editor de flujos de trabajo, tanto para cada tarea del proceso como para el proceso completo. Por ejemplo, puede agregar fácilmente condiciones y acciones para definir lo que sucede cuando se asigna cada tarea, o bien cuando caduca o se completa.

¿Qué son eventos, acciones, condiciones y pasos?

Son los bloques de creación básicos de un flujo de trabajo. Un flujo de trabajo consta de uno o varios pasos y cada paso consta de acciones y las condiciones asociadas. Cada flujo de trabajo se inicia por un evento.

¿Qué son eventos?

Un evento es lo que inicia o activa un flujo de trabajo. Los eventos también se pueden usar para administrar la coordinación de las acciones de un flujo de trabajo, como esperar a que cambie el estado de un elemento. Hay tres elementos que pueden iniciar un flujo de trabajo:

  • La creación de un elemento.
  • La modificación de un elemento.
  • Un participante del flujo de trabajo hace clic en un botón de inicio en el sitio de SharePoint.

Nota    Los flujos de trabajo de sitio solo se pueden iniciar manualmente.

Puede crear un flujo de trabajo que un participante inicie manualmente, o un flujo de trabajo que se inicie automáticamente cuando se cree o se cambie un elemento de lista. Por ejemplo, suponga que desea configurar su flujo de trabajo personalizado Aprobación de solicitud de cambio de diseño para que se pueda iniciar manualmente y cuando cambie un elemento, pero no cuando se cree un elemento inicialmente. En la página de configuración del flujo de trabajo, en Opciones de inicio, seleccione Deshabilitar la opción de inicio automático al crear un elemento.

Opciones de inicio de flujos de trabajo

Cuando un participante inicia el flujo de trabajo manualmente, dicho usuario primero busca la lista o la biblioteca a la que está asociado el flujo de trabajo. Cualquier usuario que tenga al menos el nivel de permisos Colaborar puede iniciar un flujo de trabajo que se haya diseñado para iniciarse manualmente. Para iniciar los flujos de trabajo manualmente, el participante hará clic en un elemento, luego hará clic en Flujos de trabajo en el menú y, a continuación, elegirá un flujo de trabajo en una página en la que aparecerán todos los flujos de trabajo disponibles para el elemento. El participante rellenará un formulario de inicio del flujo de trabajo, si es necesario, y luego iniciará el flujo de trabajo haciendo clic en el botón de inicio del formulario. Al iniciar un flujo de trabajo, se crea una nueva instancia del flujo de trabajo para ese elemento específico.

Iniciar manualmente un flujo de trabajo

Nota   El comando Flujos de trabajo solo se encuentra disponible cuando el elemento se encuentre en una lista o biblioteca, o sea de un tipo de contenido que tenga al menos un flujo de trabajo a él asociado.

En un flujo de trabajo iniciado manualmente, el formulario de inicio puede ser tan simple como el de la imagen de la izquierda o más complejo, como el de la imagen de la derecha.

Formulario simple

Formulario de inicio del flujo de trabajo simple

Formulario más complejo

Formulario de inicio del flujo de trabajo

También se pueden agregar campos personalizados a un formulario de inicio al diseñar el flujo de trabajo. Los participantes del flujo de trabajo podrán entonces proporcionar información al flujo de trabajo rellenando el formulario, y esos valores se transmitirán al flujo de trabajo. Se iniciará una instancia nueva del flujo de trabajo, que podrá buscar y usar la información proporcionada mediante el formulario en cualquier punto del flujo de trabajo. Asimismo, puede especificar los campos que se usarán en un formulario de asociación para flujos de trabajo reutilizables.

¿Qué son acciones?

Una acción es la unidad de trabajo más básica de un flujo de trabajo. En SharePoint Designer 2010, se proporciona un conjunto de acciones listas para usar y reutilizables, para incorporarlas en flujos de trabajo. Por ejemplo, un flujo de trabajo puede:

  • Crear, copiar, cambiar o eliminar elementos de lista (incluidos documentos).
  • Proteger o desproteger elementos.
  • Enviar un mensaje por correo electrónico.
  • Crear una tarea para alguien en la lista Tareas de su sitio de grupo.
  • Recopilar datos de un participante a los que se puede hacer referencia posteriormente en el flujo de trabajo.
  • Interrumpir o detener el flujo de trabajo.
  • Registrar información del flujo de trabajo en una lista de historial para usarla para depuración del flujo de trabajo o rechazos.
  • Establecer variables del flujo de trabajo o realizar cálculos.

SharePoint Server 2010 incluye tres acciones de tareas nuevas: Iniciar proceso de aprobación, Iniciar proceso de comentarios e Iniciar proceso de tarea personalizado. Los tres flujos de trabajo principales que se incluyen en SharePoint Server 2010 (los flujos de trabajo Aprobación, Recopilar comentarios y Recopilar firmas) están diseñados con estas acciones. Las acciones de aprobación muestran todos los eventos importantes en un proceso de aprobación y permiten diseñar fácilmente un proceso de flujo de trabajo de usuarios donde muchas personas interactúan o colaboran en un documento específico.

Acción de comentarios

Un flujo de trabajo puede contener cualquier cantidad de acciones. Las acciones que acaban de mencionarse las realiza el flujo de trabajo, pero hay otras acciones que pueden realizar los participantes del flujo de trabajo. Por ejemplo, en un flujo de trabajo de aprobación, la revisión y aprobación del documento las realiza un participante del flujo de trabajo. Las acciones que realiza un participante del flujo de trabajo se representan mediante tareas asignadas a dicha persona en la lista Tareas designada. Las cinco acciones del Diagrama 1: ejemplo de flujo de trabajo de diagrama, cerca del principio de este artículo, son:

  • Enviar un mensaje por correo electrónico para notificar al revisor
  • Revisar el documento (una tarea asignada a un participante del flujo de trabajo)
  • Mover el documento a la biblioteca de documentos aprobados
  • Enviar un mensaje por correo electrónico para notificar al grupo
  • Enviar un mensaje por correo electrónico para notificar al creador del documento

En el sentido más básico, al diseñar un flujo de trabajo, se identifica la secuencia de acciones necesaria y luego se ensambla esa secuencia mediante el editor de flujos de trabajo. Por ejemplo, en el Diagrama 1: ejemplo de flujo de trabajo de aprobación, la primera acción que desea es enviar un mensaje de correo electrónico para notificar al revisor.

Diagrama de flujo, enviar un mensaje por correo electrónico al revisor

Así, en el editor de flujos de trabajo, debe hacer clic en el primer paso, escribir el correo electrónico completo o parte de él y elegir Enviar correo electrónico.

Enviar correo electrónico

¿Qué son condiciones?

Cuando se diseña un flujo de trabajo, se puede usar el editor de flujos de trabajo para crear reglas que apliquen lógica condicional a sitios, listas, elementos y tipos de contenido de SharePoint. Una regla establece una condición según la cual el flujo de trabajo realiza la acción asociada solamente si se cumple la condición. Por ejemplo, se puede crear una regla según la cual el flujo de trabajo envíe un mensaje por correo electrónico al revisor únicamente si una persona específica crea un elemento. También se pueden agregar varias condiciones por rama. Por ejemplo, se puede crear una regla según la cual se envíe un mensaje por correo electrónico a un revisor solamente si un elemento (1) lo crea una persona específica y (2) el título del documento contiene palabras clave específicas. Por último, es posible asociar varias acciones con una condición. Por ejemplo, se puede crear una regla según la cual, si una persona específica crea un elemento, (1) se envía un mensaje por correo electrónico al revisor y (2) se registra la información del flujo de trabajo en la lista de historial.

Condiciones y acciones

En resumen, una regla es una o varias condiciones asociadas a una o varias acciones: si se cumplen todas las cláusulas de la condición, se realizarán todas las acciones asociadas.

En el ejemplo anterior, el usuario especificó un conjunto de dos condiciones y un conjunto de dos acciones para el flujo de trabajo. No obstante, es posible crear varias ramas en el flujo de trabajo: si se cumple la condición A, realizar una acción; si se cumple la condición B, realizar otra acción distinta. Para agregar una rama a un paso, haga clic en Inserta una rama Else-If. Por ejemplo, en el flujo de trabajo de aprobación, si el revisor aprueba un documento, el flujo de trabajo realiza una serie de acciones; si el revisor rechaza un documento, el mismo flujo de trabajo realiza una acción diferente. Esto es una rama condicional.

Ejemplo de diagrama de flujo, el aprobador revisa un documento

En el editor de flujos de trabajo, este paso tiene dos ramas y el siguiente aspecto.

Rama condicional Else

También puede crear una rama que no tenga ninguna condición. De este modo, el flujo de trabajo realiza una acción si se cumple una condición o un conjunto de condiciones y otra acción distinta si no se cumplen las condiciones. Por ejemplo, el paso siguiente de un flujo de trabajo envía un mensaje a los Aprobadores solamente si se cumple la condición; en caso contrario, el flujo de trabajo envía un mensaje únicamente al iniciador del flujo de trabajo. Al agregar una rama sin condiciones, el flujo de trabajo realiza la acción de esa rama siempre que no se cumpla la condición de la primera rama.

Nota    Para que una rama no tenga ninguna condición, debe ser la última rama del bloque condicional y no la única rama del bloque condicional.

Paso 1

Nota    Las ramas en un flujo de trabajo no se pueden extender de un paso a otro. Un conjunto de ramas ‘Else-If’, también conocido como bloque condicional, siempre está contenido en un solo paso. No obstante, es posible anidar pasos como pasos secundarios.

SharePoint Designer 2010 proporciona varias condiciones listas para usar y reutilizables, para incorporarlas en flujos de trabajo. Por ejemplo, se puede especificar que el flujo de trabajo realice las acciones asociadas solamente si un elemento:

  • Se crea o se modifica durante un intervalo de tiempo específico.
  • Lo crea o lo modifica una persona específica.
  • Tiene un campo de título que contiene palabras clave específicas.
  • Es un archivo de un tipo específico o tiene un tamaño de archivo comprendido en un intervalo específico (esta condición solo está disponible cuando el flujo de trabajo está asociado a una biblioteca de documentos).

Para obtener más información sobre las condiciones disponibles en SharePoint Designer 2010, vea la guía de referencia rápida sobre las condiciones del flujo de trabajo en SharePoint Designer 2010.

Además, se pueden crear condiciones personalizadas y condiciones avanzadas en SharePoint Designer 2010 en las que se puede especificar una amplia variedad de parámetros. Con las condiciones personalizadas, puede comparar un campo de la lista actual con un valor. Por ejemplo, puede crear una condición personalizada según la cual, si el campo Estado de aprobación es igual a Aprobado, se realice la acción asociada. Con las condiciones avanzadas, puede comparar un valor con otro. De este modo, puede establecer una comparación entre un campo de una lista y un valor de otra lista. Por ejemplo, puede crear una condición avanzada para la biblioteca Documentos compartidos según la cual, si el valor del campo Estado en la lista Tareas es igual a Pendiente, se realice la acción asociada.

Nota    Una acción no requiere una condición. Por ejemplo, el primer paso del Diagrama 1: ejemplo de flujo de aprobación, cerca del principio de este artículo, envía un mensaje por correo electrónico para notificar al revisor. Esta acción no tiene ninguna condición asociada. Un bloque paralelo de acciones tampoco requiere ninguna condición.

Acciones en paralelo frente a acciones en serie

Si hay más de una acción asociada a una condición, las acciones se pueden configurar de modo que se ejecuten al mismo tiempo (en paralelo) o una detrás de otra (en serie), la opción predeterminada.

Bloque paralelo

Acciones en serie    Por ejemplo, en el flujo de trabajo siguiente, se pueden definir dos acciones de modo que, cuando se apruebe un documento, el documento se copie en la biblioteca de documentos de archivado y, posteriormente, se envíe un mensaje. En el editor de flujos de trabajo, entonces indica que la segunda acción ocurre tras la primera.

Acción en serie

Acciones paralelas Por ejemplo, en el siguiente flujo de trabajo, se pueden definir dos acciones de forma que, cuando se apruebe un documento, se envíe un mensaje y, simultáneamente, se copie el documento en la biblioteca de documentos aprobados. En el editor de flujos de trabajo, y indica que la segunda acción ocurre al mismo tiempo que la primera. Esto resulta especialmente útil con tareas y acciones que tardan un tiempo considerable. Por ejemplo, en el caso de las tareas, se puede usar para controlar cuándo se asignan las tareas.

Nota   Las acciones en paralelo no son absolutamente simultáneas; el orden exacto no se puede especificar y puede variar cada vez que se ejecuta el flujo de trabajo.

Bloque paralelo

Notas

  • En una regla (condiciones y acciones), las acciones se pueden producir en serie, en paralelo o combinando ambos modos.
  • Un conjunto de acciones en serie o en paralelo debe estar incluido en un solo paso.
¿Qué son pasos?

Un flujo de trabajo consta de uno o varios pasos. Cada paso puede contener varias acciones y condiciones asociadas. Incluso se pueden anidar pasos en otros pasos. Esto puede servir para ayudar a organizar el flujo de trabajo. Los pasos se pueden considerar bloques de funcionalidad en el editor de flujos de trabajo. Por ejemplo, el flujo de trabajo siguiente tiene dos pasos, como se indica en el editor de flujos de trabajo.

Varios pasos

Los pasos permiten agrupar condiciones y acciones de modo que un conjunto de reglas (condiciones y acciones) se pueda evaluar y realizar antes que un segundo conjunto.

Configure acciones en un flujo de trabajo para que se ejecuten con los permisos del autor del flujo de trabajo. En SharePoint Designer 2010, puede usar pasos de suplantación para que el flujo de trabajo realice acciones suplantando al autor del flujo de trabajo en lugar del iniciador del flujo de trabajo. Los pasos de suplantación son de gran utilidad en escenarios de aprobación y de publicación, donde las personas que envían contenido para aprobación y las personas que aprueban contenido tienen diferentes permisos.

El autor del flujo de trabajo es la última persona que lo publicó. Cuando otro usuario vuelve a publicar el flujo de trabajo, el autor del flujo de trabajo no cambia en las instancias en curso del flujo de trabajo. Las instancias del flujo de trabajo que se inicien después de que se vuelva a publicar el flujo de trabajo usarán el autor del flujo de trabajo actualizado,

Nota    Los pasos de suplantación solo se pueden agregar a la raíz de un flujo de trabajo y no se pueden anidar en otro paso.

En el siguiente escenario, el usuario que inicia el flujo de trabajo no tiene permisos para agregar un archivo a la biblioteca de archivado, pero el autor del flujo de trabajo sí los tiene. Cuando el usuario inicia el flujo de trabajo, si la condición se cumple en el paso de suplantación, el documento se copiará a la biblioteca de archivado con los permisos del autor del flujo de trabajo. El paso 2 no es un paso de suplantación; por lo tanto, se ejecuta como iniciador del flujo de trabajo. Se recomienda usar únicamente pasos de suplantación para conjuntos mínimos de acciones que requieran los permisos del autor del flujo de trabajo para completarse correctamente.

Paso de suplantación

¿Un paso o varios? Algunos flujos de trabajo se pueden diseñar como una secuencia de acciones en un paso o como una secuencia de pasos. Por ejemplo, las acciones del siguiente paso se pueden dividir en pasos distintos o anidar con el bloque condicional como pasos distintos.

Varias acciones en un paso

A continuación, se incluye un ejemplo de un proceso que usa pasos anidados en un bloque condicional.

Acciones en pasos anidados

Los pasos son una forma de organizar el flujo de trabajo. El modo exacto en el que se usan los pasos del flujo de trabajo depende, en gran medida, de las preferencias personales de cada uno. Por ejemplo, un flujo de trabajo podría tener numerosas acciones en un paso que no usara condiciones. En tal caso, podría ser útil separar las acciones en pasos para organizarlas mejor. Las reglas de un paso se procesan hasta el final antes de proceder al siguiente paso, por lo que conviene agrupar en el mismo paso las reglas necesarias que afecten a la acción o las acciones específicas que se desee.

¿Qué son los formularios de flujo de trabajo?

Para que un flujo de trabajo sea más dinámico y flexible, se le puede agregar un formulario. Mediante un formulario, es posible recopilar información de los participantes del flujo de trabajo en los tiempos predefinidos en el flujo de trabajo y permitir a los participantes interactuar con las tareas para ese flujo de trabajo, así como ayudar a garantizar que los datos se encuentren disponibles para flujos de trabajo reutilizables, independientemente de la lista, la biblioteca o el tipo de contenido con el que esté asociado.

Con SharePoint Designer 2010, puede crear tres tipos de formularios de flujo de trabajo:

  • Un formulario de inicio reúne información del participante del flujo de trabajo cuando éste inicia el flujo de trabajo. Se genera automáticamente al crear el flujo de trabajo en SharePoint Designer 2010. Los formularios de inicio se presentan a los usuarios cuando inician manualmente un flujo de trabajo en un elemento de SharePoint determinado. Con un formulario de inicio, los usuarios pueden especificar nuevos parámetros o información sobre el flujo de trabajo que sea aplicable al elemento de SharePoint dado. Por ejemplo, se podría usar un formulario de inicio para preguntar quién deberá revisar un documento y para qué fecha deberá estar completada la revisión. SharePoint Designer 2010 genera automáticamente un formulario de inicio de InfoPath o ASP.NET de acuerdo con sus especificaciones de inicio. Si no se requieren parámetros de inicio, el formulario únicamente tendrá los botones Iniciar y Cancelar.
  • Un formulario de tarea personalizado permite a los participantes del flujo de trabajo interaccionar con tareas de la lista Tareas especificada para el flujo de trabajo. Con el Asistente para personalización de tareas, puede crear fácilmente campos de formulario personalizados y agregarlos a un formulario de tarea personalizado. Cuando termine de diseñar el flujo de trabajo, SharePoint Designer 2010 generará automáticamente los formularios de InfoPath o ASP.NET para las tareas personalizadas. Después, cuando se ejecute el flujo de trabajo y se creen tareas, el usuario irá a la lista Tareas especificada para el flujo de trabajo, marcará la tarea como completada y escribirá información opcional o requerida específica del flujo de trabajo. Entonces, el flujo de trabajo podrá responder a los cambios como se especifique en el propio flujo de trabajo, o buscar y evaluar la información en pasos posteriores del flujo de trabajo.
  • De forma predeterminada, un flujo de trabajo reutilizable solo proporciona los campos comunes a todos los elementos, como Creado y Modificado por. Esto se debe a que un flujo de trabajo reutilizable no se asocia de forma predeterminada a una lista, biblioteca o tipo de contenido. Un formulario de asociación permite asociar campos con un flujo de trabajo reutilizable, de forma que los campos estarán disponibles cuando diseñe y ejecute el flujo de trabajo.

Cuando SharePoint Designer 2010 genere automáticamente los formularios, podrá personalizarlos en la página de configuración del flujo de trabajo, en la sección Formularios, si hace clic en el formulario que desee personalizar. Los formularios del flujo de trabajo son páginas de InfoPath o de ASP.NET. Se almacenan en el sitio de SharePoint con los archivos de origen del flujo de trabajo.

Editar formulario

Funcionalidad mejorada con formularios de InfoPath 2010 en SharePoint Server 2010

Si su servidor ejecuta SharePoint Server 2010 (no solo Microsoft SharePoint Foundation 2010), los formularios del flujo de trabajo (los formularios de asociación, inicio y tareas) serán ahora formularios de InfoPath 2010. Cambiar la apariencia y el diseño de los formularios de InfoPath es muy sencillo, y puede agregar reglas de validación a un formulario de InfoPath. Para modificar un formulario de flujo de trabajo en InfoPath 2010, solo tiene que hacer clic en el formulario e InfoPath lo abrirá directamente desde SharePoint Designer 2010. Los formularios de InfoPath se encuentran disponibles para listas, bibliotecas y flujos de trabajo.

¿Dónde se almacenan los flujos de trabajo?

Los flujos de trabajo se almacenan en una biblioteca de documentos en el sitio, denominada Flujos de trabajo. SharePoint Designer 2010 crea automáticamente esta biblioteca de documentos. De forma predeterminada, la biblioteca de documentos Flujos de trabajo se oculta del explorador y no tiene vistas de lista, como AllItems.aspx o EditForm.aspx. Para ver el contenido de la biblioteca Flujos de trabajo, en SharePoint Designer 2010, en el panel Navegación, haga clic en Todos los archivos y, a continuación, haga clic en Flujos de trabajo en el panel principal.

Notas

  • Es posible que no pueda ver flujos de trabajo con la opción Todos los archivos, en función de cómo se haya configurado el servidor.
  • La manera principal de obtener acceso a flujos de trabajo y diseñarlos en SharePoint Designer 2010 es hacer clic en Flujos de trabajo, en el panel Navegación.

Todos los archivos

La biblioteca de documentos Flujos de trabajo contiene una carpeta para cada flujo de trabajo creado con SharePoint Designer 2010. La carpeta contiene los archivos de origen necesarios para el flujo de trabajo, como:

  • El archivo de marcado (.xoml) del flujo de trabajo.
  • El archivo de configuración del flujo de trabajo.
  • Los formularios xsn de InfoPath o aspx de ASP.NET necesarios para los flujos de trabajo, como los formularios de inicio (para flujos de trabajo que se inician manualmente) o los formularios de tareas personalizados.

Para editar un flujo de trabajo existente en SharePoint Designer 2010, en el panel Navegación, haga clic en Flujos de trabajo. En el panel principal, haga clic con el botón secundario en el flujo de trabajo correspondiente y, a continuación, haga clic en Editar flujo de trabajo.

Editar flujos de trabajo

Para copiar y modificar un flujo de trabajo reutilizable en SharePoint Designer 2010, en el panel Navegación, haga clic en Flujos de trabajo. En el panel principal, haga clic con el botón secundario en el flujo de trabajo reutilizable correspondiente y, a continuación, haga clic en Copiar y modificar.

Copiar y modificar un flujo de trabajo

Los dos procedimientos anteriores abren el flujo de trabajo en el editor de flujos de trabajo. Puede hacer clic en la cinta de opciones o en la ruta de navegación para editar el flujo de trabajo, administrar la configuración y definir el proceso de tareas para el flujo de trabajo.

El editor de flujos de trabajo proporciona una acción llamada Registrar en lista de historial. Se recomienda usar esta acción en sus flujos de trabajo para mantener un registro del historial del flujo de trabajo. El historial de los flujos de trabajo es sumamente útil para investigar errores, realizar un seguimiento o estudiar rechazos.

Cuando se crea un flujo de trabajo que usa la acción Registrar en lista de historial, SharePoint Designer 2010 crea automáticamente una lista denominada Historial del flujo de trabajo. De forma predeterminada, la lista se crea en http://<nombredelsitio>/Lists/Workflow%20History. Puede especificar que se cree una lista de historial distinta cuando diseñe un flujo de trabajo de sitio o lista, así como cuando asocie un flujo de trabajo de lista reutilizable. Esta lista tiene columnas para datos como identificador de usuario, fecha, evento y descripción de errores. Al igual que la biblioteca de documentos Flujos de trabajo, la lista de historial se oculta en el explorador, pero se puede ver en SharePoint Designer 2010, en el panel Navegación, al hacer clic en Todos los archivos.

Lista de historial

El editor de flujos de trabajo proporciona seis acciones que interactúan con la lista Tareas, entre las que se incluyen Asignar un elemento de tarea, Recopilar datos de un usuario y Asignar un formulario a un grupo. Los flujos de trabajo usan la lista Tareas de forma predeterminada, pero se pueden configurar para usar una lista Tareas personalizada. Una lista Tareas personalizada se puede usar para separar tareas de flujo de trabajo de otros tipos de tareas o para problemas relacionados con permisos. Puede usar una lista Tareas personalizada para todos los flujos de trabajo del sitio o una lista Tareas personalizada para cada flujo de trabajo. Depende de los requisitos técnicos y organizativos para los flujos de trabajo.

Cuando se crea un flujo de trabajo que usa cualquiera de las tres acciones anteriores, SharePoint Designer 2010 crea automáticamente el formulario, el tipo de contenido para la tarea y la lista Tareas, si es necesario. De forma predeterminada, la lista Tareas se puede ver en el explorador, al contrario que la biblioteca de documentos Flujos de trabajo y la lista Historial del flujo de trabajo.

Tareas de flujo de trabajo

¿Dónde se puede consultar el estado de un flujo de trabajo?

En el explorador, se puede consultar fácilmente el progreso de los flujos de trabajo para un elemento seleccionado. La vista Todos los elementos de una lista o una biblioteca de documentos muestra, de forma predeterminada, el estado actual de los flujos de trabajo que se ejecutan en un elemento. En el siguiente ejemplo, el flujo de trabajo Solicitud de cambio de diseño se encuentra En curso para Widget 1 DCR.

Estado del flujo de trabajo

Notas

  • Habrá varias columnas si se asocian diversos flujos de trabajo con la lista o biblioteca.
  • Las columnas se pueden quitar de la vista Todos los elementos sin afectar a la funcionalidad del flujo de trabajo.
  • La columna de estado no se agregará a la vista si en esta hay ya seis o más columnas de estado o búsqueda.

Al hacer clic en el estado del flujo de trabajo para un elemento, como En curso o Completado, se le dirigirá a la página Estado del flujo de trabajo del flujo de trabajo del elemento determinado. Para ver el estado de flujos de trabajo de sitio, haga clic en el menú Acciones del sitio, haga clic en Ver todo el contenido del sitio y, a continuación, haga clic en Flujos de trabajo del sitio. La página de estado del flujo de trabajo proporciona información acerca de:

  • Quién y cuándo se inició el flujo de trabajo para el elemento
  • Tareas asociadas con el flujo de trabajo para el elemento
  • Historial del flujo de trabajo para el elemento, que incluye cuándo se inició el flujo de trabajo y cuándo se completó
Visualización del flujo de trabajo

También verá una visualización de. flujo de trabajo para el estado del flujo de trabajo si:

  • La opción Mostrar la visualización del flujo de trabajo en la página de estado estaba seleccionada en SharePoint Designer 2010 cuando se publicó el flujo de trabajo
  • El equipo desde el que se publicó el flujo de trabajo tenía Visio Premium 2010 instalado
  • El flujo de trabajo se ejecuta en SharePoint Server 2010
  • El Servicio de gráficos de Visio se ejecuta en el servidor

Nota    No es necesario que Visio se encuentre instalado en el equipo local para ver la visualización del flujo de trabajo.

Visualización de flujos de trabajo

Con la visualización del flujo de trabajo, se crea automáticamente un diagrama de Visio del flujo de trabajo y se muestra en un elemento web de Visio en la página Estado del flujo de trabajo. La visualización del flujo de trabajo muestra una vista activa de dónde se encuentra un flujo de trabajo específico.

Para ver la página Flujos de trabajo para un elemento, también puede hacer clic en el elemento en la lista y, a continuación, en Flujos de trabajo en el menú.

Nota   El comando Flujos de trabajo solo está disponible cuando el elemento está en una lista o una biblioteca que tiene al menos un flujo de trabajo asociado.

Cuando un usuario inicia un flujo de trabajo en un elemento, Microsoft SharePoint Foundation 2010 o SharePoint Server 2010 agrega una nueva columna a la lista o biblioteca en la que se encuentra el elemento. De forma predeterminada, el nombre de la columna coincide con el nombre del flujo de trabajo. Esta columna de solo lectura muestra el estado actual del elemento en el flujo de trabajo. Esta columna de estado se agrega automáticamente para cada flujo de trabajo la primera vez que se ejecuta.

En cada columna, el estado del flujo de trabajo es un vínculo. Por ejemplo, si hace clic en la opción En curso, verá la página Estado del flujo de trabajo correspondiente a esa instancia del flujo de trabajo.

Pasos siguientes sugeridos

Los flujos de trabajo son una herramienta muy eficaz para agregar lógica de aplicación a los sitios y las aplicaciones de SharePoint. Ahora que comprende los conceptos básicos de los flujos de trabajo, tal vez desee comenzar creando un flujo de trabajo. Puede encontrar más información acerca del diseño y la personalización de los flujos de trabajo en la sección Vea también.

Click on pen to Use a Highlighter on this page

Skype Online Status 

Contáctanos por Skype Call me! - Rolando Escobar: Offline
» Get Skype, call free! Servicios en Línea
 
 
Servicios Interdata Ltda. Colaboración e Inteligencia de Negocios, SQL Server 2008, Analysis Services, SharePoint, Excel Services, Reporting Services
Warning: require_once() [function.require-once]: URL file-access is disabled in the server configuration in /home/interda1/public_html/wp-content/plugins/instant-web-highlighter/roohit.php on line 106

Warning: require_once(http://roohit.com/site/4wp/wp_2rooh.php?ap=AUTO_PUB_PLUGIN&ihl=Y) [function.require-once]: failed to open stream: no suitable wrapper could be found in /home/interda1/public_html/wp-content/plugins/instant-web-highlighter/roohit.php on line 106

Fatal error: require_once() [function.require]: Failed opening required 'http://roohit.com/site/4wp/wp_2rooh.php?ap=AUTO_PUB_PLUGIN&ihl=Y' (include_path='.:/usr/local/php52/pear') in /home/interda1/public_html/wp-content/plugins/instant-web-highlighter/roohit.php on line 106