Windows Communication Foundation Sample Project (VB)

Tulisan sebelumnya saya sudah membahas tentang overview dan sejarah teknologi WCF. Dikesempatan ini saya akan memberikan informasi bagaimana programming model di WCF. Setelah saya pelajari konsep WCF berdasarkan buku-buku yang ada saya akan menjelaskan 3 bagian yang harus kita pelajari :

  1. Services : tempat kita membuat services apa saja yang akan kita publish atau kita ekspos keluar
  2. Host : tempat dimana services yang akan kita buat di host untuk mendapatkan Address alamat serta port yang di protocol mana kita akan publish dan dipergunakan oleh client, dan juga menentukan binding tipe mana yang boleh digunakan disisi client.
  3. Client : teknologi di sisi client yang akan menggunakan services ini.

Pertama yang akan dibahas adalah membuat services.

Services

Untuk memahami pembuatan services, kita harus menentukan dahulu metode, properti dan event mana saja yang akan kita publish keluar. Untuk  contoh pertama kita akan membuat sebuah metode sederhana untuk perhitungan matematika.

Metode-metode yang akan kita publish keluar adalah :

- Penambahan (nilai1,nilai2) return integer

- Pengurangan (nilai1,nilai2) return integer

- Perkalian (nilai1,nilai2) return integer

- Pembagian (nilai1,nilai2) return integer

 

1 Tahap pertama buat sebuah project WCF Services dengan menggunakan template yang sudah disiapkan oleh Visual Studio 2008. Saya menggunakan Visual Basic sebagai bahasa-nya.
image
2 Hapus iService1.vb dan Service1.vb file ini otomatis muncul bersamaan ketika project baru dibuat
3 Buat sebuah folder Contracts yang nantinya akan dipakai untuk menyimpan interface
4 Di dalam folder contracts tambahkan item baru Class kemudian beri nama iMath.vb
5 Buat coding sebagai di dalam iMath.vb berikut :
 
 
Namespace Test1.Exchange.Contracts
    <ServiceContract()> _
    Public Interface iMath
 
        <OperationContract()> _
        Function penambahan(ByVal nilai1 As Integer, ByVal nilai2 As Integer) As Integer
 
        <OperationContract()> _
        Function pengurangan(ByVal nilai1 As Integer, ByVal nilai2 As Integer) As Integer
 
        <OperationContract()> _
        Function perkalian(ByVal nilai1 As Integer, ByVal nilai2 As Integer) As Integer
 
        <OperationContract()> _
        Function pembagian(ByVal nilai1 As Integer, ByVal nilai2 As Integer) As Integer
 
    End Interface
End Namespace
6 Dari root-nya project folder tambahkan sebuah class Item diberi nama Math.vb kemudian ketik coding dibawah ini :

Imports System.ServiceModel
Imports MathService.Test1.Exchange.Contracts
Namespace Test1.Exchange
    <ServiceBehavior(InstanceContextMode:=InstanceContextMode.Single)> _
    Public Class Math
        Implements iMath
        Public Function pembagian(ByVal nilai1 As Integer, ByVal nilai2 As Integer) _ 
            As Integer Implements Contracts.iMath.pembagian
            Return nilai1 / nilai2
        End Function
 
        Public Function penambahan(ByVal nilai1 As Integer, ByVal nilai2 As Integer) _ 
            As Integer Implements Contracts.iMath.penambahan
            Return nilai1 + nilai2
        End Function
 
        Public Function pengurangan(ByVal nilai1 As Integer, ByVal nilai2 As Integer) _ 
            As Integer Implements Contracts.iMath.pengurangan
            Return nilai1 - nilai2
        End Function
 
        Public Function perkalian(ByVal nilai1 As Integer, ByVal nilai2 As Integer) _ 
            As Integer Implements Contracts.iMath.perkalian
            Return nilai1 * nilai2
        End Function
    End Class
 
End Namespace
7 Sampai tahap ini coba di compile dan dicek apakah masih ada error, kalau tidak ada kita masuk ke dalam tahap selanjutnya yaitu membungkus menjadi sebuah host.

Kita sudah selesai membuat Services-nya dari WCF Project yang akan kita lanjutkan. Di dalam services ini kita harus mempersiapkan sebuah contract dari services yang akan kita buat. Simple-nya adalah buat interface dari semua metode, properti dan event yang akan kita tampilkan ke luar dan dipanggil dari client.

Host

