begin process at 2010 03 20 12:35:24
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

ASP.Net

 > WF: EXEMPLE DE WORKFLOW SÉQUENTIEL WEB

WF: EXEMPLE DE WORKFLOW SÉQUENTIEL WEB


 Information sur la source

Note :
9 / 10 - par 3 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :ASP.Net Source .NET ( DotNet ) Classé sous :workflow, foundation, web, séquentiel, humain Niveau :Initié Date de création :19/02/2006 Date de mise à jour :19/02/2006 21:30:49 Vu / téléchargé :21 260 / 1 733

Auteur : azra

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
Important : cette source nécessite Windows Workflow Foundation Beta 2 ainsi que le Framework 2.0 pour fonctionner.

Cette source présente un exemple de Workflow Séquentiel humain et répond à plusieurs problématiques auquel j’ai été confronté :
- Utiliser Windows Workflow Foundation dans un projet Web, en insistant sur l’aspect communication application Web -> Workflow à plusieurs étapes du cycle de vie du Workflow (sans hoster le Workflow via des Webservices).
- Faire démarrer un Workflow par un utilisateur, le mettre en pause et le faire réactiver par un autre utilisateur (tout en le faisant persister dans SQLServer, dans le cas ou plusieurs jours se passent entre les deux actions).
- Mettre en place une gestion de timeout

Cette source a servit de base pour un projet contenant un Workflow de validation d’utilisateurs, des modifications étant appliquées au niveau du compte de l’utilisateur et des Emails étant envoyés lors de chaque étape.

Fonctionnement :
Pour faire fonctionner cette source, et surtout la gestion de la persistance dans SQLServer 2005 Express, vous devez
- Ajouter une base de données « Database.mdf » dans le répertoire App_Data du projet ASPNETWorkflowExemple
- Exécuter les scripts « sqlPersistenceService_logic.sql » et « sqlPersistenceService_schema.sql » dans cette base (ils sont présents dans le projet DBScripts, il suffit de faire click droit / run dessus).

Composition :
- ASPNETWorkflowExemple contient l’application Web
- DBScripts les scripts de persistance
- testWorkflow le workflow
- WorkflowComm l’interface de communication

Utilisation :
Ensuite, une fois l’application compilée, deux pages sont à votre disposition :
- Default.aspx pour démarrer des instances de Workflow
- Validation.aspx pour reprendre des instances en cours et les terminer

Attention, il s’agit d’un exemple, le Workflow ne fait rien d’autre que de « logger » les étapes dans lesquelles il passe dans le fichier « C:\WorkflowLOG.txt»
Les sources sont commentées (quelques extraits ci dessous), n'hesitez pas a poser des questions suite à cette source.

