September 2008 - Posts

Windows Workflow Foundation Part III

Di seri yang ketiga dari seri WWF blog ini, saya akan membahas tentang StateMachineWorkflow dengan menggambarkan sebuah contoh yang berkaitan dengan tema ini. Yang membedakan antara 2 type workflow yaitu Sequential Workflow (Lihat posting sebelumnya) dengan StateMachine adalah StateMachine bekerja berdasarkan event response dari sebuah perubahan yang dimiliki oleh sebuah proses. Sampai kapanpun dia akan menunggu perubahan status dari sebuah proses untuk berpindah ke proses berikut-nya.

WF2

Seperti gambaran di atas, sebelum tombol power ditekan state masih dalam keadaan mati hingga Button di click, pada saat button di click status dalam keadaan hidup. Perubahan antara hidup dan mati-nya tombol tadi itu yang disebut sebagai Transition. Begitu juga ketika tombol ditekan lagi maka proses-nya akan berlaku seperti kebalikannya.

Untuk gambaran kali ini saya akan memberikan contoh tentang proses pengajuan cuti melewati sebuah proses statemachine workflow yang sederhana. Ada 3 state yang akan berlangsung dalam proses workflow ini :

  • WaitingForLeave (menunggu proses pengajuan cuti)
  • LeaveProcessing (pemrosesan cuti)
  • LeaveCompleted (pengajuan proses cuti selesai)

 

State Event State Transition
WaitingForLeave LeaveRequest LeaveProcessing
LeaveProcessing LeaveReject LeaveCompleted
LeaveProcessing LeaveApproved LeaveCompleted

 

Tahapan pertama adalah membuat project baru dari language C# kemudian pilih StateMachineConsoleApplication Template.

  1. Beri nama Project SimpleStateMachineWF
  2. Kemudian akan muncul sebuah StateMachineWorkflow Designer dialog seperti ini, dan diberi nama LeaveWorkflow sebagai pengganti nama WorkFlow1
  3. Masukan 3 buah state seperti table di atas kemudian beri nama sesuai dengan nama state-nya.

WF3

 

Membuat Interface Penghubung antara Workflow dengan Host Application

Untuk memulai sebuah proses pembuatan workflow, sebaiknya kita mengikuti best practise untuk pembuatan event-nya dengan membuat sebuah Interface yang di dalamnya ada event-event yang sudah didesain sebelum-nya beserta satu buah class untuk passing data antara Host Application dengan StateMachine Workflow-nya. Ini akan saya gabungkan dalam 1 buah file LeaveService.cs yang ditambahkan ke dalam project dengan menambahkan sebuah class item baru.

  1. Buat sebuah class file baru dengan cara add new class item baru, kemudian berinama leaveService
  2. Buat Interface baru dengan menyelipkan sebelum definisi Inteface antara namespace dengan class LeaveService, seperti dalam coding berikut :

    1 using System;

    2 using System.Text;

    3 using System.Workflow.ComponentModel.Compiler;

    4 using System.Workflow.ComponentModel.Serialization;

    5 using System.Workflow.ComponentModel;

    6 using System.Workflow.ComponentModel.Design;

    7 using System.Workflow.Runtime;

    8 using System.Workflow.Activities;

    9 using System.Workflow.Activities.Rules;

   10 

   11 namespace SimpleStateMachineWF

   12 {

   13     [ExternalDataExchange]

   14     public interface ILeaveService

   15     {

   16         event EventHandler<ExternalDataEventArgs> LeaveRequest;

   17         event EventHandler<ExternalDataEventArgs> LeaveReject;

   18         event EventHandler<ExternalDataEventArgs> LeaveApproved;

   19         void OnSendMessage(Guid LeaveItemID,string EmployeeName, int days,string Message);

   20 

   21     }

    3.    Buat Class yang merupakan turunan dari ExternalDataEventArgs, nantinya akan dikirim sebagai bagian parameter yang akan dipakai oleh setiap event-           event yang sudah ada seperti tabel di atas

   22 

   23 

   24     [Serializable]

   25     public class MessageReceivedEventArgs : ExternalDataEventArgs

   26     {

   27         private Guid LeaveItemID;

   28         private string EmployeeName;

   29         private int numberOfdays;

   30         private string message;

   31 

   32         public string Message

   33         {

   34             get { return message; }

   35             set { message = value; }

   36         }

   37         public Guid LeaveItem

   38         {

   39             get { return LeaveItemID; }

   40             set{LeaveItemID = value;}

   41         }

   42 

   43         public string employee

   44         {

   45             get { return EmployeeName; }

   46             set { EmployeeName = value; }

   47         }

   48 

   49         public int days

   50         {

   51             get { return numberOfdays; }

   52             set { numberOfdays = value; }

   53         }

   54 

   55         public MessageReceivedEventArgs(Guid LeaveItem, string employee, int days,string message)

   56             : base(LeaveItem)

   57         {

   58             this.LeaveItemID = LeaveItem;

   59             this.EmployeeName = employee;

   60             this.numberOfdays = days;

   61             this.Message = message;

   62         }

   63     }

    4.    Kemudian buat kembali sebuah class baru yang meng-implement ILeaveInterface

   64     public class LeaveService : ILeaveService

   65     {

   66         #region ILeaveService Members

   67 

   68         public event EventHandler<ExternalDataEventArgs> LeaveRequest;

   69 

   70         public event EventHandler<ExternalDataEventArgs> LeaveReject;

   71 

   72         public event EventHandler<ExternalDataEventArgs> LeaveApproved;

   73 

   74         public void OnSendMessage(Guid LeaveItemID, string EmployeeName, int days,string message)

   75         {

   76             if (MessageReceived != null)

   77             {

   78                 MessageReceivedEventArgs args = new MessageReceivedEventArgs(LeaveItemID, EmployeeName, days,message);

   79                 MessageReceived(this, args);

   80             }

   81         }

   82         #endregion

   83 

   84         public event EventHandler<MessageReceivedEventArgs> MessageReceived;

   85 

   86         public void onLeaveRequest(ExternalDataEventArgs args)

   87         {

   88             if (LeaveRequest != null)

   89             {

   90                 LeaveRequest(null, args);

   91             }

   92         }

   93         public void onLeaveReject(ExternalDataEventArgs args)

   94         {

   95             if (LeaveReject != null)

   96             {

   97                 LeaveReject(null, args);

   98             }

   99         }

  100         public void onLeaveApproved(ExternalDataEventArgs args)

  101         {

  102             if (LeaveApproved != null)

  103             {

  104                 LeaveApproved(null, args);

  105             }

  106         }

  107 

  108     }

  109 }

 

     5.    Kembali lagi ke Workflow designer, saatnya kita untuk membuat visualisasi berdasarkan tabel state machine sebelumnya.

     6.    Dari State WaitingForLeave klik kanan dan klik Event Actity hingga muncul tampilan seperti ini :

 