1 tambahkan sebuah project Console Application dari solution dengan cara File –> Add New Project
2 Beri nama MathConsoleHost
3 Kemudian ganti isi module1.vb dengan coding berikut :
 
Imports System.ServiceModel
Imports MathService.Test1.Exchange
Imports MathService.Test1.Exchange.Contracts
Namespace Test1.Exchange.Hosts
    Module Module1
 
        Sub Main()
            'Bikin EndPoint URI ( Uniform Resource Identifier)
            'A = Address
            Dim address As Uri = New Uri("http://localhost:8888/Test1/Exchange")
            'B = Binding
            Dim svcType As Type = GetType(Math)
            Dim binding As BasicHttpBinding = New BasicHttpBinding()
            Dim host As ServiceHost = New ServiceHost(svcType)
 
            'tambahkan endpoint / address kedalam host
            host.AddServiceEndpoint(GetType(iMath), binding, address)
            host.Open()
 
            Console.WriteLine("Service Math Started : Press Return to exit")
            Console.ReadLine()
 
        End Sub
 
    End Module
 
End Namespace
4 Compile dan coba jalankan host ini dengan cara dari solution explorer – klik kanan project MathConsoleHost –> debug –> start new instance tunggu sebentar hingga muncul dialog console berikut :
  image
  Sampai tahapan ini kita sudah membuat host services kita yang berjalan dengan menggunakan basicHttpBinding  atau sama dengan membuat web service menggunakan protocol http.Next step-nya adalah ngetes dari client menggunakan console application juga
   

 

Client

1 Step-nya sama dengan pembuatan host akan tetapi module1.vb-nya diganti dengan coding sebagai berikut :
 
Imports System.ServiceModel
Imports System.ServiceModel.Activation
Imports System.ServiceModel.Channels
Imports System.Runtime.Serialization
Namespace Test1.Exchange.Clients
    <ServiceContract()> _
    Public Interface iMath
 
        '' TODO: Add your service operations here
        <OperationContract()> _
        Function penambahan(ByVal nilai1 As Integer, ByVal nilai2 As Integer) As Integer
 
        <OperationContract()> _
        Function pengurangan(ByVal nilai1 As Integer, ByVal nilai2 As Integer) As Integer
 
        <OperationContract()> _
        Function perkalian(ByVal nilai1 As Integer, ByVal nilai2 As Integer) As Integer
 
        <OperationContract()> _
        Function pembagian(ByVal nilai1 As Integer, ByVal nilai2 As Integer) As Integer
 
    End Interface
    Module Module1
 
        Sub Main()
            ' proses memulai ABC of Services sampai proxy object'
            Dim address As EndpointAddress = New EndpointAddress("http://localhost:8888/Test1/Exchange")
            Dim binding As BasicHttpBinding = New BasicHttpBinding()
            Dim channelFactory As IChannelFactory(Of iMath) = _
                New ChannelFactory(Of iMath)(binding)
 
            Dim proxy As iMath = channelFactory.CreateChannel(address)
 
            'proses akses service class-nya Math
            Dim hasilPenambahan As Integer
            hasilPenambahan = proxy.penambahan(3, 4)
            Console.WriteLine("Hasil Penambahan 3 + 4 = {0}", hasilPenambahan)
 
            Dim hasilPengurangan As Integer
            hasilPengurangan = proxy.pengurangan(6, 2)
            Console.WriteLine("Hasil Pengurangan 6 + 2 = {0}", hasilPengurangan)
 
            Dim hasilPerkalian As Integer
            hasilPerkalian = proxy.perkalian(5, 2)
            Console.WriteLine("Hasil Perkalian 5 x 2 = {0}", hasilPerkalian)
 
            Dim hasilPembagian As Integer
            hasilPembagian = proxy.pembagian(10, 2)
            Console.WriteLine("Hasil Pembagian 10 : 2 = {0}", hasilPembagian)
 
            Console.ReadLine()
 
        End Sub
 
    End Module
End Namespace
2 Test dengan cara yang sama seperti Host project sebelumnya sehingga nanti akan muncul nilai dan hasil-nya seperti ini :
  image
  sampai disini kita sudah selesai melakukan test ke sebuah WCF sample project yang sudah kita buat tadi. Selamat mencoba.
Share this post: | | | |
Posted by Sony Setiawan with 1 comment(s)
Filed under:

Windows Communication Foundation Based on SOA Perception

