Domanda

Sto usando SharePoint Foundation (Sharepoint 2010) per sviluppare un flusso di lavoro in Visual Studio con ASP.NET Workflow Initiation Form.

Io uso questo modulo per impostare alcune proprietà sul punto oggetto elenco di condivisione su cui viene avviato l'istanza del flusso di lavoro. A volte ricevo un messaggio di errore nella finestra brwoser, qualcosa come:

Error 

Failed%20to%20Start%20Workflow 

Troubleshoot issues with Microsoft SharePoint Foundation. 

Correlation ID: 0b8e0b67-f824-4aa5-8316-424ada134f8d 

Date and Time: 6/25/2010 10:59:17 AM 

Go back to site

Questo comportamento sembra intermittente. Cosa sta succedendo?

È stato utile?

Soluzione

Il problema è che il flusso di lavoro SharePoint iniziazione modulo memorizza nella cache l'elenco flusso di lavoro Articolo su PageLoad, e quando si apportano modifiche alla voce tra il caricamento della pagina e chiamando HandleStartWorkflow (vale a dire, facendo clic sul pulsante Start di flusso di lavoro), SharePoint spaventa che la elemento che si sta parlando è diverso (l'elemento memorizzato nella cache) per la voce che esiste in Share Point (che incorpora le modifiche appena effettuate).

I passi generali per riprodurre il problema sono i seguenti:

  1. Avvia il flusso di lavoro in modo che la forma iniziazione spettacoli.
  2. modificare alcune proprietà sul WorkflowProperties.Item
  3. Chiamata WorkflowProperties.Item.Update per salvare le modifiche a SharePoint
  4. Chiamata HandleStartWorkflow.

Si otterrà l'errore.

L'errore può sembrare intermittente se qualche volta la modifica le proprietà dell'elemento del flusso di lavoro è realizzato in una pagina di carico 'sessione' separato per la sessione che il pulsante di avvio del flusso di lavoro viene cliccato. Ad esempio, se si postback alcuni dati del modulo e quindi fare clic su l'inizio del flusso di lavoro tasto, poi tutto funziona, perché il postback è successo e poi la pagina è stata caricata.

Ma se si utilizza un evento ASP TextBox OnTextChanged, modificare il testo e fare clic sul pulsante Start Workflow, l'evento OnChanged viene licenziato dopo la pagina viene caricata con i vecchi dati, i dati viene modificato per i nuovi dati e il flusso di lavoro è iniziata prima che i dati oggetto è ri-caricata da SharePoint.


La soluzione è semplice: ricaricare i dati voce del flusso di lavoro appena prima di iniziare il flusso di lavoro. Questo farà sì che il vostro articolo del flusso di lavoro nella cache e la versione di SharePoint della voce per essere lo stesso, e punto di condivisione sarà felice.

Nella regione di "Flusso di lavoro Codice Initiation", modificare:

Private Sub StartListWorkflow()

    Dim association As SPWorkflowAssociation = workflowList.WorkflowAssociations.Item(New Guid(associationGuid))
    Web.Site.WorkflowManager.StartWorkflow(workflowListItem, association, GetInitiationData)
    SPUtility.Redirect(workflowList.DefaultViewUrl, SPRedirectFlags.UseSource, System.Web.HttpContext.Current)
End Sub

a

Private Sub StartListWorkflow()

    'Re-initialize the workflow parameters, particularly the workflowListItem, in case it has been changed since page load.'
     InitializeParams()

    Dim association As SPWorkflowAssociation = workflowList.WorkflowAssociations.Item(New Guid(associationGuid))
    Web.Site.WorkflowManager.StartWorkflow(workflowListItem, association, GetInitiationData)
    SPUtility.Redirect(workflowList.DefaultViewUrl, SPRedirectFlags.UseSource, System.Web.HttpContext.Current)
End Sub

E tutto dovrebbe iniziare a lavorare di nuovo.

Altri suggerimenti

Lo stesso messaggio si otterrà se si tenta di avviare il flusso di lavoro (tramite il modulo di init personalizzato), che è già in esecuzione sulla voce. Soluzione qui sarebbe quello di controllare lo stato del flusso di lavoro sulla voce.

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