WorkFlow de aprobación para Sharepoint 2007 paso a paso
Hace días que estoy viendo cómo armar este artículo y mostrar cómo hacer un WorkFlow para Sharepoint 2007 utilizando Visual Studio 2005, las extensiones de WorkFlow Foundation y las extensiones para Windows Sharepoint Services, pensé mostrar un WorkFlow de aprobación para varios usuarios, donde la tarea de aprobación fuese asignada a mas de un aprobador, pero analizando me di cuenta que eso podía ser el final de todo esto y entonces decidí crear una serie de artículos que mostraran como hacer un WorkFlow paso a paso y luego ir añadiendo funcionalidades.
Para poder realizar este WorkFlow vamos a necesitar tener un ambiente de desarrollo montado de la siguiente forma, en mi caso tengo una maquina virtual con todo instalado y es la que utilizo para desarrollar soluciones para Sharepoint 2007.
1) Windows 2003 cualquier versión con SP1 instalado.
2) SQL Server 2005 con SP1 instalado. También podemos utilizar SQL Express 2005
3) Framework 3.0. Necesitamos las extensiones de WorkFlow Foundation.
4) Sharepoint 2007.
5) Visual Studio 2005 cualquier versión.
6) Extensiones de Windows Sharepoint Services
7) Infopath 2007 para realizar los formularios.
Bien una vez tenemos el ambiente montado y configurado, lo que demos hacer es ponernos a construir el WorkFlow. Para lo cual abrimos el Visual Studio 2005 y creamos un nuevo proyecto basándonos en la plantilla instalada. El WorkFlow que vamos a crear en este caso es uno secuencial, en un próximo artículo vamos a crear un WorkFlow de estado. En la imagen 1 vemos la pantalla de creación de proyectos de Visual Studio donde seleccionamos el templete y le ponemos un nombre.
Una vez que tenemos creado el proyecto el Visual Studio se tiene que ver como en la imagen 2, el proyecto creado, nuestro WorkFlow creado y al abrir el mismo nos encontramos con una única actividad que nos crea el template de proyecto, la actividad “OnWorkflowActivated” la cual es invocada cuando se inicia el WorkFlow y la podemos utilizar para inicializar propiedades, conectarnos algún repositorio de datos para extraer información.
Lo que debemos hacer ahora es configurar nuestro WorkFlow, lo primero que vamos hacer es crear un “CorrelationToken”, esto es necesario para que la actividad quede vinculada a nuestro WorkFlow y el árbol de mensajes del WorkFlow quede cargado. Para realizar esto seleccionamos la actividad “OnWorkflowActivated” y en el cuadro de propiedades escribimos un nombre para la propiedad “CorrelationToken” y seleccionamos cual es la actividad padre, en este caso seleccionamos el propio WorkFlow debido a que es nuestra primera actividad, en la imagen 3 vemos como nos debería quedar cargada.
Lo próximo que debemos configurar es la propiedad “WorkflowProperties” de la actividad “OnWorkflowActivated”, la cual nos permitirá acceder a datos de donde está corriendo el WorkFlow como ser el Site, Web, List, Item al que está asociado, etc. Para ellos seleccionamos la actividad, y en el cuadro de propiedades vamos a ver la propiedad “WorkflowProperties” y presionamos el botón “…” que aparece para que se nos despliegue una ventana donde vamos a crear el valor para la misma. Esta ventana tiene dos pestañas, en una podemos seleccionar las propiedades que ya estén creadas como lo muestra la imagen 4 y en la otra pestaña podemos crear una nueva propiedad como lo muestra la imagen 5. Nosotros vamos a crear una nueva propiedad, para lo cual introducimos un nombre y presionamos OK. En este caso vamos a crear un atributo de nuestro WorkFlow y no una propiedad.
Una vez creado el atributo el mismo quedara cargado en la actividad y ahora vamos a crear nuestro WorkFlow de aprobación. Para ello vamos a crear 3 actividades que son de las extensiones de Windows Sharepoint Services, estas actividades, nos permitirán crear una nueva tarea de aprobación para el o los usuarios que se designen, esperar que el mismo acceda a la tarea, la aprueba o rechace y por ultimo darla por completada, las actividades que usaremos son las siguientes:
1) CreateTask Activity: Esta actividad creara una tarea para un usuario determinado en la lista de tareas asociada al WorkFlow.
2) OnTaskChange Activity: Esta tarea se quedara esperando que el usuario modifique la misma, o sea la apruebe o la rechace.
3) CompleteTask Activity: Esta tarea completara la misma de forma automática.
Lo que haremos es colocar una actividad adicional en nuestro WorkFlow, esta actividad actuara como contenedora de las tres actividades mencionadas anteriormente y esto se debe a que las 3 tareas deben tener el mimo “CorrelationToken”. Así que vamos a agregar una “SecuentialActivity” para englobar a las otras 3 actividades mencionadas, la imagen 6 nos muestra cómo nos debería quedar nuestro WorkFlow después de agregar todas las actividades descriptas.
La siguiente tabla muestra cómo debemos configurar las propiedades de cada una de las actividades recién agregadas:
CreateTask:
Name: CreateTaskApproval
CorrelationToken: CreateTaskCorrelationToken
OwnerActivityName: ApprovalActivity
TaskID: CreateTaskApproval_TaskId. Para configurar esta propiedad utilizaremos la ventana mostrada en las imagenes 4 y 5. Crearemos un atributo nuevo y lo asignaremos al WorkFlow.
TaskProperties: CreateTaskApproval_TaskProperties. Para configurar esta propiedad también utilizaremos la ventana mostrada en las imágenes 4 y 5. Crearemos un atributo nuevo y lo asignaremos al WorkFlow.
OnTaskChange:
Name: TaskChangedApproval
CorrelationToken: CreateTaskCorrelationToken. Seleccionamos el mismo creado para la actividad “CreateTask” puesto que deben ser iguales. Esto se debe a que es una unidad atómica de trabajo.
AfterProperties: TaskChangedApproval_AfterProperties. Para configurar esta propiedad utilizaremos la ventana mostrada en las imágenes 4 y 5, pero en vez de crear un atributo vamos a crear un property. Esta propiedad nos servirá para recuperar el valor modificado de una columna de la lista..
BeforeProperties: TaskChangedApproval_BeforeProperties. Para configurar esta propiedad utilizaremos la ventana mostrada en las imágenes 4 y 5, pero en vez de crear un atributo vamos a crear un property. Esta propiedad nos servirá para recuperar el valor original de una columna de la lista.
TaskID: CreateTaskApproval_TaskId. Para configurar esta propiedad utilizaremos la ventana mostrada en las imagenes 4 y 5, pero en vez de crear una nueva, lo que haremos es seleccionar el atributo creado en la actividad “CreateTask, dado que estas actividades deben tener el mismo TaskId para que queden asociadas.
CompleteTask:
Name: CompleteTaskApproval
CorrelationToken: CreateTaskCorrelationToken. Seleccionamos el mismo creado para la actividad “CreateTask” puesto que deben tener el mismo. Esto se debe a que es una unidad atómica de trabajo.
TaskID: CreateTaskApproval_TaskId. Para configurar esta propiedad utilizaremos la ventana mostrada en las imagenes 4 y 5, pero en vez de crear una nueva, lo que haremos es seleccionar el atributo creado en la actividad “CreateTask, dado que estas actividades deben tener el mismo TaskId para que queden asociadas.
TaskOutcome: Cargaremos un texto que se mostrara en la ventana del WorkFlow una vez que el mismo termine.
Una vez configuradas todas las propiedades del WorkFlow el mismo nos tiene que quedar como se muestra en la imagen 7 y ahora lo que vamos hacer colocar el código para asociar al usuario.
Para este ejemplo lo que vamos hacer es siempre asignarle el mismo usuario, así que cada vez que se cree una tarea se le asignara un único usuario. Podemos colocar el código necesario para sacar los aprobadores de cualquier repositorio de datos o cargarlos cuando el WorkFlow se instancie. Para este primer artículo vamos a mostrar como cargarlo, en los siguientes vamos a construir un formulario que nos permitirá seleccionar los usuarios aprobadores al iniciarse el WorkFlow. Todas las actividades contienen una serie de eventos que nosotros podemos programar y que los mismos serán disparados cuando las tareas sean invocadas. En este ejemplo solo vamos a codificar el evento “MethodInvoking” de la actividad “CreateTask” y en la imagen 8 vemos como asociar el método que va a manejar dicho evento.
En la sección 1 vemos el código para el método asociado al evento “MethodInvoking” recién creado y en el cual cargamos todas las propiedades de la tarea.
private void CreateTaskApproval_MethodInvoking(object sender, EventArgs e)
{
CreateTaskApproval_TaskId = Guid.NewGuid();
CreateTaskApproval_TaskProperties.TaskType = 0;
CreateTaskApproval_TaskProperties.AssignedTo = "sidom\fabiani";
CreateTaskApproval_TaskProperties.Title = "Tarea de aprobación para Fabian";
CreateTaskApproval_TaskProperties.Description = "Fabian debe aprobar esta tarea";
CreateTaskApproval_TaskProperties.SendEmailNotification = false;
}
Una vez que tenemos creado nuestro WorkFlow lo que tenemos que hacer es crear un
formulario para aprobar o rechazar la tarea. En esta versión lo vamos hacer utilizando
Infopath y el formulario lo único que tendrá será un botón para aprobar y otro para rechazar
la tarea asignada al usuario. En la imagen 9 vemos el formulario creado.
1) En la sección Examinar seleccionamos el idioma de nuestro formulario, en este caso Ingles puesto que el Sharepoint está en Ingles.
2) En la sección Compatibilidad seleccionamos el Checkbox “Diseñe una plantilla de formulario que se pueda abrir en el Explorador” esto nos permitirá abrir este formulario Infopath como una página Web y no necesitaremos tener Infopath instalado en la maquina cliente y en el cuadro de texto “Especifique la dirección URL…” cargamos la dirección URL del servicio Web de FormsServices, tal cual se muestra así (debe sustituir los valores correctos correspondientes a su servidor) http://
Una vez configurado, lo que debemos hacer es publicarlo, para realizar esto accedemos a la opción de publicar del formulario Infopath presionando “Archivo” y después “Publicar”. Se nos abrirá un Wizard para realizar la publicación, en el primer paso vamos a seleccionar la opción “En un servidor de Sharepoint con o sin Infopath Forms Services”, en el segundo paso cargamos la URL de nuestro portal Sharepoint (http://
Ahora debemos configurar los archivos XML de configuración y realizar nuestro deploy del Workflow. Cada vez que creamos un proyecto utilizando el template de WorkFlow se nos agregan una serie de archivos XML y Bat que nos facilitaran la tarea de realizar la instalación de nuestro Workflow. En la imagen 11 vemos la estructura de archivos creada por el template de proyectos una vez creado el mismo y que a continuación detallaremos.
Workflow.xml: Este archivo declara el WorkFlow y asocia los formularios Infopath creados al mismo.
PostBuildActions.bat: Este bat es invocado por Visual Studio y realiza la instalación del Feature en nuestro Sharepoint, lo activa, instala el Assembly en al GAC y realiza un IISRESET para que los cambios sean tenidos en cuenta. Lo único que debemos hacer es editarlo y cambiar la dirección URL “http://localhost” por la dirección URL de nuestro sitio “http://
Unistall.bat: Este archivo desinstala y desactiva el feature de nuestro portal. Lo único que debemos hacer es editarlo y cambiar la dirección URL “http://localhost” por la dirección URL denuestro sitio “http://
Todos los demás valores utilizados por estos dos archivos Bat son pasados en el Visual Studio una vez que se termine la compilación del proyecto. En la imagen 12 vemos la pantalla de propiedades del proyecto en el Visual Studio. Si queremos que el WorkFlow sea instalado una vez terminemos de complicar debemos indicarlos colocando la palabra “DEPLOY” en el cuadro de texto “Post-Build envent command line” y si no queremos que el WorkFlow sea instalado después que terminamos de complicar colocamos la palabra “NODEPLOY” para seguir trabajando en el mismo y no se produzca una instalación cada vez que compilamos.
<Feature Id="A93B9917-3038-4aea-8C5F-01A0F78DA4A6"
Title="Simple Approval WorkFlow"
Description="This feature is a simple approval workflow."
Version="12.0.0.0"
Scope="Site"
ReceiverAssembly="Microsoft.Office.Workflow.Feature, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
ReceiverClass="Microsoft.Office.Workflow.Feature.WorkflowFeatureReceiver" xmlns="http://schemas.microsoft.com/sharepoint/">
<ElementManifests>
<ElementManifest Location="workflow.xml" />
</ElementManifests>
<Properties>
<Property Key="GloballyAvailable" Value="true" />
<!-- Value for RegisterForms key indicates the path to the forms relative to feature file location -->
<!-- if you don't have forms, use *.xsn -->
<Property Key="RegisterForms" Value="*.xsn" />
</Properties>
</Feature>
El archivo feature.xml define la funcionalidad dentro de Sharepoint y asocia el archivo “workflow.xml” que es el que tiene toda la definición del WorkFlow.
Básicamente nosotros debemos colocarle un guid para el ID, un nombre y una descripción, las demás propiedades las podemos dejar como nos la genera el template de proyecto del Visual Studio.
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Workflow
Name="Simple Approval WorkFlow"
Description="This simple approval workflow."
Id="45229254-E7C9-4846-8D49-D28AF6A88315"
CodeBesideClass="Siderys.Blog.SimpleApprovalWorkFlowInfopathForms"
CodeBesideAssembly="Siderys.Blog.Workflow.SimpleApprovalWorkFlowInfopathForms.SimpleApprovalWorkFlow,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=a82cbe50b3eab825"
StatusUrl="_layouts/WrkStat.aspx"
TaskListContentTypeId="0x01080100C9C9515DE4E24001905074F980F93160"
ModificationUrl="_layouts/ModWrkflIP.aspx">
<Categories/>
<!-- Tags to specify InfoPath forms for the workflow; delete tags for forms that you do not have -->
<MetaData>
<Task0_FormURN>urn:schemas-microsoft-com:office:infopath:FormApprovalTaskBlog:-myXSD-2008-01-04T13-20-14</Task0_FormURN>
<StatusPageUrl>_layouts/WrkStat.aspx</StatusPageUrl>
</MetaData>
</Workflow>
</Elements>
En el archivo “workflow.xml” define al WorkFlow que acabamos de crear y en este archivo debemos cargar el
Assembly del WorkFlow (el Assembly debe estar firmado con un Strong Name) para ello usamos la propiedad “CodeBesideAssembly”, en la propiedad “CodeBesideClass” declaramos el espacio de nombre y la clase donde esta codificado y en la propiedad “Task0_FormURN” declaramos el formulario Infopath creado, para obtener el valor para dicha propiedad abrimos el formulario Infopath utilizando Infopath 2007 en las propiedades del mismo copiamos el valor que se encuentra en la caja de texto “Id”. Podemos declarar varios formularios Infopath, tantos como necesitemos, lo único que tenemos que variar de esta propiedad es el nombre, por ejemplo si quisiéramos colocar otro formulario la propiedad debería llamarse “Task1_FormURN” y así sucesivamente. Para asociar el formulario a nuestro WorkFlow lo hacemos utilizando la propiedad “TaskType” que se encuentra en la propiedad “TaskProperties” creada para nuestra actividad “CreateTaskApproval”, en la sección 1 podemos ver la asignación de esta propiedad.
Una vez instalado nuestro WorkFlow lo que debemos hacer es asociarlo a la lista que deseamos tener aprobación de elementos. Para configurar el WorkFlow debemos acceder a la configuración de WorkFlow de la lista y presionar “Agregar WorkFlow”. En la pantalla de configuración seleccionamos nuestro WorkFlow de la lista disponible de WorkFlows, le colocamos un nombre, la lista de tareas donde vamos a estar creando las tareas, la lista histórica de movimientos y como queremos que el WorkFlow se inicialice. En la imagen 13 vemos como debería quedarnos configurado una vez cargado todos los valores y al terminar presionamos el botón Ok que asociara nuestro WorkFlow a la lista.
Fabián Imaz
Siderys Elite Software
Hola saludos, estuve haciendo el procedimiento que indicas en el articulo, pero no me sirvió el formulario infopath. Cuando trato de abrir la tarea que crea el workflow me aparece que el formulario no existe. Tienes alguna idea de que pueda ser esto???
De antemano muchisimas gracias
Hola,
El problema es que tu formulario Infopath no esta bien y cuando lo subiste a Sharepoint (publicaste) quedo mal. En las opciones de formulario encontraras una sección que te permitira ingresar el servidor de Forms Services, ahi debes colocar la dirección del servidor de Sharepoint y el idioma de tu formulario debe ser el mismo que el del servidor.
Cuando cargues el formulario el mismo se validara en el servidor y te mostrara los errores que tu formulario tenga.
También controla que el nombre del formulario que estas colocando no se repita en tu servidor Sharepoint.
Saludos,
Fabián Imaz
Hola….
Esta interesante lo que publicaste y me funcionó… con algunos ajustes claro… pero tengo una duda…. ¿Si yo quisiera enviar un formulario a varias personas al mismo tiempo y creando varias tareas… como podría hacerlo?
Gracias
hola nemesis_2007,
Esto depende, si la cantidad de usuarios a los que le vas a crear la tarea es fijo (ya sabes quienes son) deberías usar la activad paralel, ahora si la cantidad de usuarios es indeterminada (porque los sacas de una lista o tienes una colección) deberías usar la activadad replicator.
Saludos,
Hola Fabian mi nombre es Carlos, estoy comenzando en el mundo de los workflow y me parece muy interesante tu ejemplo, ya que es muy sencillo y practico, te felicito y gracias por el ejemplo.
Pregunta.
Es necesario tener instalado Win Server 2003 y SharePoint 2007 en el equipo de desarrollo de soluciones workflow usando visualstudio 2005. ?
Puedo hacerlo en XP sin tener instalado SharePoint.??
Hola Carlos,
Te combiene tener un ambiente muy parecido al del servidor. No vas a poder desarrollar un WorkFlow para sharepoint sobre XP dado que las referencias te causaron problemas.
Mi recomendación para esto es tener una ambiente (maquina virtual de ser necesario) con w2k3, Sharepoint, visual studio y las extenciones para el workflow. En un articulo anterior mio explico como deberia ser el ambiente, el articulo es crear un Workflow paso a paso.
Saludos,
Hola que tal? la verdad soy novato en el asunto de WWf y Sarepoint Mira estoy resolviendo tu problema pero al crear ka tarea simpleapprovalworkflow, regresa al la lista de tareas, lo cual indica Fail on Start, abro la tarea e indica que el mensaje sera enviado por via e mail,y no aparece el formulario, ya revise que este asociado el formulario con el workflow, tambien en el status del workflow aparece el mensaje de Failed on star (retrying), a que se debe eso, te agradecere por tu ayuda
Hola,
Que configuracion estas usando para correr el Workflow, cual es la arquitectura de los servidores o servidor?
El formulario Infopath, esta correctamente instalado en la administración central, Shared Services, Forms Services?
Si la tarea se crea, como tu me dices, es que el workflow esta correcto, el problema lo tienes cuando cuando quieres acceder al formulario, tiene bien registraro el formulario en el archivo workflow.xml?
Saludos,
Fabián
hola… que buen material publicaste.. oye haber si me peudes ayudar con un problema que tengo.. pos soy algo nuevo en workflow.. sharepoint e infopath ya mas o menos lo manejo.. el caso es este… tengo un formulario que se utilizara para la creacion de usuarios no.. el cual se publica en una libreria de SP.. cuando se publica.. autoamticamente se copia a otra libreria mediante un workflow que hice en designer y pone en curso otro workflow para aprobar el formulario este workflow lo hice con el server.. muy bien espero estar explicandome.. el caso es que el formulario se pone en estado de “En curso”.. ahora viene mi problema. quiero que cuando el formulario pase a Aprobado o Rechazado se mueva a otra libreria.. y se borre de la que este… jejeje algo comfuso no?.. bueno eso es en resumen mi proyectito.. ojala me puedas apoyar en este asunto.. saludos
Hola,
Antes que nada te agradezco tus comentarios. Lo que deberias hacer es crear otro wfs y asociarlo a cada elemento de la lista. El mismo se debería disparar cuando se modifica un elemento de lista, o sea un Item y cada vez que se dispare, lo que deberías hacer es ver si el estado cambio al estado que tu quieres, si no deberías seguir a la espera. Para hacer esto, lo que deberías hacer es colocar un While activity y la condicion del while sería mientras tu tarea no sea el que quieras sigo en el while. Dentro de la activicad del tipo while tendrías que controloar si el estado es que tu buscas para salir del while.
Saludos,
Fabián.
Hola muy buen post, me esta ayudando mucho pero tengo algunos problemillas ya que soy nueva en esto.
En la parte en que lo que tenemos que hacer es configurar el botón “Aprobar”, para lo cual vamos hacer una regla para enviar a nuestro Workflow que la tarea fue aprobada. En la imagen 10 vemos la regla creada para el botón “Aprobar”, pero no me queda muy claro en la imagen como lo haces y no me sale, podrias por favor detallarme este paso, estoy ahi atascada.
Muchas gracias de antemano.
Un saludo
Pitufa,
Mira para poner una regla, tienes que acceder a las propiedades del botón y depues a la sección reglas, donde deberás crear una nueva. En la nueva regla debes agregar una acción que se llevara a cabo cuando la regla se ejecute y ahi debes seleccionar establecer el valor de una campo en tu origen de datos principal (el que se enviara al workflow con el estado aprobado), otra acción que es enviar los datos al servidor usando una conexión y después cerrar la ventana.
También te comento que con Juan Andrés Valenzuela estuvimos dictando un WebCast sobre esto a finales de noviembre que tu pudes ver, acá te dejo el link para que puedas acceder a la grabación.
http://siderys.blogspot.com/2008/11/webcast-form-services-y-flujo-de.html
Saludos,
muchas gracias por la informacion,
Podrias detallarme como hacer la otra accion de enviar los datos al servidor usando otra conexion.
Muchas gracias
Hola, ya estoy de nuevo por aqui con dudas……….
He estado mirando el enlace que me pasaste ayer y me ha surgido una duda respecto a la actividad OnTaskChange del workflow de aprobacion simple ya que mirando el codigo del ejemplo que me recomendaste mirar esta actividad aparaece con codigo y en el workflow de simple aprobacion solamente hemos configurado 2 propiedades las cuales sirven para recuperar el valor mofificado de 1 columna de la lista, pero al no ver programacion para estas propiedades no me queda claro como va a recuperar el valor de esa columna de la lista.
Un saludo y muchas gracias por atenderme, sinceramente estoy un poquito agobiada con esto ya que soy nueva y todavia no lo controlo.
gracias
Pitufa,
La actividad “OnTaskChange” tiene dos propiedades fundamentales
1) AfterProperties
2) BeforeProperties
en estas propiedades podes tener el estado de cada campo antes o despues de la modificacion del item de la tarea. Ahora si queres acceder a las propiedades del Item que tiene asociado el Wf, entonces lo tenes que hacer usando las propiedades del Wf.
OnTaskChange_AfterProperties1.ExtendedProperties[“Task_Status”]
Saludos,
Fabián
Hola Fabian Saludos, mi nombre es nelson de Peru; muy interesante tu blog pero tengo una pregunta.Que pasaria si el formulario en infopath que haces en el ejemplo lo publico como content type y esto lo asocio a una determinado Form Library??? obviamente cuando el usuario cree un nuevo formulario le saldra este formulario, entonces cuando de click en el boton aprobar, como manejaria o seria el codigo en ese caso???? He estado intentado de esta manera pero no me sale.
Saludos y Gracias
Hola Nelson,
Muchas gracias pot tus comentarios. Para poder ayudarte un poco mejor me gustaría entender cual es el problema que estas teniendo, puedes detallarmelo un poco mejor.
Pero el usuario al abrirte el formulario de aprobación desde una biblioteca de formulario y apreta el botón “aprobar” se debería ejecutar la regla asociada al mismo. Ahora bien, tu puedes codificar la acción del dicho botón, pero dependerá para que lo quieres usar y en que contexto, ten en cuenta que en los Flujos el contexto de ejecución cambia un poco.
Saludos
hola que tal, muy interesante tu manual…
tengo una duda
para enviar las notificaciones por e-mail debo tener un servidor de correo en mi servidor o puedo utilizar algun otro como hotmail, gmail, etc…
Alfredo,
Para enviar correos podes uusar cualquier servidor de SMTP si vos envias el correo progrmaticamente, si usas actividades de Sharepoint,tenes que tener configurado el servidor de SMTP en tu servidor de Sharepoint.
Saludos,
Estimado porfavor necesito su ayuda, resulta que he seguida los ejemplos pero cuando me llega el correo de que se me ha asignado la tarea, los link no me llevan al formulario,
muchas gracias por el tutorial
Estimado,
Una pregunta el mail lo mandas vos o lo manda directamente SharePoint?
El link a la tarea debería irte en la notificación, pero vos podes armar el mail como quieras y mandarlo en vez de que lo mande SharePoint. Lo bueno de esto último es que vos podes armar el body que necesitas e incluir todos los datos necesarios, incluso el link.
Despues que creas la tarea, en el cteatetask completed podes disparar el mail ya que tenes todos los datos para eso.
Saludos,
Hola Fabián, tengo un problema, cuando busco el campo statusWorkFlow no lo encuentro. La pregunta es si debo crearlo o me tiene que aparecer por haber realzado el workflow. Que me puede faltar?
Seba,
A que te refieres con el campo estatus wfs, puedes tomar el valor del de si la tarea fue aprobada o cancelada desde el siguiente campo
TaskChange_AfterProperties1.ExtendedProperties["Task_Status"]