<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.netindonesia.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>SonySe</title><link>http://geeks.netindonesia.net/blogs/sonyse/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Windows Workflow Foundation Part I</title><link>http://geeks.netindonesia.net/blogs/sonyse/archive/2008/09/29/windows-workflow-foundation-part-i.aspx</link><pubDate>Mon, 29 Sep 2008 01:15:23 GMT</pubDate><guid isPermaLink="false">5cc3a90d-ac9a-472a-8983-30514957434c:64604</guid><dc:creator>Sony Setiawan</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/sonyse/rsscomments.aspx?PostID=64604</wfw:commentRss><comments>http://geeks.netindonesia.net/blogs/sonyse/archive/2008/09/29/windows-workflow-foundation-part-i.aspx#comments</comments><description>&lt;p&gt;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&amp;nbsp; serta set tools yang sudah lengkap untuk mempercepat pembuatan aplikasi berbasis workflow.&lt;/p&gt; &lt;p&gt;Garis besar dari pemanfaatan WWF saat ini adalah :&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Workflow Designer di Visual Studio 2008  &lt;li&gt;Workflow classes dan type data  &lt;li&gt;In Process Workflow Engine (sebuah engine yang sudah built-in di dalamnya utk menjalankan proses workflow)&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Dengan workflow diharapkan dapat menterjemahkan apa yang &lt;strong&gt;terjadi di dalam kondisi bisnis sebenarnya&lt;/strong&gt;, dan di dalamnya terdapat penjelasan atau bagaimana kita melaksanakan workflow tersebut yang disebut sebagai &lt;strong&gt;Activity.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Bagaimana Sebuah Workflow dapat Bekerja&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Sebuah atau beberapa workflow harus berada dalam 1 buah &lt;strong&gt;HOST &lt;/strong&gt;apa yang dimaksud dengan host ? Host adalah sebuah proses yang berjalan dalam aplikasi yang akan menggunakan workflow tersebut dalam menjalankan aktifitas-nya. Contoh-contoh &lt;strong&gt;HOST&lt;/strong&gt; 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&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/sonyse/WindowsLiveWriter/WindowsWorkflowFoundationPartI_CB1/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin:0px 10px 0px 5px;border-right-width:0px;" height="244" alt="image" src="http://geeks.netindonesia.net/blogs/sonyse/WindowsLiveWriter/WindowsWorkflowFoundationPartI_CB1/image_thumb.png" width="163" align="left" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Bagaimana Cara Coding di WWF.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;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.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Code-Only Authoring Mode (tidak perlu menggunakan VS 2008 utk compile)  &lt;li&gt;Code-Separation Authoring Mode ( default dengan menggunakan VS 2008, definisi workflow dalam XAML dan coding di dalam code behind).  &lt;li&gt;No-Code Authoring Mode (XAML, bisa di compile atau di upload ke dalam Host process.)&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;strong&gt;Ada Berapa Type Workflow ?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Saat ini ada 2 type workflow yang biasa digunakan :&lt;/p&gt; &lt;p&gt;1. Sequential Workflow (terlebih dahulu membuat aktifitas yang sudah bisa diprediksi dalam proses sekuensial)&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;a href="http://geeks.netindonesia.net/blogs/sonyse/WindowsLiveWriter/WindowsWorkflowFoundationPartI_CB1/image_4.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="145" alt="image" src="http://geeks.netindonesia.net/blogs/sonyse/WindowsLiveWriter/WindowsWorkflowFoundationPartI_CB1/image_thumb_1.png" width="120" align="left" border="0" /&gt;&lt;/a&gt;  &lt;li&gt; &lt;li&gt; &lt;li&gt; &lt;li&gt; &lt;li&gt; &lt;li&gt; &lt;li&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;2. State Machine Workflow (perubahan status workflow berdasarkan respon dari event)&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.netindonesia.net/blogs/sonyse/WindowsLiveWriter/WindowsWorkflowFoundationPartI_CB1/image_6.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin:0px 10px 0px 30px;border-right-width:0px;" height="148" alt="image" src="http://geeks.netindonesia.net/blogs/sonyse/WindowsLiveWriter/WindowsWorkflowFoundationPartI_CB1/image_thumb_2.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Sekian itu dulu bagian pertama dari tulisan tentang WWF, berikut-nya kita lanjutkan bagaimana membuat Sequential Workflow.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/sonyse/archive/2008/09/29/windows-workflow-foundation-part-i.aspx&amp;amp;subject=Windows Workflow Foundation Part I" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/sonyse/archive/2008/09/29/windows-workflow-foundation-part-i.aspx&amp;amp;t=Windows+Workflow+Foundation+Part+I" target="_blank" title="Submit Windows Workflow Foundation Part I to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/sonyse/archive/2008/09/29/windows-workflow-foundation-part-i.aspx&amp;amp;title=Windows+Workflow+Foundation+Part+I" target="_blank" title="Submit Windows Workflow Foundation Part I to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/sonyse/archive/2008/09/29/windows-workflow-foundation-part-i.aspx&amp;amp;phase=2" target="_blank" title="Submit Windows Workflow Foundation Part I to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/sonyse/archive/2008/09/29/windows-workflow-foundation-part-i.aspx&amp;amp;title=Windows+Workflow+Foundation+Part+I" target="_blank" title="Add Windows Workflow Foundation Part I to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=64604" width="1" height="1"&gt;</description></item><item><title>Membuat Audit Delete Record dengan trigger di SQL 2005</title><link>http://geeks.netindonesia.net/blogs/sonyse/archive/2008/02/16/membuat-audit-delete-record-dengan-trigger-di-sql-2005.aspx</link><pubDate>Sat, 16 Feb 2008 06:32:00 GMT</pubDate><guid isPermaLink="false">5cc3a90d-ac9a-472a-8983-30514957434c:39489</guid><dc:creator>Sony Setiawan</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.netindonesia.net/blogs/sonyse/rsscomments.aspx?PostID=39489</wfw:commentRss><comments>http://geeks.netindonesia.net/blogs/sonyse/archive/2008/02/16/membuat-audit-delete-record-dengan-trigger-di-sql-2005.aspx#comments</comments><description>&lt;p&gt;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 &lt;img src="http://miimlc.metrodata.co.id/forum/emoticons/emotion-1.gif" alt="Smile" /&gt;.&lt;/p&gt;
&lt;p&gt;Kita mulai dari cara yang sederhana yaitu dengan membuat&amp;nbsp;sebuah database / 
menggunakan sebuah database yang sudah ada.&amp;nbsp;Beberapa prasyarat awal untuk 
mengetahui lebih detail konsep ini bisa dimulai pemahaman tentang 
&lt;b&gt;Trigger. &lt;/b&gt;Kenaapa menggunakan trigger ? Sebagai sebuah object 
database yang sebenarnya &amp;#39;berdiri sendiri&amp;#39;, trigger mempunyai kemampuan utk 
meng-antisipasi sebuah &lt;b&gt;aksi&lt;/b&gt; yang dilakukan ke database / table 
dengan merespon balik berupa &lt;b&gt;reaksi &lt;/b&gt;terhadap table itu sendiri 
(tempat trigger berada) / kepada object (table,view dll) yang juga terdapat di 
dalam database itu. Fungsi trigger sebenarnya mirip &lt;b&gt;Check constraint 
&lt;/b&gt;tetapi &amp;nbsp;trigger mempunya fungsionalitas yang lebih luas dibandingkan 
dengan &lt;b&gt;Check Constraint&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;Mari kita mulai pembahasan topik ini dengan membuat sebuah skenario&amp;nbsp;berikut : 
Sebuah aplikasi berbasis windows based client dan database MS SQL 2005 sebagai 
backend-nya sering mendapatkan sebuah&amp;nbsp;kasus dimana&amp;nbsp;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 
&amp;#39;terhapus&amp;#39; entah itu sengaja atau tidak sengaja. Beberapa prasyarat untuk 
membuatnya adalah sebagai berikut :&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;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.&lt;/li&gt;&lt;li&gt;Buat database dan table kosong yang baru di SQL&amp;nbsp;2005 dengan menggunakan SQL 
Management Studio nama-nya terserah anda : &lt;b&gt;&amp;quot;testingAudit&amp;quot; 
&lt;/b&gt;dengan menggunakan&amp;nbsp;konfigurasi standard : 
&lt;p&gt;&lt;b&gt;&lt;i&gt;create database testingAudit&lt;br /&gt;go&lt;br /&gt;create table 
testDelete&lt;br /&gt;(&lt;br /&gt;id_record varchar(5),&lt;br /&gt;Deskripsi 
varchar(20)&lt;br /&gt;)&lt;br /&gt;go&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&amp;#39;insert&amp;nbsp;data dummy ke table 
testDelete, jalankan script :&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;insert into testDelete&amp;nbsp;values (&amp;#39;ABC&amp;#39;,&amp;#39;testing 123&amp;#39;)&lt;br /&gt;insert 
into testDelete&amp;nbsp;values (&amp;#39;BCD&amp;#39;,&amp;#39;testing 124&amp;#39;)&lt;br /&gt;insert into testDelete&amp;nbsp;values 
(&amp;#39;CDE&amp;#39;,&amp;#39;testing 125&amp;#39;)&lt;br /&gt;insert into testDelete&amp;nbsp;values (&amp;#39;EFG&amp;#39;,&amp;#39;testing 
126&amp;#39;)&lt;br /&gt;insert into testDelete&amp;nbsp;values (&amp;#39;FGH&amp;#39;,&amp;#39;testing 126&amp;#39;)&lt;br /&gt;insert into 
testDelete&amp;nbsp;values (&amp;#39;GHI&amp;#39;,&amp;#39;testing 127&amp;#39;)&lt;br /&gt;insert into testDelete&amp;nbsp;values 
(&amp;#39;HIJ&amp;#39;,&amp;#39;testing 128&amp;#39;)&lt;br /&gt;insert into testDelete&amp;nbsp;values (&amp;#39;IJK&amp;#39;,&amp;#39;testing 
129&amp;#39;)&lt;br /&gt;insert into testDelete&amp;nbsp;values (&amp;#39;JKL&amp;#39;,&amp;#39;testing 130&amp;#39;)&lt;br /&gt;insert into 
testDelete&amp;nbsp;values (&amp;#39;KLM&amp;#39;,&amp;#39;testing 131&amp;#39;)&lt;br /&gt;insert into testDelete&amp;nbsp;values 
(&amp;#39;LMN&amp;#39;,&amp;#39;testing 132&amp;#39;)&lt;br /&gt;insert into testDelete&amp;nbsp;values (&amp;#39;MNO&amp;#39;,&amp;#39;testing 
133&amp;#39;)&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;Setelah kita tentukan tabel mana yang akan di audit yaitu &lt;b&gt;testdelete 
&lt;/b&gt;table, buatlah sebuah tabel yang dimanfaatkan sebagai &lt;b&gt;audit log 
table &lt;/b&gt;yang di dalamnya terdapat beberapa informasi seperti : 
deleted_date_hour_minute,who_deleted,id_record_deleted,application. Berikut 
contoh script untuk membuat tabel-nya :&lt;br /&gt;&lt;b&gt;&lt;i&gt;use 
testingAudit&lt;br /&gt;go&lt;br /&gt;create table log_record&lt;br /&gt;(&lt;br /&gt;dateDeleted 
datetime,&lt;br /&gt;personWho varchar(30),&lt;br /&gt;Id_record 
varchar(10)&lt;br /&gt;)&lt;/i&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Setelah table log dibuat, tahap berikut-nya adalah membuat trigger on delete 
di dalam table &lt;b&gt;testDelete&lt;br /&gt;&lt;/b&gt;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 :&lt;br /&gt;-&amp;nbsp;&amp;nbsp; &lt;b&gt;inserted 
&lt;/b&gt;(muncul pada saat terjadi proses transaksi perintah 
&lt;b&gt;insert&lt;/b&gt; terhadap sebuah tabel)&lt;br /&gt;-&amp;nbsp;&amp;nbsp; 
&lt;b&gt;deleted&lt;/b&gt;&amp;nbsp;(muncul pada saat terjadi proses transaksi perintah 
&lt;b&gt;delete &lt;/b&gt;terhadap sebuah tabel)&lt;br /&gt;-&amp;nbsp;&amp;nbsp; Sedangkan untuk transaksi 
&lt;b&gt;Update , &lt;/b&gt;proses yang terjadi adalah &lt;b&gt;deleted 
&lt;/b&gt;yang pertama kali di kerjakan baru setelah itu 
&lt;b&gt;Inserted.&lt;/b&gt; 
&lt;p&gt;Gambaran script untuk pembuatan trigger-nya adalah sebagai berikut 
:&lt;br /&gt;&lt;b&gt;&lt;i&gt;create trigger tr_test on testdelete&lt;br /&gt;for 
delete&lt;br /&gt;as&lt;br /&gt;declare @date1 datetime,@person varchar(30) , @id 
varchar(10)&lt;br /&gt;set @date1 = getdate()&lt;br /&gt;set @person = suser_sname()&lt;br /&gt;select 
@id = id_record from deleted&lt;br /&gt;insert into log_record values 
(@date1,@person,@id)&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;Pastikan trigger tr_test sudah terdapat dalam tabel &lt;b&gt;testDelete, 
&lt;/b&gt;dengan menggunaan SSMS (SQL Server Management Studio).&lt;/li&gt;&lt;li&gt;Coba jalankan perintah delete terhadap 1 record&amp;nbsp;di tabel 
&lt;b&gt;testDelete&lt;/b&gt; kemudian cek apakah &lt;b&gt;log_record 
&lt;/b&gt;table telah terisi siapa, kapan dan record mana yang terhapus.&lt;/li&gt;&lt;li&gt;Tolong dipastikan juga bahwa user yang authorized delete record di 
&lt;b&gt;testDelete &lt;/b&gt;bisa melakukan perintah insert di table 
&lt;b&gt;log_record&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Selamat mencoba.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Feel free your comment,&lt;/p&gt;
&lt;p&gt;Sony&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post: &lt;/strong&gt;&lt;a href="mailto:?body=Thought you might like this: http://geeks.netindonesia.net/blogs/sonyse/archive/2008/02/16/membuat-audit-delete-record-dengan-trigger-di-sql-2005.aspx&amp;amp;subject=Membuat Audit Delete Record dengan trigger di SQL 2005" target="_blank" title="Send via email"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Mail.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.facebook.com/sharer.php?u=http://geeks.netindonesia.net/blogs/sonyse/archive/2008/02/16/membuat-audit-delete-record-dengan-trigger-di-sql-2005.aspx&amp;amp;t=Membuat+Audit+Delete+Record+dengan+trigger+di+SQL+2005" target="_blank" title="Submit Membuat Audit Delete Record dengan trigger di SQL 2005 to DotNetKicks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Facebook.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://del.icio.us/post?url=http://geeks.netindonesia.net/blogs/sonyse/archive/2008/02/16/membuat-audit-delete-record-dengan-trigger-di-sql-2005.aspx&amp;amp;title=Membuat+Audit+Delete+Record+dengan+trigger+di+SQL+2005" target="_blank" title="Submit Membuat Audit Delete Record dengan trigger di SQL 2005 to del.icio.us"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Delicious.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="http://www.digg.com/submit?url=http://geeks.netindonesia.net/blogs/sonyse/archive/2008/02/16/membuat-audit-delete-record-dengan-trigger-di-sql-2005.aspx&amp;amp;phase=2" target="_blank" title="Submit Membuat Audit Delete Record dengan trigger di SQL 2005 to digg.com"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Digg.16.gif" border="0"&gt;&lt;/a&gt; | &lt;a href="https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;mkt=en-us&amp;amp;url=http://geeks.netindonesia.net/blogs/sonyse/archive/2008/02/16/membuat-audit-delete-record-dengan-trigger-di-sql-2005.aspx&amp;amp;title=Membuat+Audit+Delete+Record+dengan+trigger+di+SQL+2005" target="_blank" title="Add Membuat Audit Delete Record dengan trigger di SQL 2005 to Live Bookmarks"&gt;&lt;img src="http://geeks.netindonesia.net/Images/Share.Live.16.gif" border="0"&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://geeks.netindonesia.net/aggbug.aspx?PostID=39489" width="1" height="1"&gt;</description></item></channel></rss>