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 :
- Mempublish workflow menjadi web services.
- 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 :
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 :
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
hasil-nya akan keluar seperti ini, dimana proses perhitungannya dilakukan didalam WWF bukan di dalam coding-nya.
» Filed Under Uncategorized
Comments
Leave a Reply