Penggunaan WWF di ASP.NET

Posted on December 7, 2008

Ternyata penggunaan workflow di dalam ASP.NET jauh berbeda dengan penggunaan workflow dalam windows based application,tadi-nya saya pikir konsep-nya sama saja ternyata tidak semudah dalam windows based application. Setelah melihat-lihat beberapa dokumentasi dari MSDN dan dari beberapa buku akhirnya ketemu juga beberapa hal yang mendasari perbedaan itu, yang paling penting adalah penempatan object Workflow Runtime-nya. Apakah mau disimpan ke dalam application variable atau mau disimpan ke dalam sebuah class host tersendiri yang berada dalam satu web based application tempat host dari workflow tersebut berada.

Hasil penelusuran saya akan dituangkan dalam tulisan berikut ini. Saat ini ada 2 cara untuk menggunakan WWF di dalam ASP.NET :

  1. Mempublish workflow menjadi web services.
  2. Membuat workflow dengan cara biasa

Saya akan membahas cara yang kedua saat ini. Dimulai dengan membuat new website baru dengan menggunakan Visual Studio 2008. Kemudian tambahkan 1 project Sequential Workflow baru dengan menggunakan VB / C# sebagai language-nya. Untuk memudahkan pemahaman saya akan gunakan perhitungan matematika biasa.

VS 2008 Solution explorer akan terlihat seperti ini :

gbr1

Buka Worflow Editor kemudian tambahkan 1 buah Code Activity kedalam workflow, double click code activity. Didalam code view kita tambahkan 3 buah property.

 

    1 using System;

    2 using System.ComponentModel;

    3 using System.ComponentModel.Design;

    4 using System.Collections;

    5 using System.Drawing;

    6 using System.Linq;

    7 using System.Workflow.ComponentModel.Compiler;

    8 using System.Workflow.ComponentModel.Serialization;

    9 using System.Workflow.ComponentModel;

   10 using System.Workflow.ComponentModel.Design;

   11 using System.Workflow.Runtime;

   12 using System.Workflow.Activities;

   13 using System.Workflow.Activities.Rules;

   14 

   15 

   16 namespace WFMath

   17 {

   18     public sealed partial class Workflow1 : SequentialWorkflowActivity

   19     {

   20         private Double m_nilai1;

   21         private Double m_nilai2;

   22         private Double m_hasil;

   23 

   24         public Workflow1()

   25         {

   26             InitializeComponent();

   27         }

   28 

   29         public Double nilai1 {

   30             get {return m_nilai1;}

   31             set {m_nilai1 = value;}

   32         }

   33 

   34         public Double nilai2{

   35             get {return m_nilai2;}

   36             set {m_nilai2 = value;}

   37         }

   38 

   39         public Double hasil {

   40             get { return m_hasil; }

   41             set { m_hasil = value; }

   42         }       

   43 

   44         private void codeActivity1_ExecuteCode(object sender, EventArgs e)

   45         {

   46             m_hasil = m_nilai1 + m_nilai2;

   47             Console.WriteLine("Workflow tereksekusi");

   48             Console.WriteLine(m_hasil.ToString());

   49             Console.WriteLine("Workflow selesai");

   50         }

   51     }

   52 

   53 }

 

Kemudian modifikasi web.config untuk mempersiapkan penggunaan library yang akan dipakai.

1. Sisipkan baris dibawah didalam <ConfigSections>

<section name="WorkflowRuntime" type="System.Workflow.Runtime.Configuration.WorkflowRuntimeSection,System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral,PublicKeyToken=31bf3856ad364e35" />

2.  Setelah close tag </ConfigSections> sisipkan runtime dibawah.

   <WorkflowRuntime Name="WorkflowServiceContainer">

      <Services>

      <add type="System.Workflow.Runtime.Hosting.ManualWorkflowSchedulerService,System.Workflow.Runtime, Version=3.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35"/>

      <add type="System.Workflow.Runtime.Hosting.DefaultWorkflowCommitWorkBatchService,System.Workflow.Runtime, Version=3.0.0.0, Culture=neutral,PublicKeyToken=31bf3856ad364e35"/>

      </Services>

   </WorkflowRuntime>

3.  Di dalam assemblies section sisipkan ini :

<add assembly="System.Workflow.Runtime, Version=3.0.0.0,Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

<add assembly="System.Workflow.ComponentModel, Version=3.0.0.0,Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

<add assembly="System.Workflow.Activities, Version=3.0.0.0,Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>           

Kemudian didalam global.asax Simpan object workflow runtime pada saat application start berjalan dan stop workflow runtime pada saat application on end.

   41     void Application_Start(object sender, EventArgs e)

   42     {

   43         // Code that runs on application startup

   44         System.Workflow.Runtime.WorkflowRuntime workflowRuntime =

   45         new System.Workflow.Runtime.WorkflowRuntime("WorkflowRuntime");

   46         //start the workflow runtime

   47         workflowRuntime.StartRuntime();

   48         //save the runtime for use by individual pages

   49         Application["WorkflowRuntime"] = workflowRuntime;       

   50 

   51     }

   52 

   53     void Application_End(object sender, EventArgs e)

   54     {

   55         //  Code that runs on application shutdown

   56         System.Workflow.Runtime.WorkflowRuntime workflowRuntime =

                   Application["WorkflowRuntime"] as System.Workflow.Runtime.WorkflowRuntime;

   57         workflowRuntime.StopRuntime();

   58     }

 

Di defaut aspx buat tampilan seperti ini :

gbr2

beri id utk masing textbox : txtnilai1,txtnilai2 dan txthasil

kemudian di bagian click button double click masuk ke event click

   17     protected void Button1_Click(object sender, EventArgs e)

   18     {

   19         WorkflowRuntime workflowRuntime = Application["WorkflowRuntime"] as WorkflowRuntime;

   20         //retrieve the scheduler that is used to execute workflows

   21         ManualWorkflowSchedulerService scheduler =

   22         workflowRuntime.GetService(typeof(ManualWorkflowSchedulerService)) as ManualWorkflowSchedulerService;

   23 

   24         workflowRuntime.WorkflowCompleted += new EventHandler<WorkflowCompletedEventArgs>(workflowRuntime_WorkflowCompleted);

   25         Double iNilai1;

   26         Double iNilai2;

   27         Double.TryParse(txtnilai1.Text, out iNilai1);

   28         Double.TryParse(txtNilai2.Text, out iNilai2);

   29 

   30         Dictionary<String, Object> wfArguments = new Dictionary<string, object>();

   31         wfArguments.Add("nilai1", iNilai1);

   32         wfArguments.Add("nilai2", iNilai2);

   33 

   34         WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(WFMath.Workflow1), wfArguments);

   35         instance.Start();

   36 

   37         scheduler.RunWorkflow(instance.InstanceId);

   38     }

   39 

   40     private void workflowRuntime_WorkflowCompleted(object sender, WorkflowCompletedEventArgs e)

   41     {

   42         if (e.OutputParameters.ContainsKey("hasil"))

   43         {

   44             Double dHasil = (Double)e.OutputParameters["hasil"];

   45             txtHasil.Text = dHasil.ToString();

   46         }

   47     }

 

Selesai semua-nya kemudian di test dari page defaut.aspx

gb3

hasil-nya akan keluar seperti ini, dimana proses perhitungannya dilakukan didalam WWF bukan di dalam coding-nya.

» Filed Under Uncategorized

Comments

Leave a Reply




  • About

    I'm not a geek I' just a person who like to share knowledge that I have. Born in Bandung 36 years ago. Right now I'm a free man not belong to any company .