Source

  • protected void bt_start_Click(object sender, EventArgs e)
  • {
  • //récuperation du runtime courant
  • WorkflowRuntime workflowRuntime = WorkflowWebRequestContext.Current.WorkflowRuntime;
  • //creation et activation d'une instance de workflow dans le runtime
  • WorkflowInstance workflowInstance = workflowRuntime.CreateWorkflow(typeof(testWorkflow.MyWorkflow));
  • workflowInstance.Start();
  • //affichage de l'instance de ce workflow
  • lb_guidInstance.Text = workflowInstance.InstanceId.ToString();
  • }
  • protected void bt_accepte_Click(object sender, EventArgs e)
  • {
  • //recuperation du service du communication et du service d'echange de données
  • ExternalDataExchangeService dataService = (ExternalDataExchangeService)WorkflowWebRequestContext.Current.WorkflowRuntime.GetService(typeof(ExternalDataExchangeService));
  • WorkflowCommunicationData communicationDataService = (WorkflowCommunicationData)dataService.GetService(typeof(WorkflowCommunicationData));
  • //envoie des données au Workflow (validation)
  • communicationDataService.RedemarreWorkflow(new Guid(tb_resumeWK.Text), true);
  • }
  • protected void bt_refuse_Click(object sender, EventArgs e)
  • {
  • Type t = typeof(ExternalDataExchangeService);
  • ExternalDataExchangeService dataService = (ExternalDataExchangeService)WorkflowWebRequestContext.Current.WorkflowRuntime.GetService(t);
  • WorkflowCommunicationData communicationDataService = (WorkflowCommunicationData)dataService.GetService(typeof(WorkflowCommunicationData));
  • //envoie des données au Workflow (refus)
  • communicationDataService.RedemarreWorkflow(new Guid(tb_resumeWK.Text), false);
  • }
  • .....
  • // Message passé entre l'application host et le workflow (doit etre Serializable)
  • [Serializable]
  • public class workflowDataEventArgs : ExternalDataEventArgs
  • {
  • bool _accepte;
  • public workflowDataEventArgs(Guid instanceId, bool accepte)
  • : base(instanceId)
  • {
  • _accepte = accepte;
  • }
  • public bool Accepte
  • {
  • get
  • {
  • return this._accepte;
  • }
  • set
  • {
  • this._accepte = value;
  • }
  • }
  • }
  • // service d'echange des donnees
  • [ExternalDataExchange]
  • public interface IWorkflowData
  • {
  • event EventHandler<workflowDataEventArgs> RepriseWorkflow;
  • }
  • ....
  • /// <summary>
  • /// Summary description for StartDataExchangeService
  • /// </summary>
  • public static class StartDataExchangeService
  • {
  • public static void StartOrNot()
  • {
  • //recuperation du runtime courant
  • WorkflowRuntime workflowRuntime = WorkflowWebRequestContext.Current.WorkflowRuntime;
  • //si jamais le service de communication n'existe pas
  • if (workflowRuntime.GetService(typeof(ExternalDataExchangeService)) == null)
  • {
  • //on cree un nouveau service de communication et on l'ajoute au runtime
  • ExternalDataExchangeService dataService = new ExternalDataExchangeService();
  • workflowRuntime.AddService(dataService);
  • //on specifie notre service de communication de donnees
  • WorkflowCommunicationData communicationDataService = new WorkflowCommunicationData();
  • dataService.AddService(communicationDataService);
  • }
  • }
  • }
  • /// <summary>
  • /// Implementation de IWorkflowData representant les données echangées
  • /// </summary>
  • public class WorkflowCommunicationData : WorkflowComm.IWorkflowData
  • {
  • public event EventHandler<WorkflowComm.workflowDataEventArgs> RepriseWorkflow;
  • public void RedemarreWorkflow(Guid instanceID, bool validation)
  • {
  • if (RepriseWorkflow != null)
  • RepriseWorkflow(null, new WorkflowComm.workflowDataEventArgs(instanceID, validation));
  • }
  • }
protected void bt_start_Click(object sender, EventArgs e)
{
    //récuperation du runtime courant 
    WorkflowRuntime workflowRuntime = WorkflowWebRequestContext.Current.WorkflowRuntime;

    //creation et activation d'une instance de workflow dans le runtime
    WorkflowInstance workflowInstance = workflowRuntime.CreateWorkflow(typeof(testWorkflow.MyWorkflow));
    workflowInstance.Start();

    //affichage de l'instance de ce workflow
    lb_guidInstance.Text = workflowInstance.InstanceId.ToString();
}

protected void bt_accepte_Click(object sender, EventArgs e)
{
    //recuperation du service du communication et du service d'echange de données
    ExternalDataExchangeService dataService = (ExternalDataExchangeService)WorkflowWebRequestContext.Current.WorkflowRuntime.GetService(typeof(ExternalDataExchangeService));
    WorkflowCommunicationData communicationDataService = (WorkflowCommunicationData)dataService.GetService(typeof(WorkflowCommunicationData));

    //envoie des données au Workflow (validation)
    communicationDataService.RedemarreWorkflow(new Guid(tb_resumeWK.Text), true);        
}