WF4

 

     7.    tambahkan dari toolbox secara berurutan handlingExternalEvent,CallExternalMethod,SetState

wf5

 

 

      8.   Rubah property dari handleExternalEventActivity menjadi :

            -  Interface Type ke : ILeaveInterface

            -  EventName : LeaveRequest

            Kemudian yang callExternalMethodActivity menjadi :

            -  InterfaceType : ILeaveInterface

            -  MethodName : onSendMessage

            SetStateActivity :

            -  TargetStateName : LeaveProcessing

 

       9.   Kemudian berulang utk 2 state yang lainnya sehingga menjadi seperti ini :

 

              WF6

 

 

Sampai sini tahapan pembuatan workflow sudah selesai dibuat, tinggal selanjutnya bagaimana kita memanggil dari host application, tunggu dalam tulisan berikut-nya yah..
dah cape.. juga nih (itung-itung ngabuburit).

 

 

 

 

 

 

 

Posted by sony | with no comments
Filed under: ,

Windows Workflow Foundation Part II

Sekarang saat-nya kita masuk ke dalam sebuah contoh coding dengan menggunakan WWF. Saat ini kita akan membuat dengan menggunakan code author mode dan akan membuat sebuah contoh activity yang di dalamnya terdapat perintah untuk menampilkan console bertulis-kan Hello World.

Sebelumnya kita akan membuat 1 buah project kosong dengan template console application di dalam Visual Studio 2008 menggunakan bahasa C#. Di dalam program.cs yang standard buat coding seperti ini :

   1 using System;

    2 using System.Collections.Generic;

    3 using System.Linq;

    4 using System.Text;

    5 using System.Workflow.Runtime;

    6 using System.Threading;

    7 using System.Workflow.ComponentModel;

    8 using System.Workflow.Activities;

    9 

   10 namespace SimpleWorkFlow

   11 {

   12     class Program

   13     {

   14         static void Main(string[] args)

   15         {

   16 

   17             WorkflowRuntime objWorkFlowRuntime = new WorkflowRuntime();

   18             objWorkFlowRuntime.StartRuntime();

   19 

   20             WorkflowInstance objWFInstance = objWorkFlowRuntime.CreateWorkflow(typeof(Workflow1));

   21             objWFInstance.Start();

   22         }

   23 

   24 

   25     }

   26     public class Workflow1 : SequentialWorkflowActivity

   27     {

   28         CodeActivity code1 = null;

   29         public Workflow1()

   30         {

   31             InitializeComponent();

   32         }

   33 

   34         private void InitializeComponent()

   35         {

   36             code1 = new CodeActivity();

   37             code1.ExecuteCode += new EventHandler(code1_ExecuteCode);

   38             this.Activities.Add(code1);

   39             this.CanModifyActivities = false;

   40             this.Name = "Workflow1";

   41 

   42         }

   43         private void code1_ExecuteCode(object sender, EventArgs e)

   44         {

   45             Console.WriteLine("Hello World from simple Workflow");

   46             Console.ReadLine();

   47         }

   48     }

   49 

   50 }

