Activar un flujo de trabajo de SharePoint actualizando un elemento de lista a través del servicio web de lista

StackOverflow https://stackoverflow.com/questions/133953

Pregunta

Estoy desarrollando, un simple flujo de trabajo secuencial de SharePoint que debe estar vinculado a una biblioteca de documentos. Al asociar el pequeño flujo de trabajo a una biblioteca de documentos, verifiqué estas opciones

  • Permitir que este flujo de trabajo sea manual iniciado por un usuario autenticado con editar elementos de permisos.
  • iniciar este flujo de trabajo cuando un nuevo elemento es creado.
  • Inicie este flujo de trabajo cuando se cambia un elemento.

Ahora subo un documento a esta biblioteca y comienza 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 de SharePoint WebService Lists.asmx .

Mi CAML va aquí:

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

El elemento se está actualizando (la marca de tiempo se cambió y también una propiedad ficticia) pero el flujo de trabajo NO se inicia de nuevo.

Este comportamiento es reproducible en nuestro desarrollo y sistema de prueba.

Comprobando los registros de error (C: \ Archivos de programa \ Archivos comunes \ Microsoft Shared \ web server extensiones \ 12 \ LOGS) Descubrí un extraño mensaje de error:

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.

¿Alguien que pueda confirmar este comportamiento? ¿O algún consejo de solución?


Los mantengo informados sobre cualquier novedad sobre este tema.

¿Fue útil?

Solución

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

Primero, Microsoft declaró que esto era un error. Es un error menor, porque hay una buena solución, por lo que puede llevar más tiempo hasta que se solucione este error (el técnico de soporte dijo algo con el próximo paquete de servicio o la próxima versión (!)).

Pero ahora para el problema.

La razón

Echemos 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 Administrador de flujo de trabajo no funciona con la ID, ingresamos en la segunda línea. Extraño, todos los demás comandos de SharePoint funcionan con la ID, pero no con el Administrador de flujo de trabajo. El Workflow Manager trabaja con los "totalmente calificados" nombre del documento. Entonces, debido a que no teníamos ni idea y no ingresamos ningún nombre de documento completo, el Administrador de flujo de trabajo utiliza el nombre predeterminado 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

Tenemos que agregar una línea más a nuestra consulta CAML:

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

FileRef pasa el nombre completo del documento al Administrador de flujo de trabajo, que, ahora totalmente feliz, inicia el flujo de trabajo del elemento.

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

Consulta CAML de trabajo completo:

 <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

Quizás este comportamiento indocumentado se arregle en uno de los próximos service packs, quizás no. El soporte de Microsoft se disculpó y publicará 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!

Otros consejos

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 se actualizó o se editó, luego disparamos el Flujo de trabajo de aprobación.

Espero que esto ayude ...

También encontré este problema y descubrí que una vez que se inicia un flujo de trabajo, no se puede reiniciar automáticamente, sin importar cómo se actualice el elemento. Sin embargo, puede volver a iniciar el flujo de trabajo manualmente tantas veces como desee.

He visto el mismo comportamiento. Pero luego obtienes publicaciones como esta , que muestran a las personas cómo crear una por día para configurar recordatorios por correo electrónico.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top