2 votes

Erreur de flux de travail Visual Studio 2010 / SharePoint 2010

J'ai créé un flux de travail simple dans VS 2010. Ce qu'il fait est de créer une tâche pour une personne, lorsque la personne change le statut de la tâche en "Complet", il enregistre un message dans l'historique du workflow.

Quand je change l'état en complet, ça dit : "Une erreur s'est produite dans xxxx (le nom du flux de travail)".

Code :

using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Collections;
using System.Drawing;
using System.Linq;
using System.Workflow.ComponentModel.Compiler;
using System.Workflow.ComponentModel.Serialization;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Design;
using System.Workflow.Runtime;
using System.Workflow.Activities;
using System.Workflow.Activities.Rules;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Workflow;
using Microsoft.SharePoint.WorkflowActions;

namespace WorkflowProject2.Workflow1
 {
 public sealed partial class Workflow1 : SequentialWorkflowActivity
 {
     public Workflow1()
     {
         InitializeComponent();
     }

    public Guid workflowId = default(System.Guid);
     public SPWorkflowActivationProperties workflowProperties = new SPWorkflowActivationProperties();

    private void onWorkflowActived(object sender, ExternalDataEventArgs e)
     {

    }

    public Guid taskID = default(System.Guid);
     public SPWorkflowTaskProperties taskProperties = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties();
     private bool taskHasCompleted = false;

    public SPWorkflowTaskProperties taskAfterProperties = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties();
     public SPWorkflowTaskProperties taskBeforeProperties = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties();
     public String taskOutcome = default(System.String);
     public Guid TaskStatusFieldID = new Guid("c15b34c3-ce7d-490a-b133-3f4de8801b76");  

    private void createTask1_MethodInvoking(object sender, EventArgs e)
     {

        taskID = Guid.NewGuid();
         taskProperties.AssignedTo = "spdev\\lzhang";
         taskProperties.Description = "Please review";
         taskProperties.Title = "Leave application";

    }

     private void completeTask1_MethodInvoking(object sender, EventArgs e)
     {
         // Finalize the task:
         taskAfterProperties.PercentComplete = 100;
         taskOutcome = "Completed";
     }

    private void notComplete(object sender, ConditionalEventArgs e)
     {
         e.Result = !taskHasCompleted;    // **(A)**
     }
     private void onTaskChanged1_Invoked(object sender, ExternalDataEventArgs e)
     { 
        string taskStatus = taskAfterProperties.ExtendedProperties[TaskStatusFieldID].ToString();

        if (taskStatus == "Completed")
         {
             taskHasCompleted = true;     // **(B)**

        }

    }

}
 }

J'ai le sentiment qu'il doit y avoir un problème avec (A) ou (B) mais je ne sais pas comment le résoudre. Je n'ai pas trouvé d'erreur dans le fichier journal du dossier 14/LOGS...

J'apprécie toute aide ! Merci !

1voto

user1211929 Points 1170

J'ai eu pas mal de problèmes avec Visual Studio et les Workflows, la plupart d'entre eux sont dus au fait de ne pas assigner les bons identifiants de tâche ou d'oublier de créer des propriétés après la modification de la tâche ou un jeton de corrélation ou d'autres petites choses.

Le problème que vous rencontrez semble donc relever de cette catégorie plutôt que d'un problème avec le code sous-jacent.

Essayez avec ce guide et assurez-vous que chaque étape est effectuée : http://dotnetadil.wordpress.com/2012/05/29/sharepoint-foundation-2010-visual-studio-approval-workflow/

Ou mieux encore, le guide Microsoft étape par étape :

http://msdn.microsoft.com/en-us/library/hh824675.aspx

Une autre chose que j'essaierais de faire est de créer votre flux de travail et de vous assurer que la condition de sortie est définie comme vraie, afin que vous puissiez vérifier si la structure est faite correctement.

1voto

Lin Zhang Points 31

J'ai trouvé le problème ! C'est parce que dans "Workflow1.cs[design]" (la vue de conception) je n'ai pas spécifié le TaskID pour "completeTask1" dans la "boîte de propriétés". Par défaut, c'est "00000000-0000-0000-000000000000", j'aurais dû le changer en "taskID".

1voto

user1211929 Points 1170

Oui, vous devez le remplir avec un GUID, dans Visual Studio sélectionnez Tools, Create Guid et dans la nouvelle fenêtre choisissez registry format, sélectionnez copy and paste où se trouvent tous les 0.

Vous pouvez également sélectionner le bouton [ ] et dans la nouvelle boîte, sélectionnez lier à un nouveau membre et créer un champ. Il pourrait être appelé quelque chose comme createTask1_TaskId1, enfin dans le code derrière dans le createTask1method _invoking assurez-vous que vous assignez un nouveau Guid juste comme ceci :

 createTask1_TaskId1 = Guid.NewGuid();

La deuxième option permet de s'assurer que plusieurs tâches créées par le même flux de travail ne se figent pas.

0voto

Rare Solutions Points 84

Pour obtenir l'identifiant de la tâche en cours dans le flux de travail, je vous recommande de lire l'article suivant http://blog.technovert.com/2013/12/solved-taskid-without-using-ontaskcreated/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X