Using msgbox server control for developing sharepoint 2010 webpart

Didalam pengembangan sharepoint webpart hal yang kecil artinya tapi cukup memberikan pengaruh yang besar adalah penerapan message box / alert dalam form webpart yang akan kita buat. Bagi kalangan developer sharepoint 2010 itu cukup mengganggu dalam kenyamanan coding. Umumnya para developer menggunakan client scripting yang di inject ke dalam webpart form.

Setelah saya cari cara yang paling baik dalam penerapannya entah itu menggunakan client scripting manapun, akhirnya pilihan saya adalah menggunakan sebuah server control yang di share oleh teman kita dari china yaitu Ning Liao, Liang yang seperti yang bisa kalian lihat di sini : http://www.codeproject.com/KB/webforms/NingLiangSimpleControl.aspx di sini tersedia source server control yang dibuat masih menggunakan asp.net 1.1. Akan tetapi dengan sedikit modifikasi akhirnya komponen ini bisa saya jadikan component yang siap untuk dipasang di webpart manapun.

Berikut step by step-nya :

  1. Download source-nya dari : Download source of msgBox server control - 7 Kb
  2. Extract file zip-nya kemudian buka dari VS studio 2008 / VS 2010, biarkan proses konversi-nya berjalan.
  3. Tambahan key file *.snk dari project properties, tujuannya adalah untuk di daftarkan menjadi sebuah assembly yang bisa disimpan ke dalam GAC (Global Assemby Cache).
    image
  4. Setelah itu di build ulang oleh visual studio dengan mode release.
  5. Untuk menambahkan kedalam c:\windows\assembly saya sarankan gunakan tools gacutil yang terdapat dalam visual studio 2010 tools command prompt.image
  6. Setelah proses berhasil, selanjutnya kita coba membuat visual webpart dengan visual studio 2010.
  7. Buka visual studio 2010, buat proyek baru menggunakan template visual webpart.
  8. Dari bagian toolbox-nya visual studio 2010 tambahkan assembly msgBox, browse ke lokasi di : C:\Windows\assembly\GAC_MSIL\msgBox
    image
  9. Tambahkan 1 msgbox control kedalam body message manapun di webpart form kita, contoh-nya akan seperti ini :
    image
  10. Berikut-nya adalah kita modifikasi code dibelakang-nya, yang pertama harus dilakukan adalah menambahkan beberapa baris di dalam page_load dari webpart, seperti ini :
    Code Snippet – HTML ascx code
    1. <%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
    2. <%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
    3. <%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
    4. <%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
    5. <%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
    6. <%@ Import Namespace="Microsoft.SharePoint" %>
    7. <%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
    8. <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="testMsgBoxUserControl.ascx.cs" Inherits="testMsgBox.testMsgBox.testMsgBoxUserControl" %>
    9. <%@ Register assembly="msgBox, Version=1.0.4192.19499, Culture=neutral, PublicKeyToken=d7d8884f1b19ea9e" namespace="BunnyBear" tagprefix="cc1" %>
    10.  
    11. <cc1:msgBox ID="msgBox1" runat="server" />
    12. <p>
    13.     <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
    14.     <asp:TextBox ID="TextBox1" runat="server" style="margin-bottom: 0px"></asp:TextBox>
    15. </p>


    Code Snippet
    1. using System;
    2. using System.Web.UI;
    3. using System.Web.UI.WebControls;
    4. using System.Web.UI.WebControls.WebParts;
    5. using System.Web.UI.HtmlControls;
    6. using BunnyBear;
    7.  
    8.  
    9. namespace testMsgBox.testMsgBox
    10. {
    11.     public partial class testMsgBoxUserControl : UserControl
    12.     {
    13.         protected void Page_Load(object sender, EventArgs e)
    14.         {
    15.             //PLEASE COPY THE FOLLOWING CODE TO YOUR Page_Load() WHEN USING THE SERVER CONTROL in your page
    16.             if (IsPostBack)
    17.             {
    18.                 if (Request.Form["hid_f"] == "1")
    19.                 {
    20.                     Request.Form["hid_f"].Replace("1", "0");   //Reset the hidden field back to original value "0"
    21.  
    22.                     //Here put your continuing processing code after user confirm
    23.                     msgBox1.alert("hello " + TextBox1.Text);
    24.                 }
    25.            
    26.             }
    27.             //END OF CODE TO BE COPIED
    28.  
    29.         }
    30.  
    31.         protected void Button1_Click(object sender, EventArgs e)
    32.         {
    33.             if (TextBox1.Text == null || TextBox1.Text == "")
    34.                 msgBox1.alert("Please input something in the text box.");
    35.             else
    36.                 msgBox1.confirm("Hello " + TextBox1.Text + "! do you want to continue?", "hid_f");
    37.  
    38.         }
    39.     }
    40. }
  11. Setelah selesai, compile dan deploy kembali ke dalam sharepoint dan di test