Jangan lupa untuk menambahkan reference berikut :

WF1

Kemudian dijalankan maka akan muncul sebuah console bertuliskan : "Hello World from simple workflow"

Posted by sony | 1 comment(s)

Windows Workflow Foundation Part I

Di dalam bagian pertama tulisan ini saya akan memberikan beberapa informasi tentang apa yang dimaksud dengan Windows Workflow Foundation (WWF). WWF adalah bagian integral dari sebuah perkembangan dotnet framework yang terbaru yaitu .NET Framework 3.5 selain WCF (Windows Communication Foundation) dan WPF (Windows Presentation Foundation). Dengan menggunakan WWF diharapkan mempermudah programmer dotnet untuk membuat sebuah aplikasi berbasis workflow secara cepat. Kenapa bisa cepat karena di dalamnya sudah disediakan beberapa programming model, in process workflow engine  serta set tools yang sudah lengkap untuk mempercepat pembuatan aplikasi berbasis workflow.

Garis besar dari pemanfaatan WWF saat ini adalah :

  1. Workflow Designer di Visual Studio 2008
  2. Workflow classes dan type data
  3. In Process Workflow Engine (sebuah engine yang sudah built-in di dalamnya utk menjalankan proses workflow)

Dengan workflow diharapkan dapat menterjemahkan apa yang terjadi di dalam kondisi bisnis sebenarnya, dan di dalamnya terdapat penjelasan atau bagaimana kita melaksanakan workflow tersebut yang disebut sebagai Activity.

Bagaimana Sebuah Workflow dapat Bekerja

Sebuah atau beberapa workflow harus berada dalam 1 buah HOST apa yang dimaksud dengan host ? Host adalah sebuah proses yang berjalan dalam aplikasi yang akan menggunakan workflow tersebut dalam menjalankan aktifitas-nya. Contoh-contoh HOST adalah aplikasi berbasis WEB ASP.NET, Windows Application atau Services dan juga yang sudah ada yaitu workflow yang sudah built-in yang nempel di Sharepoint Portal 2007 dan Windows Share Point Services 3.0

image

 

 

 

 

 

 

 

 

 

 

Bagaimana Cara Coding di WWF.

Sebagaimana sebuah bagian dari proses pengembangan aplikasi maka tentunya ada standard bagaimana kita melakukan coding dengan menggunakan WWF, ternyata ada 3 cara yang bisa dilakukan utk melakukan coding dengan WWF.

  1. Code-Only Authoring Mode (tidak perlu menggunakan VS 2008 utk compile)
  2. Code-Separation Authoring Mode ( default dengan menggunakan VS 2008, definisi workflow dalam XAML dan coding di dalam code behind).
  3. No-Code Authoring Mode (XAML, bisa di compile atau di upload ke dalam Host process.)

Ada Berapa Type Workflow ?

Saat ini ada 2 type workflow yang biasa digunakan :

1. Sequential Workflow (terlebih dahulu membuat aktifitas yang sudah bisa diprediksi dalam proses sekuensial)

  1. image

2. State Machine Workflow (perubahan status workflow berdasarkan respon dari event)

image

 

Sekian itu dulu bagian pertama dari tulisan tentang WWF, berikut-nya kita lanjutkan bagaimana membuat Sequential Workflow.

Posted by sony | 1 comment(s)
Filed under: ,

Membuat Blog dengan Live Writer

Saya membuat tulisan ini untuk mempermudah memberikan informasi untuk para blogger yang ingin membuat konten blog. Sejak tahun lalu saya sudah menggunakan live writer dan cukup puas dengan performance-nya.