protected void bt_refuse_Click(object sender, EventArgs e)
{
    Type t = typeof(ExternalDataExchangeService);
    ExternalDataExchangeService dataService = (ExternalDataExchangeService)WorkflowWebRequestContext.Current.WorkflowRuntime.GetService(t);
    WorkflowCommunicationData communicationDataService = (WorkflowCommunicationData)dataService.GetService(typeof(WorkflowCommunicationData));

    //envoie des données au Workflow (refus)
    communicationDataService.RedemarreWorkflow(new Guid(tb_resumeWK.Text), false);    
}

.....

// Message passé entre l'application host et le workflow (doit etre Serializable)
[Serializable]
public class workflowDataEventArgs : ExternalDataEventArgs
{
    bool _accepte;

    public workflowDataEventArgs(Guid instanceId, bool accepte)
        : base(instanceId)
    {
        _accepte = accepte;
    }

    public bool Accepte
    {
        get
        {
            return this._accepte;
        }
        set
        {
            this._accepte = value;
        }
    }
}

// service d'echange des donnees
[ExternalDataExchange]
public interface IWorkflowData
{
    event EventHandler<workflowDataEventArgs> RepriseWorkflow;
}

....

/// <summary>
/// Summary description for StartDataExchangeService
/// </summary>
public static class StartDataExchangeService
{
    public static void StartOrNot()
    {
        //recuperation du runtime courant
        WorkflowRuntime workflowRuntime = WorkflowWebRequestContext.Current.WorkflowRuntime;

        //si jamais le service de communication n'existe pas
        if (workflowRuntime.GetService(typeof(ExternalDataExchangeService)) == null)
        {

            //on cree un nouveau service de communication et on l'ajoute au runtime
            ExternalDataExchangeService dataService = new ExternalDataExchangeService();
            workflowRuntime.AddService(dataService);

            //on specifie notre service de communication de donnees
            WorkflowCommunicationData communicationDataService = new WorkflowCommunicationData();
            dataService.AddService(communicationDataService);
        }
    }
}

/// <summary>
/// Implementation de IWorkflowData representant les données echangées
/// </summary>
public class WorkflowCommunicationData : WorkflowComm.IWorkflowData
{
    public event EventHandler<WorkflowComm.workflowDataEventArgs> RepriseWorkflow;

    public void RedemarreWorkflow(Guid instanceID, bool validation)
    {
        if (RepriseWorkflow != null)
            RepriseWorkflow(null, new WorkflowComm.workflowDataEventArgs(instanceID, validation));
    }
}


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

19 février 2006 21:30:49 :
Supp. des DLL dans l'archive.

 Sources du même auteur

Source avec Zip Source .NET (Dotnet) AGGREGER PLUSIEURS FLUX RSS DANS UN GRIDVIEW
Source .NET (Dotnet) ASP.NET 2.0 - ACTIVER UN MEMBERSHIPUSER

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) UTILISATION DE LA MÉTHODE SORT ET SORTDIRECTION AVEC UN GRID... par jesusonline
Source avec Zip Source .NET (Dotnet) CUSTOM DATEPIKER DÉRIVANT DE COMPOSITECONTROL par fredzool
Source avec Zip UN MODULE POUR APPRENDRE SQL par Elmarzougui
Source avec Zip Source .NET (Dotnet) BOUTON QUI EMPECHE LE MULTI CLIC AVANT LA FIN DU TRAITEMENT.... par fredzool
Source avec Zip Source .NET (Dotnet) BOUTON AVEC CSS ET USERCONTROL WITH EVENT par fredzool

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) WEB SERVICE SOFTWARE FACTORY - DE L’INSTALLATION AU TEST DE ... par romagny13
Source avec Zip Source avec une capture Source .NET (Dotnet) UN FORUM PERSO ASP.NET + C# par leproc
Source avec Zip Source avec une capture Source .NET (Dotnet) SERVICE WEB par bellow
Source avec Zip Source avec une capture Source .NET (Dotnet) [VB 8][.NET 2][ATLAS]EXPLORATEUR (WINDOWS LIKE) DE FICHIER S... par FREMYCOMPANY
Source avec Zip Source avec une capture Source .NET (Dotnet) WEB PAGE SCREENSHOT CAPTURE D'ÉCRAN DE PAGES WEB par badrbadr

