2008-09-25 19 views
16

Estoy desarrollando, un Flujo de trabajo secuencial simple de SharePoint que debe vincularse a una biblioteca de documentos. Al asociar el pequeño flujo de trabajo a una biblioteca de documentos, he comprobado estas opcionesActivación de un flujo de trabajo de SharePoint al actualizar un elemento de la lista a través del servicio web de lista

  • Permitir que este flujo de trabajo sea manualmente iniciado por un usuario autenticado con permisos Editar elementos.
  • Comience este flujo de trabajo cuando se crea un nuevo artículo .
  • Comience este flujo de trabajo cuando cambie un elemento.

Ahora cargo un documento en esta biblioteca y se inicia el flujo de trabajo y, por ejemplo, envía un correo. Se completa y todo está bien.

Cuando selecciono Editar propiedades en el nuevo elemento y guardo un cambio, el flujo de trabajo se activa nuevamente. Absolutamente lo que esperábamos

Incluso al copiar un nuevo elemento en la biblioteca con la ayuda del servicio web Copy.asmx, el flujo de trabajo comienza normalmente.

Pero ahora Quiero actualizar el elemento a través del servicio Web de SharePoint Lists.asmx.

Mi CAML va aquí:

<Method ID='1' Cmd='Update'> 
    <Field Name='ID'>1</Field> 
    <Field Name='myDummyPropertyField'>NewValue</Field> 
</Method> 

El artículo está siendo actualizado (fecha haya cambiado y una propiedad ficticia, también), pero el flujo de trabajo no vuelve a comenzar.

Este comportamiento se puede reproducir en nuestro sistema de prueba de desarrollo y.

Comprobación de los registros de errores (C: extensiones \ Archivos de programa \ Archivos comunes \ Microsoft Shared \ web server \ 12 \ logs) descubrí un mensaje de error extraño:

09/25/2008 16:51:40.17 w3wp.exe (0x1D94)       0x1D60 Windows SharePoint Services  General       6875 Critical Error loading and running event receiver Microsoft.SharePoint.Workflow.SPWorkflowAutostartEventReceiver in Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c. Additional information is below. : The object specified does not belong to a list. 

Cualquiera que pueda confirmar este comportamiento? O cualquier sugerencia de solución?


Lo mantengo informado de cualquier novedad sobre este tema.

+0

Hemos visto este comportamiento con el servicio web Lists.asmx y los flujos de trabajo la semana pasada con un escenario muy similar. En este punto, estamos trabajando en esto con llamadas al servicio web adicionales que duplican la funcionalidad del flujo de trabajo. ¡Me encantaría saber sobre cualquier desarrollo que encuentres! – barryd

+0

@barryd: ¿Crees que tu workaround lo hará en producción? ¿Y encontró una forma de activar flujos de trabajo externamente? Abrí un caso en los servicios de soporte al cliente de Microsoft. Espero que ellos nos ayuden con este problema. Por supuesto, ¡publicaré cualquier noticia aquí! –

Respuesta

11

Finalmente, pasamos por los procesos de servicios de soporte en Microsoft y obtuvimos una solución.

En primer lugar, Microsoft indicó que esto era un error. Es un error menor, porque hay una buena solución, por lo que puede tomar más tiempo, hasta que este error se solucione (el técnico de soporte dijo algo con el próximo Service Pack o la próxima versión (!)).

Pero ahora el problema.

El reaseon

Vamos a echar un vistazo al código CAML de mi pregunta: ¿

<Method ID='1' Cmd='Update'> 
    <Field Name='ID'>1</Field> 
    <Field Name='myDummyPropertyField'>NewValue</Field> 
</Method> 

Por alguna razón el Workflow Manager no funciona con el ID, entramos en la segunda línea . Extraño, todos los otros comandos de SharePoint están trabajando con el ID, pero no con el Administrador de flujo de trabajo. Workflow Manager funciona con el nombre del documento "totalmente calificado". Entonces, como no teníamos ni idea ni ingresamos ningún nombre de documento totalmente calificado, el Administrador de flujo de trabajo adopta de forma predeterminada el nombre de la biblioteca de documentos actual. Y ahora el mensaje de error comienza a tener sentido:

The object specified does not belong to a list. 

Por supuesto, el objeto (biblioteca de documentos) no pertenece a una lista, es la lista.

La solución

Hay que añadir una línea más a nuestro CAML Consulta:

<Field Name='FileRef'>/sites/mySite/myDocLib/myFolder/myDocument.txt</Field> 

El fileRef pasa el nombre del documento completo al Administrador de flujo de trabajo, que - ahora totalmente feliz - inicia el flujo de trabajo del artículo.

Tenga cuidado, tiene que incluir la ruta completa del servidor absoluto, omitiendo su nombre de servidor (que se encuentra por ejemplo en la propiedad ServerRelativePath de su SPItem).

completa de trabajo CAML Consulta:

<Method ID='1' Cmd='Update'> 
    <Field Name='ID'>1</Field> 
    <Field Name='FileRef'>/sites/mySite/myDocLib/myFolder/myDocument.txt</Field> 
    <Field Name='myDummyPropertyField'>NewValue</Field> 
    </Method> 

El futuro

Tal vez este comportamiento no documentado se fijará en uno de los próximos paquetes de servicio, tal vez no. El soporte técnico de Microsoft se disculpó y lanzará un artículo de MSDN sobre este tema. Para el próximo mes espero que este artículo sobre stackoverflow ayude a los desarrolladores en la misma situación.

¡Gracias por leer!

0

He encontrado este problema también y descubrí que una vez que se ha iniciado un flujo de trabajo, no se puede reiniciar automáticamente, sin importar cómo actualice el elemento. Sin embargo, puede iniciar manualmente el flujo de trabajo nuevamente tantas veces como desee.

3

Nos enfrentamos a un problema similar con un flujo de trabajo de aprobación. Para resolverlo, escribimos nuestro propio Receptor de eventos y lo adjuntamos a la lista. Dependiendo de si el elemento fue actualizado o editado, disparamos el flujo de trabajo de aprobación.

Espero que esto ayude ...

+0

esto suena bien. estamos en contacto con soporte de microsoft y esperamos su recomendación. Pero esto parece un camino por recorrer. –

0

He visto el mismo comportamiento. Pero luego obtienes posts like this, mostrando a las personas cómo crear una por día para configurar los recordatorios por correo electrónico.

Cuestiones relacionadas