Selamat mencoba.

Share this post: | | | |

Using SPMetal for retrieving Sharepoint list

SPMetal merupakan sebuah utility yang bisa dimanfaatkan oleh Linq for sharepoint untuk mengambil sebuah item di Sharepoint list.

Skenario :

Tampilan di dalam announcements ketika di klik link-nya akan berwujud tampilan standard, kita ingin membuat tampilan news di dalam sharepoint announcements menjadi bagian dari sebuah application page di dalam sharepoint. Di dalam sample ini saya akan menggunakan sebuah sharepoint site yang sudah ada yaitu http://sony-pc/test

  1. Buat project baru dengan menggunakan template Empty Sharepoint Project. Kemudian pilih farm solution.
    image
  2. Tambahan new item Application page di dalam project.
    image
  3. Di dalam application page yang baru sisipkan di dalam placeHolderMain content place holder yang sebuah literal object.
    image
  4. Masuk ke visual studio command prompt , jalankan perintah SPMetal dengan menggunakan command seperti ini :
    SPMetal /web:http://sony-pc/test  /code:entities.cs
  5. Tambahkan library references Microsoft.Sharepoint.Linq dari “C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI” hingga muncul seperti ini :
    image
    image
  6. Di dalam page load event page yang baru sisipkan code seperti ini :

    string id = Request.QueryString["id"];

    using (EntitiesDataContext dc = new EntitiesDataContext("http://sony-pc/test"))
    {
        var q = from Announcement in dc.Announcements
                where Announcement.Id == int.Parse(id)
                select new { Announcement.Title, Announcement.Body };

        foreach(var a in q)
        {
            Literal1.Text = a.Body;                   
        }
    }

  7. Build serta deploy page
  8. Kemudian akses dari browser ke page yang baru dengan lokasi :http://sony-pc/Test/_layouts/feature_sp/newspage.aspx?id=3601
  9. ID 3601 merupakan id dari item announcements yang mau di akses.
  10. Maka akan muncul sebuah page dari news yang kita tambahkan seperti ini :
    image
  11. Ketika berubah-ubah master page, tetap tidak akan berubah tampilan dari application page-nya.
  • Share this post: | | | |

    Change Classic Mode Authentication to Claim Based Authentication Sharepoint 2010

    Terkadang dalam proses pengembangan aplikasi di sharepoint 2010 kita sudah berjalan proses-nya ternyata kita membutuhkan perubahan konsep authentication-nya menjadi claim based authentication. Semestinya proses pembuatan authentication-nya harus dilakukan di awal pembuatan web application di port tertentu. Seperti gambar berikut :

    image

    Kalau sudah terlanjur membuat authentication-nya menjadi classic mode authentication dari management tools-nya sharepoint tidak terdapat cara untuk merubah-nya. Untungnya di sharepoint 2010 tersedia Power Shell yang dapat kita pergunakan untuk melakukan perubahannya.

    image

    Dari start up menu pilih Microsoft Sharepoint 2010 products, kemudian cari icon sharepoint 2010 management shell, selanjutnya akan terbuka seperti ini :

    image 

    setiap baris diketik seperti cara di atas jangan lupa mengganti baris pertama-nya dengan alamat url dari web application yang ingin kita rubah.

    Kalau proses di atas sudah dilakukan maka untuk melihat hasilnya dilakukan dengan cek ke web application yang sudah dirubah kemudian dari ribbon menu sharepoint pilih authentication providers menu.

    image

    Hasilnya akan menjadi seperti ini.

    image

    Sampai disini proses selesai. Semoga berguna.

    Share this post: | | | |
    Posted by Sony Setiawan with no comments

    [Report] Workshop Sharepoint Foundation 2010

    Tadi malam mugi jadetabek dan mugi priangan mengadakan kegiatan kopdar sekalian training tentang Sharepoint Foundation 2010. Peserta yang datang kurang lebih ada 12 orang. Sayang-nya waktu-nya kurang cukup lama sehingga proses instalasi-nya SPF 2010-nya tidak selesai, akan tetapi melihat antusiasme peserta terhadap pelaksanaan kegiatan ini sangat tinggi, saya berjanji kepada seluruh peserta mudah-mudahan kita persiapkan environment-nya lebih baik dari yang sebelumnya.

    Beberapa konten materi yang saya bawakan :

    - Introduction Sharepoint 2010

    - Biggest changes in sharepoint 2010

    - Installation Sharepoint Foundation 2010

    - Create simple Webpart using Visual Studio 2010

     

    IMG00101-20101208-1955

    Terlihat ada yang sampai dibawah karena gak kebagian tempat duduk.

    Secepatnya kita akan kembali mengadakan pelatihan lagi tentang sharepoint 2010 ini, mungkin dengan pembicara yang lain seperti agusto , lutfie.

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

    Konfigurasi VseWSS 1.3 untuk Pembuatan Web Part– Error “The HTTP request is unauthorized with client authentication scheme 'Negotiate'. The authentication header received from the server was 'NTLM'”.

    Walaupun sudah ada sharepoint 2010 saat ini tapi ternyata masih banyak client yang menggunakan sharepoint 2007, biasanya sharepoint 2007 di install di mesin server 32 bit akan tetapi kalau kita ingin membuat web part di sharepoint dengan menggunakan server 2008 R2 yang jelas-jelas harus 64 bit, ternyata ada sedikit masalah yaitu berkaitan dengan development tools di visual studio 2008 yang harus menggunakan VS 2008 Sharepoint Extensions VseWSS v1.3. Ternyata konfigurasi-nya tidak terlalu mudah tidak seperti versi sebelumnya.

    Jika kita membuat web part project yang standard saja dengan menggunakan extensions tersebut akan muncul error seperti di judul blog ini. Permasalahan ini terjadi karena di dalam VseWSS 1.3 saat ini menggunakan sebuah web services yang membuat sebuah Virtual WebSite baru di dalam IIS ver 6 / ver 7.5. Yang harus kita lakukan adalah melakukan instalasi ulang VseWSS dengan membuat application pool baru menggunakan nama VseWSS. Akan tetapi masalah itu belum selesai juga karena masih muncul error tersebut, setelah sekian lama mencoba berbagai macam cara akhirnya ketemu cara-nya yaitu dengan menambahkan provider Authentication-nya ditambahkan “Negotiate”. Cara untuk menambahkannya sebagai berikut :

    Mengubah authentication header-nya menggunakan IIS :

    image

    Klik providers

    image

    Pilih Negotiate dan klik Add.

    Kemudian IISReset

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

    Trouble Shooting Insufficient SQL database permissions for user '' event id 5214 in Sharepoint 2007

    Satu hari ini saya mengalami pengalaman baru ketika menghadapi error di sharepoint central admin sharepoint 2007.  Pada saat saya masuk ke sharepoint central admin error yang terjadi adalah tidak bisa masuk ke operations management, application management dan juga shared services provider. Saya cek ke event viewer ternyata terjadi error di SQL database permission for user ‘’ event id 5214. Saya cek ke dalam database semua sudah benar semua cuman yang jadi masalah adalah user ‘’ (empty string) itu dianggap tidak ada. Berarti konfigurasi services account untuk Sharepoint farm seperti kehilangan identitas siapa yang harus menjalankan application pool-nya.

    Saya ingat pernah menggunakan perintah stsadm yang melakukan update farm account untuk sharepoint 2007, akhirnya saya menemukan sebuah perintah stsadm yang bisa meng-update kembali siapa yang memegang kendali di services account-nya sharepoint 2007.

    Berikut yang saya lakukan :

    1. Pastikan di dalam SQL tempat configdb dan content database schema untuk services account yang kita gunakan dalam setting farm account-nya sharepoint menggunakan dbo schema.
    2. Lakukan perintah :

    STSADM –o Updatefarmcredentials –userlogin <namadomain>\<user service account> –password <password>

        3.   IISReset dari command prompt.

    Voila sekarang sharepoint central admin bisa dipergunakan kembali.

     

    regards,

     

    Sony

    Share this post: | | | |

    Office Web Apps dalam Sharepoint 2010

    Jika perusahaan anda tempat bekerja ingin memaksimalkan penggunaan Sharepoint 2010 dalam aktifitas sehari-sehari  untuk penggunaan aplikasi office word, excel dan powerpoint. Ada solusi yang ditawarkan oleh sharepoint 2010 sebagai tambahan yaitu Office Web apps, akan tetapi yang namanya versi web jangan mengharapkan semua keunggulan desktop application standard ada disini, tentunya ini terkait masalah performance dari aplikasi berbasis web ini.

    Dalam implementasi-nya aplikasi office web apps ini bisa menggantikan fungsi-fungsi standar aplikasi client office 2010. Dalam kesempata kali ini saya akan mencoba memperlihatkan penggunaan yang standar dari office web word application.

    image 

    Pertama kita lihat layout tampilan sharepoint yang sudah terinstall Office Web Apps, sepintas tidak terlihat perbedaan sama sekali. Mari kita lihat lebih dalam lagi. Saya akan upload sebuah dokumen yang sudah dibuat dari Microsoft word 2010

    1. Klik Shared Document di pane sebelah kiri.

    2. Klik tombol add document

    image

    3. cari dokumen yang akan di upload dengan tombol browse kemudian klik ok.

    4. Kalau proses upload berhasil akan masuk ke dalam shared document

    5. Sorot document yang sudah masuk tadi hingga muncul context menu seperti gambar berikut

    image

    maka akan terlihat menu view in browser, klik hingga terbuka sebuah tampilan office web apps ini.

    image

    terlihat menu seperti layaknya aplikasi office standard, akan tetapi menu-nya tidak sebanyak aplikasi office standard.

    Semua fungsi editing standard sampai save file , save as ada semua dan perhitungan kalkulasi bisa berjalan lancar.

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

    Poster Technical Diagram Sharepoint 2010

    Untuk mempermudah pembelajaran terkait dengan sharepoint 2010, berikut link poster diagram yang terkait dengan MOSS 2010 untuk mempermudah kita memahami teknologi ini.

    http://technet.microsoft.com/en-us/library/cc263199.aspx

    Bisa dilihat dalam beberapa versi document : visio, pdf, xps.

    SharePoint 2010 Products Deployment

    Services in SharePoint - 1 of 2

    dan masih banyak yang lainnya.

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

    Manage Account di Sharepoint 2010

    Di MOSS 2007 apabila kita membuat services account untuk sebuah web application akan menjalankan sebuah application pooling yang aktif di web server-nya dalam hal ini IIS. Akan tetapi ketika kita menggunakan services account ini berkali-kali dalam application yang berbeda atau beberapa proses instalasi yang lain dan ada policy di organisasi yang  mengharuskan untuk mengganti password-nya secara reguler, maka kita harus mengubah kembali user id dan password dari setiap penggunaan services account di tempat-tempat tadi. Hal itu bisa sangat menggangu sisi administrasi oleh karena itu di Sharepoint 2010 memperkenalkan apa yag disebut Manage Account.

    Berikut beberapa cara untuk melakukan setup manage account.

    1. Masuk ke Sharepoint 2010 central admin , kemudian klik security

    image 

         2.  Di bagian general security klik configure managed account

         3.  Klik Register Managed Account

     image

         4.   Masukkan user name dan password domain yang ingin teregistrasi kedalam managed account , isi password.

         5.   Setelah teregistrasi baru kita menjalankan beberapa proses, schedule change password, password berikut-nya apa

     

    regards,

     

    Sony

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

    Installing Sharepoint 2010 RTM in Windows 7 (only x64 bit) - sony

    Di dalam tulisan yang saya buat sebelumnya disini tentang instalasi Sharepoint 2010 beta version di windows 7 64 bit. Ternyata  kita tidak bisa langsung install menggunakan metode yang sama walaupun dengan mesin yang sama dengan sebelumnya. Berikut beberapa hasil pengalaman saya yang dapatkan :

    1. Uninstall server sharepoint yang lama
    2. Install dengan cara yang sama dengan sebelumnya
    3. Install beberapa tools tambahan :
      • Windows Identity Foundation install dari sini
      • Microsoft Chart Control for MS .Net Framework 3.5 dari sini
    4. Install SQL 2008 R2 CTP Nov 2009 Edition :disini

    Belajar dari pengalaman sebelumnya, saya tidak meng-install beberapa services standard untuk sebuah site karena belum tentu terpakai semuanya.

    Share this post: | | | |

    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 3 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 2 comment(s)