Commentaires et avis

Commentaire de ourti le 16/03/2006 13:23:07

salut,
j ai essayé de deployer votre solution, mais une erreur dont je connais pas la source se presente:
Error 1 The name 'WorkflowWebRequestContext' does not exist in the current context E:\Documents and Settings\Administrateur\Bureau\WF Web Exemple\ASPNETWorkflowExemple\App_Code\StartDataExchangeService.cs 22 43 E:\...\ASPNETWorkflowExemple\
merci de m'indiquer le correctif.

Commentaire de dontcha le 02/11/2006 15:42:59

salut,

j'ai le meme soucis que OURTI!!
Pourrait on avoir des explications?
Merci de répondre.

Commentaire de jvbeilen le 04/01/2007 09:13:03

Ok

Commentaire de azra le 16/01/2007 01:04:45 administrateur CS

Bonjour,

Cet exemple est obsolete, je tente de le mettre à jour rapidement

Commentaire de jellalimounir le 27/02/2007 17:45:20

bonjour, je suis un nouveau membre...
j'ai essayé d'utiliser cet exemple pour commencer avec workflow foundation, mais il comporte des erreurs...
"The type or namespace name 'ExternalDataEventArgs' could not be found (are you missing a using directive or an assembly reference?)"
et
"The type or namespace name 'WorkflowComm' could not be found (are you missing a using directive or an assembly reference?)"...
merci pour votre aide...j'en ai besoin de ça...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Extraction de données d'une page web [ par atarik ] SVP, j'ai besoin de savoir comment extracter le contenu d'un tableau d'une page web et la mettre ds ma page pour être toujours à jours.c'est très urge Aspirateur web [ par gegemoi ] Bonjour je recherche un logiciel qui pourrait télécharger un site web avec des .asp que je pourrai ensuite mettre sur un serveur NTj'en ai essaye quel visual interdev [ par fightclub ] Bonjour, lorsque j'ouvre un nouveau projet web avec visual interdev , il me demande le nom d'un serveur web, et la je mets mon ip (car j'ai installé I Afficher le nombre d'utilisateurs connectés à une page Web depuis un site différent [ par Hard Day ] Salut,Je controle 2 sites web (noms de domaine et hébergeurs différents) , dont l'un heberge un chat java embedded dans une page html générée par ASP Personnal Web Server et Windows Me [ par Cybermax ] Bonjour, Je viens de me lancer dans l'ASP et je voudrais savoir s'il est possible d'installer le "Personnal Web Server" sur Windows Me ? Je crois savo Développement de vos site web asp/html [ par misterno ] Si vous souhaitez des conseils, aide, développement de votre site web, j'étudie toutes propositions.A++ Requête POST sans navigateur ! [ par phm ] Bonjour, j'ai besoin de requêter un site web à l'aide d'une base de données.J'y arrive bien en GET, mais pas en POST.Le Site accepte ma requête mais n Web Cam et serveur web et etc [ par kerad ] Salut,On m'a demandé aujourd'hui de mettre une vidéo d'une web cam en live sur le site INternet de la société mais je ne sais pas du tout comment fair application web [ par Ben ] rebonjour,aurait-il une personne qui ait déja développé une application web avec visual interdev 6.0. si c'est le cas peut-elle me donner les étapes à Diff`rences entre IIS 4 et IIS 5 [ par adoxe ] Je suis à me demander pourquoi est-ce que le code que j'implémente tourne bien sur IIS 4 et qu'il "hang" lorsque demandé sur IIS 5. Vous auriez une i


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,076 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales