Disparando um fluxo de trabalho do SharePoint, atualizando um item da lista através Lista Webservice

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

Pergunta

Estou desenvolvendo, um simples SharePoint seqüencial de fluxo de trabalho que deve ser ligado a uma biblioteca de documentos. Ao associar o pequeno fluxo de trabalho para uma biblioteca de documentos, eu verifiquei estas opções

  • Permitir que este fluxo de trabalho para ser manualmente começou por um usuário autenticado com editar itens de permissões.
  • Iniciar este fluxo de trabalho quando um novo item é criado.
  • Iniciar este fluxo de trabalho quando um item é alterado.

Agora eu enviar um documento a esta biblioteca eo fluxo de trabalho começa e, por exemplo, envia um mail. Ele completa e está tudo bem.

Quando eu selecione Editar Propriedades no novo item e salvar uma alteração, o fluxo de trabalho é acionado novamente. Absolutamente o que esperávamos.

Mesmo quando copiando um novo item na biblioteca, com a ajuda do Copy.asmx Webservice, o fluxo de trabalho é iniciado normalmente.

Mas agora Quero atualizar o item via WebService Lists.asmx SharePoint .

CAML vai aqui:

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

O item está sendo atualizado (timestamp mudou e uma propriedade manequim, também), mas o fluxo de trabalho não é iniciado novamente.

Este comportamento é reproduzível em nosso desenvolvimento e sistema de teste.

Verificar os logs de erros (C: Files \ Arquivos de Programas \ Common \ Microsoft Shared \ Web Server Extensions \ 12 \ LOGS) eu descobri uma mensagem de erro estranho:

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.

Qualquer pessoa que pode confirmar esse comportamento? Ou quaisquer sugestões de solução?


Eu estou mantendo-o informado de quaisquer desenvolvimentos sobre este tema.

Foi útil?

Solução

Finalmente, chegamos através dos processos de serviços de suporte da Microsoft e tem uma solução!

Em primeiro lugar, a Microsoft afirmou que este é um bug. É um erro menor, porque não é uma boa solução, por isso pode levar algum tempo mais longo, até que este bug será corrigido (o técnico de suporte disse algo com o próximo service pack oder próxima versão (!)).

Mas agora para o problema.

O reaseon

Vamos dar uma olhada no código CAML da minha pergunta:

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

Por qualquer razão que o Workflow Manager não funciona com a ID, entramos na segunda linha. Estranho, todos os outros comandos do SharePoint estão trabalhando com o ID, mas não o Workflow Manager. O Workflow Manager funciona com o nome do documento "totalmente qualificado". Então, porque não tínhamos pista e não inseriu qualquer nome do documento completo, os padrões Workflow Manager para o nome da biblioteca de documentos atual. E agora a mensagem de erro começa a fazer sentido:

The object specified does not belong to a list.

É claro, o objeto (biblioteca de documentos) não pertence a uma lista, é a lista.

A solução

Temos de acrescentar mais uma linha para a nossa consulta CAML:

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

O fileref passa o nome do documento totalmente qualificado para o Workflow Manager, que - agora totalmente feliz -. Inicia o fluxo de trabalho do item

Tenha cuidado, você tem que incluir o caminho do servidor absoluto completo, omitindo o nome do servidor (encontrado por exemplo, na propriedade ServerRelativePath do seu SPItem).

completa trabalhando 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>

O futuro

Talvez este comportamento não documentada será corrigido em um dos service packs futuros, talvez não. Suporte da Microsoft pediu desculpas e vai lançar um MSDN artigo sobre este tema. Para o próximo mês, eu espero que este artigo sobre stackoverflow vai ajudar os desenvolvedores na mesma situação.

Obrigado por ler!

Outras dicas

Nós enfrentamos um problema semelhante com uma aprovação de fluxo de trabalho. Para resolvê-lo, nós escrevemos o nosso próprio receptor de eventos e anexado à lista. Dependendo se o item foi atualizado ou editado, que, em seguida, disparou a aprovação do fluxo de trabalho.

Espero que isso ajude ...

Eu encontrei esta questão tão bem e descobriu que uma vez que um fluxo de trabalho foi iniciado, ele não pode ser iniciado automaticamente-re, não importa como você atualizar o item. Você pode, no entanto, iniciar manualmente o fluxo de trabalho novamente, como muitas vezes como você gosta.

Eu vi o mesmo comportamento. Mas então você get mensagens como esta , mostrando às pessoas como criar um por dia para configurar lembretes de e-mail.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top