Saat ini terminologi SOA (Service Oriented Architecture) sudah menjadi buah bibir banyak kalangan terutama para pemain di industri yang terkait dengan lingkungan Enterprise. Memang topik ini cukup advanced untuk dipelajari oleh karena itu dibutuhkan pemahaman terlebih dahulu tentang SOA sendiri.

5 tahun terakhir ini Web Services sudah banyak dipakai oleh industri terutama oleh pengguna di kalangan enterprise. Web Services pada jaman itu sudah menjadi bentuk SOA yang paling generic dikarenakan kemampuan dia untuk dipakai oleh berbagai macan client runtime termasuk diantaranya adalah java based application , PHP, phyton dsb. Kemudian penyedia Web Services-nya pun semakin banyak tidak hanya dari Microsoft Based tapi juga dari PHP, Java Enterprise, Oracle, BEA dan masih banyak yang lainnya.

SOA sebenarnya terdiri dari 3 komponen utama :

  1. Service Provider : sebuah node di network yang mempunyai jasa layanan services yang dapat digunakan oleh Service Consumer.
  2. Service Consumer : aplikasi yang sudah support SOAP Messages yang dapat mengkonsumsi Services Provider.
  3. Service Broker : makelar di dunia SOA yang tugas-nya sebagai tempat bagi siapapun untuk mencari services-services yang ada di sebuah network, mirip-mirip kayak fungsi-nya DNS / Google.

 

Sejarah SOA

SOA tidak bisa lepas keterkaitannya dengan sejarah distributed application sejak jaman VB 6 sampai .NET 2.0. Kalian tentu pernah tahu apa yang dimaksud COM (Component Object Model) , COM + (versi-nya COM yang disimpan dalam Component Services) dan .NET Remoting. Tidak ketinggalan Web Services versi .NET 1.1 hingga 2.0. Beberapa kelemahan dari beberapa teknologi yang tadi saya sebutkan adalah sebagai berikut :

  • COM / COM + : Walaupun banyak aplikasi yang masih support teknologi ini, tetapi kelemahannya adalah client-nya harus menggunakan Windows Operating System terutama yang sudah support RPC (Remote Procedure Call)
  • .NET Remoting : kurang populer karena antara host dan client harus menggunakan teknologi .NET. Kemudian untuk membungkus transportation layer-nya harus menggunakan proses coding yang sangat rumit.
  • Web Services : harus selalu menggunakan http protocol untuk distribusi-nya walaupun untuk client-nya bisa menggunakan teknologi manapun yang support SOAP.

 

Sebelum Visual Studio 2008 release, VS 2005 sudah mempunyai add in tools tersendiri untuk membuat SOA ini tentunya dengan menggunakan .NET Framework 3.0. add inn tools ini dapat di download di sini.

 

Apa Keunggulan WCF 

Pertanyaan berikut-nya apa yang membuat WCF menarik dibandingkan dengan pendahulu-nya ? tentunya jawaban pertanyaan ini adalah untuk kekurangan-kekurangan ini teknologi sebelumnya. Jadi secara umum WCF mencoba merangkum apa yang kekurangan-kekurangan di teknologi sebelumnya, tetapi sifatnya bukan menimpa teknologi sebelumnya malah melakukan extend dari teknologi sebelumnya.

 

Cukup dulu pengantar-nya tentang WCF di sesi berikut-nya saya akan membuat simple project dengan teknologi WCF dan SOA.

Share this post: | | | |
Posted by Sony Setiawan with 1 comment(s)
Filed under:

Penggunaan WWF di ASP.NET

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.

Share this post: | | | |
Posted by Sony Setiawan with 2 comment(s)
Filed under:

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.

Share this post: | | | |
Posted by Sony Setiawan with 1 comment(s)
Filed under:

Membuat Audit Delete Record dengan trigger di SQL 2005

Tulisan ini sebenarnya merupakan pemenuhan janji saya kepada salah satu peserta training yang ingin mengetahui tentang konsep Auditing Record Log di sebuah database MS SQL Server 2005 (any edition). Saya mohon maaf kepada Pak Indra yang sudah menanti cukup lama untuk tulisan ini Smile.