Beberapa requirement dasar dalam instalasi Live Writer :

  1. Windows XP / Vista (Any edition)
  2. Terinstall .net framework 2.0 di dalam system (bisa di download http://www.microsoft.com/downloads/details.aspx?familyid=0856eacb-4362-4b0d-8edd-aab15c5e04f5&displaylang=en)
  3. Untuk memastikan apakah .net framework sudah terinstall coba cek di dalam direktori c:\windows(kalau default installation xp / vista)/microsoft.net/framework seperti gambar berikut ini :    image

 

 

 

 

 

Setelah rekuirement dasar terpenuhi, kita masuk ke tahap selanjut-nya yang pasti kita membutuhkan sebuah koneksi ke internet karena harus melakukan download aplikasi yang kurang lebih besar-nya 12 mb. Saran saya gunakan koneksi 3G / broadband karena butuh speed yang cukup tinggi.

  1. Download aplikasi installer-nya di : http://get.live.com/writer/overview
  2. Klik "Get It Free" (memang benar ini gratis kok)
  3. Tunggu sampai selesai seperti ini :image
  4. Klik Run kemudian klik accept jika ada permintaan utk menyetujui agreement yang ada, di layar berikut-nya klik install
  5. Di layar berikut-nya terdapat beberapa pilihan aplikasi live yang lain seperti : messenger, photogallery dsb. Kalau hanya ingin install writer saja cek hanya yang writer saja.image
  6. Kemudian klik add to installation
  7. Tunggu hingga proses installation selesai dan live writer mulai bisa digunakan.

 

Untuk memulai Setup dengan Weblog yang sudah ada

1. Jalankan Live Writer hingga muncul dialog spt ini pilih I Already have a weblog setup klik next. live1
2. Di layar berikut-nya pilih weblog services-nya, untuk web-nya mugi kita menggunakan Communication Server, sehingga pilih Another Weblog Service klik Next live2
3. Masukkan alamat web log contohnya : http://mugi.or.id/blogs/xxx kemudian masukkan username dan password klk next. live3
4. Tunggu hingga menampilkan sepeti ini kemudian click Finish live5
     

kalau sudah selesai maka akan muncul seperti ini :

live6

Maka anda sudah bisa melakukan pembuatan blog kemudian kalau sudah selesai klik Publish

Posted by sony | 3 comment(s)

Ekspor user dari Access Ke SQL 2005

Microsoft Access mempunyai sebuah input mask yang sudah system defined namanya password dimana input mask ini bisa di isi menjadi sebuah nilai yang dapat dipergunakan untuk menyimpan data secara tersembunyi, seolah-olah di enkripsi. Sehingga dengan feature ini bisa dibuat sebuah tabel berisi data username dan password dari sebuah organisasi dengan tujuan untuk menyimpan siapa user yang bisa di authentikasi dengan mencari data yang berada dalam tabel tersebut serta melihat level of authorization-nya.

pic_1

Sehingga dengan menggunakan trik ini pada saat dilihat seperti tampilan berikut :

pic_2

Di SQL Server fasilitas ini tidak tersedia, akan tetapi bukan ini menjadi titik lemah di SQL Server terutama versi 2005. Di SQL Server mengenal konsep SQL Login Authentication yang berarti dengan menggunakan fasilitas ini semua obyek di SQL bisa di kontrol hak akses-nya melalui beberapa perintah DCL (data control languange). Nah bagaimana cara membuat transfer login di acess ke SQL 2005, sebenarnya ada cara yang manual yaitu dengan menggunakan management tools SQL 2005 yaitu :

1. Arahkan  ke object explorer pane sebelah kiri layar seperti tampilan berikut :

pic_3.JPG

Klik kanan dari logins — New Login Hingga muncul :

pic_4.JPG

3.  Isi login name dan pilih type authentication SQL Server Authentication

4.  Isi password dan konfirmasi-nya, biarkan semua setting default yang bekerja.

Dan ini dilakukan berulang kali sebanyak user yang ada, setiap user nanti-nya harus melakukan perubahan password ketika pertama kali login.

Akan tetapi ini tidak akan efektif kalo kita mengejar hampir ratusan user yang sudah ada data-nya dalam sebuah tabel access. Jadi kita menggunakan script T-SQL utk melakukan proses perubahannya secara otomatis.

EXEC sp_addlinkedserver @server = ‘SourceDB’,
@provider = ‘Microsoft.Jet.OLEDB.4.0′,
@srvproduct = ‘OLE DB Provider for Jet’,
@datasrc = ‘D:\doc\test.mdb’
GO

Declare @uservar varchar(50),@pwd varchar(50)
declare cr_tbluser cursor for

Select userName,password from SourceDB…tbl_user

OPEN cr_tbluser

FETCH NEXT FROM cr_tbluser INTO @uservar, @pwd
WHILE @@FETCH_STATUS = 0
BEGIN
create login @uservar with password=‘Password01′ must_change,sid=newid(), check_expiration = on,check_policy = on;

FETCH NEXT FROM cr_tbluser INTO @uservar, @pwd
END

CLOSE cr_tbluser
DEALLOCATE cr_tbluser

Posted by sony | with no comments