Attivazione di un flusso di lavoro di SharePoint aggiornando un elemento dell'elenco tramite il servizio Web elenco

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

Domanda

Sto sviluppando un semplice flusso di lavoro sequenziale di SharePoint che dovrebbe essere associato a una raccolta documenti. Quando ho associato il piccolo flusso di lavoro a una raccolta documenti, ho controllato queste opzioni

  • Consenti a questo flusso di lavoro di essere manualmente avviato da un utente autenticato con autorizzazioni Modifica elementi.
  • Avvia questo flusso di lavoro quando è un nuovo elemento creato.
  • Inizia questo flusso di lavoro quando un elemento è cambiato.

Ora carico un documento in questa libreria e il flusso di lavoro inizia e, ad esempio, invia una mail. Si completa e tutto va bene.

Quando seleziono Modifica proprietà sul nuovo elemento e salvo una modifica, il flusso di lavoro viene nuovamente attivato. Assolutamente quello che ci aspettavamo.

Anche quando si copia un nuovo elemento nella libreria con l'aiuto del servizio Web Copy.asmx, il flusso di lavoro inizia normalmente.

Ma ora voglio aggiornare l'elemento tramite SharePoint WebService Lists.asmx .

Il mio CAML va qui:

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

L'elemento è in fase di aggiornamento (data e ora modificata e anche una proprietà fittizia) ma il flusso di lavoro NON si riavvia.

Questo comportamento è riproducibile sul nostro sistema di sviluppo e test

Verifica dei log degli errori (C: \ Programmi \ File comuni \ Microsoft Shared \ Web server extensions \ 12 \ LOGS) Ho scoperto uno strano messaggio di errore:

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.

Qualcuno che può confermare questo comportamento? O qualche suggerimento sulla soluzione?


Ti tengo informato su eventuali sviluppi su questo argomento.

È stato utile?

Soluzione

Infine, abbiamo superato i processi dei servizi di supporto di Microsoft e abbiamo ottenuto una soluzione!

Innanzitutto, Microsoft ha dichiarato che si trattava di un bug. È un bug minore, perché esiste una buona soluzione, quindi potrebbe richiedere più tempo, fino a quando questo bug non verrà risolto (il tecnico del supporto ha detto qualcosa con il prossimo service pack nella prossima versione (!)).

Ma ora per il problema.

The reaseon

Diamo un'occhiata al codice CAML dalla mia domanda:

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

Per qualsiasi motivo il Workflow Manager non funziona con l'ID, abbiamo inserito nella seconda riga. Strano, tutti gli altri comandi di SharePoint funzionano con l'ID, ma non con Workflow Manager. Il gestore del flusso di lavoro lavora con il "pienamente qualificato" nome del documento. Pertanto, poiché non avevamo la minima idea e non avevamo inserito alcun nome di documento completo, Gestione flusso di lavoro passa automaticamente al nome dell'attuale raccolta documenti. E ora il messaggio di errore inizia a dare un senso:

The object specified does not belong to a list.

Naturalmente, l'oggetto (libreria di documenti) non appartiene a un elenco, È l'elenco.

La soluzione

Dobbiamo aggiungere un'altra riga alla nostra query CAML:

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

FileRef passa il nome del documento completo al gestore del flusso di lavoro, che - ora totalmente soddisfatto - avvia il flusso di lavoro dell'elemento.

Fai attenzione, devi includere il percorso completo del server assoluto, omettendo il nome del tuo server (trovato ad esempio nella proprietà ServerRelativePath del tuo SPItem).

Query CAML completamente funzionante:

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

Il futuro

Forse questo comportamento non documentato verrà risolto in uno dei prossimi service pack, forse no. Il supporto Microsoft si è scusato e pubblicherà un articolo MSDN su questo argomento. Per il prossimo mese spero che questo articolo su StackOverflow aiuterà gli sviluppatori nella stessa situazione.

Grazie per aver letto!

Altri suggerimenti

Abbiamo riscontrato un problema simile con un flusso di lavoro di approvazione. Per risolverlo, abbiamo scritto il nostro ricevitore di eventi e l'abbiamo allegato all'elenco. A seconda che l'elemento sia stato aggiornato o modificato, abbiamo quindi attivato il flusso di lavoro di approvazione.

Spero che questo aiuti ...

Ho riscontrato anche questo problema e ho scoperto che una volta avviato un flusso di lavoro, non è possibile riavviarlo automaticamente, indipendentemente da come si aggiorna l'elemento. Tuttavia, puoi riavviare manualmente il flusso di lavoro, tutte le volte che vuoi.

Ho visto lo stesso comportamento. Ma poi ottieni post come questo , che mostrano alle persone come crearne uno al giorno per impostare promemoria via email.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top