Kita mulai dari cara yang sederhana yaitu dengan membuat sebuah database / menggunakan sebuah database yang sudah ada. Beberapa prasyarat awal untuk mengetahui lebih detail konsep ini bisa dimulai pemahaman tentang Trigger. Kenaapa menggunakan trigger ? Sebagai sebuah object database yang sebenarnya 'berdiri sendiri', trigger mempunyai kemampuan utk meng-antisipasi sebuah aksi yang dilakukan ke database / table dengan merespon balik berupa reaksi terhadap table itu sendiri (tempat trigger berada) / kepada object (table,view dll) yang juga terdapat di dalam database itu. Fungsi trigger sebenarnya mirip Check constraint tetapi  trigger mempunya fungsionalitas yang lebih luas dibandingkan dengan Check Constraint.

Mari kita mulai pembahasan topik ini dengan membuat sebuah skenario berikut : Sebuah aplikasi berbasis windows based client dan database MS SQL 2005 sebagai backend-nya sering mendapatkan sebuah kasus dimana database-nya / tabel / record-nya tiba-tiba data-nya menghilang, sebagai seorang DBA tentunya kita harus mempunyai cara untuk mengetahui siapa, kapan, dan lewat mana data tersebut 'terhapus' entah itu sengaja atau tidak sengaja. Beberapa prasyarat untuk membuatnya adalah sebagai berikut :

  1. Tentukan terlebih dahulu mana tabel yang akan di audit, karena semakin banyak trigger yang harus di aktifkan di sebuah database dapat menurunkan performance dari database tersebut.
  2. Buat database dan table kosong yang baru di SQL 2005 dengan menggunakan SQL Management Studio nama-nya terserah anda : "testingAudit" dengan menggunakan konfigurasi standard :

    create database testingAudit
    go
    create table testDelete
    (
    id_record varchar(5),
    Deskripsi varchar(20)
    )
    go

    'insert data dummy ke table testDelete, jalankan script :

    insert into testDelete values ('ABC','testing 123')
    insert into testDelete values ('BCD','testing 124')
    insert into testDelete values ('CDE','testing 125')
    insert into testDelete values ('EFG','testing 126')
    insert into testDelete values ('FGH','testing 126')
    insert into testDelete values ('GHI','testing 127')
    insert into testDelete values ('HIJ','testing 128')
    insert into testDelete values ('IJK','testing 129')
    insert into testDelete values ('JKL','testing 130')
    insert into testDelete values ('KLM','testing 131')
    insert into testDelete values ('LMN','testing 132')
    insert into testDelete values ('MNO','testing 133')

  3. Setelah kita tentukan tabel mana yang akan di audit yaitu testdelete table, buatlah sebuah tabel yang dimanfaatkan sebagai audit log table yang di dalamnya terdapat beberapa informasi seperti : deleted_date_hour_minute,who_deleted,id_record_deleted,application. Berikut contoh script untuk membuat tabel-nya :
    use testingAudit
    go
    create table log_record
    (
    dateDeleted datetime,
    personWho varchar(30),
    Id_record varchar(10)
    )
  4. Setelah table log dibuat, tahap berikut-nya adalah membuat trigger on delete di dalam table testDelete
    Setiap perintah transaction (insert,update,delete) statement di table MS SQL Server pasti selalu muncul beberapa table sementara yang hanya muncul disaat eksekusi trigger. Table-table itu diantaranya adalah sebagai berikut :
    -   inserted (muncul pada saat terjadi proses transaksi perintah insert terhadap sebuah tabel)
    -   deleted (muncul pada saat terjadi proses transaksi perintah delete terhadap sebuah tabel)
    -   Sedangkan untuk transaksi Update , proses yang terjadi adalah deleted yang pertama kali di kerjakan baru setelah itu Inserted.

    Gambaran script untuk pembuatan trigger-nya adalah sebagai berikut :
    create trigger tr_test on testdelete
    for delete
    as
    declare @date1 datetime,@person varchar(30) , @id varchar(10)
    set @date1 = getdate()
    set @person = suser_sname()
    select @id = id_record from deleted
    insert into log_record values (@date1,@person,@id)

  5. Pastikan trigger tr_test sudah terdapat dalam tabel testDelete, dengan menggunaan SSMS (SQL Server Management Studio).
  6. Coba jalankan perintah delete terhadap 1 record di tabel testDelete kemudian cek apakah log_record table telah terisi siapa, kapan dan record mana yang terhapus.
  7. Tolong dipastikan juga bahwa user yang authorized delete record di testDelete bisa melakukan perintah insert di table log_record.
  8. Selamat mencoba.

Feel free your comment,

Sony

Share this post: | | | |
Posted by Sony Setiawan with 1 comment(s)