Pengenalan BPMN

Analisa Proses Bisnis Menggunakan BPMN, Analysis and Design Business Process

BPMN merupakan kepanjangan dari Business Process Model and Notation, yaitu sebuah standar untuk menggambarkan proses bisnis yang dikeluarkan oleh Open Management Group (omg.org). Mengingat BPMN sudah diakui sebagai standar kelas dunia, maka mau tidak mau, kita tidak boleh tertinggal, minimal mempelari dari hal-hal yang mendasar dahulu, seperti BPMN fundamental. Karena spesifikasi tentang BPMN salah satunya berhubungan dengan diagram, maka pendekatan yang relatif mudah untuk mempelajari BPMN adalah dengan mengenal notasi dasar. Pengenalan BPMN fundamental akan dibahas lebih detail di artikel terpisah tentang Dasar-dasar BPMN.

(more…)

Mengisi ComboBox Dengan Data Dari Database

Mengisi ComboBox Dengan Data Dari Database VB.net C#

Belajar Programming | Salah satu hal yang amat sangat umum dalam membuat sebuah aplikasi VB.net atau C# adalah mengisi ComboBox dengan berdasarkan data yang ada di database. Sebenarnya hal ini sangat simple namun bagi para programmer bisa jadi merupakan hal yang sangat sulit 🙂 Cara yang paling mudah adalah dengan menggunakan metoda data-binding sehingga kita bisa menghilangkan dan menghapus code iterasi yang melelahkan saat mengisi data ke combobox bersangkutan. Langkah-langkah atau algoritma dasarnya adalah sebagai berikut:

  • Siapkan koneksi database
  • Siapkan perintah SQL
  • Siapkan variable penampung data (bisa DataTable atau DataSet)
  • Ambil data dari database, masukkan ke DataTable
  • Binding data di DataTable ke ComboBox

Algortima yang sederhana di atas ketika kita terjemahkan ke dalam VB.net akan seperti ini,

Imports System.Data
Imports System.Data.SqlClient

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        InitializeComboBox()
    End Sub

    Private Sub InitializeComboBox()
        ' siapkan koneksi database
        Dim cn As New SqlConnection(My.Settings.LocalDatabase)
        ' siapkan data adapter untuk data retrieval
        Dim da As New SqlDataAdapter("select account_id, description from acc_accounts", cn)
        ' siapkan datatable untuk menampung data dari database
        Dim dt As New DataTable
        ' enclose in try-catch block
        ' untuk menghindari crash jika terjadi kesalahan database
        Try
            ' ambil data dari database
            da.Fill(dt)
            ' bind data ke combobox
            ComboBox1.DataSource = dt
            ComboBox1.ValueMember = "account_id"
            ComboBox1.DisplayMember = "description"
            ' DONE!!!
        Catch ex As Exception
            ' tampilkan pesan error
            MessageBox.Show(ex.Message)
        End Try
    End Sub

End Class

Sedangkan jika kita terjemahkan ke dalam C# akan menjadi seperti ini,

using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace ComboBoxSample2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            InitializeComboBox();
        }

        private void InitializeComboBox()
        {
            // siapkan koneksi database
            SqlConnection cn = new SqlConnection(ComboBoxSample2.Properties.Settings.Default.LocalDatabase);
            // siapkan data adapter untuk data retrieval
            SqlDataAdapter da = new SqlDataAdapter("select account_id, description from acc_accounts", cn);
            // siapkan datatable untuk menampung data dari database
            DataTable dt = new DataTable();
            // enclose in try-catch block
            // untuk menghindari crash jika terjadi kesalahan database
            try
            {
                // ambil data dari database
                da.Fill(dt);
                // bind data ke combobox
                ComboBox1.DataSource = dt;
                ComboBox1.ValueMember = "account_id";
                ComboBox1.DisplayMember = "description";
                // DONE!!!
            }
            catch (Exception ex)
            {
                // tampilkan pesan error
                MessageBox.Show(ex.Message);
            }
        }
    }
}

Jika data yang ada di database seperti ini,

Mengisi ComboBox Dengan Data Dari Database VB.net c#

Maka tampilan aplikasinya jadi seperti ini,

Mengisi ComboBox Dengan Data Dari Database VB.net c#

Semoga berguna…. Happy Coding 

 

^_^

Pengenalan Drupal

Pengenalan Drupal Content Management Framework

Pengenalan Drupal | Artikel ini akan membantu teman-teman mengenal lebih jauh tentang Drupal, terutama Drupal 7. Makhluk apa sih Drupal? Termasuk apakah sih Drupal itu, CMS atau Framework? Bagaimana Drupal bekerja dan komponen apa saja yang ada di dalamnya.

Tak lupa juga kita akan membahas teknologi apa saja yang diperlukan untuk menjalankan Drupal, serta sejumlah terminologi dasar yang harus dipahami, seperti node, entity, hook, block dan theme. Semoga artikel ini dapat menjawab semua pertanyaan tersebut.

 

Update 2013-12-20: Penambahan penjelasan tentang konsep Entity, Entity Type dan Bundle

Makanan Apa Sih Drupal?

Drupal bisa kita gunakan untuk membangun sebuah website, tapi…. kan ada WordPress, Joomla, Zikula, dan lain-lain, apa bedanya? Drupal adalah Content Management Framework (CMF) yang bersifat open source dan  menekankan pada kolaborasi antar developernya. Drupal sangat modular, sangat mudah dikembangkan, dan seperti halnya sebuah framework, dia memiliki standar yang harus kita ikuti. Dalam paket instalasi Drupal sudah ada beberapa core module yang mencakup fungsionalitas utama sebagai sebuah Content Management System (CMS), namun fungsionalitas tersebut dapat dengan mudah kita tambahkan dengan mengaktifkan built-in module yang ada atau mengaktifkan contributed module lainnya. Drupal di-desain agar mudah untuk melakukan kustomisasi, namun kustomisasi tersebut dilakukan dengan cara membuat module baru yang menambah atau menghilangkan fungsionalitas standar yang ada, bukan dengan memodifikasi core module.

Dengan kemudahan melakukan kustomisasi Drupal, kita bisa membangun bermacam-macam website seperti portal internet, portal berita, website personal, departemen, korporat sampai kenegaraan. Kita juga bisa membangun aplikasi e-commerce, social networking, dan image gallery menggunakan Drupal. Jadi bisa dikatakan, segalam macam jenis website bisa kita bangun menggunakan Drupal…. keren kan?

Drupal juga memiliki tim khusus yang didedikasikan untuk memastikan tingkat security selalu pada level tertinggi, dengan cara menanalisa laporan keamanan dari para penggunanya dan meluncurkan update secara berkala, dan sampai artikel ini dibuat, Drupal sudah mencapai versi 7.24. Sebuah organisasi nirlaba bernama Drupal Associations didirikan untuk selalu mengembangkan situs resmi Drupal dan komunitasnya di http://drupal.org dan http://groups.drupal.org. Karena dukungan luas inilah Drupal punya tagline "Come for the software, stay for the community"

Teknologi Pendukung

Drupal juga di-desain agar dapat berjalan di server hosting dengan harga yang terjangkau, namun tetap mampu dikembangkan menjadi situs besar, terdistribusi dengan dukungan sistem dan teknologi terbaru. Drupal dibangun menggunakan bahasa PHP dan keseluruhan code di dalamnya mengikuti standar yang ketat (http://drupal.org/node/318). Dengan menggunakan bahasa PHP yang sangat umum ini, maka developer pemula akan dengan mudah mempelajarinya. Untuk Drupal 7 minimal versi PHP yang dibutuhkan adalah versi 5.2.

Drupal dapat berjalan di semua RDBMS populer seperti MySQL, PostgreSQL, SQLite, Oracle, Microsoft SQL Server, dan RDBMS lain yang mendukung PDO. Drupal 7 berbeda dengan Drupal 6 dalam pengakses database karena adanya Database Abstraction Layer yang dibuat ulang khusus untuk Drupal 7 dan sangat mempermudah para programmer mengakses database dari Drupal.

Drupal juga dapat berjalan di atas sejumlah web server populer seperti Apache, IIS dan nginx. serta mendukung Clean URL sehingga sangat mempermudah proses optimasi SEO. Dan otomatis drupal bisa berjalan di Operating System apapun selama menggunakan webserver yang tersebut tadi.

Core

Sebuah framework yang ringan merupakan inti dari Drupal. Core framework inilah yang memberikan fungsionlitas utama untuk membangun sebuah website yang hebat. Core framework ini meliputi sejumlah module dan sebuah library agar Drupal dapat melayani request yang dikirimkan pengguna. Core module meliputi user management, basic content management, templating, dan beberapa lainnya seperti terlihat dalam gambar.

Drupal 7 Core Modules Pojok Programmer Drupal Training

Antarmuka Administrasi

Antarmuka untuk proses administrasi website di Drupal sangat terintegrasi dengan keseluruhan website, artinya Drupal tidak memberikan antarmuka terpisah untuk administrasi seperti halnya dilakukan oleh CMS lain. Drupal menyediakan toolbar khusus jika kita login sebagai admin. Jadi bagi yang sudah terbiasa dengan WordPress dan Joomla biasanya di awal akan sedikit bingung melihat antarmuka administrasi Drupal 🙂

Modules

Drupal sangat sangat modular. Dan fungsionalitas tambahan diberikan dengan mengaktifkan atau menonaktifkan module yang ada. Jadi untuk website yang memerlukan fungsionalitas canggih cukup menambahkan contributed module yang luar biasa banyak, namun jika tidak diperlukan, silakan nonaktifkan module-module yang tidak diperlukan. 

Dengan menggunakan cutom module kita bisa menambahkan tipe konten baru, seperti Resep Masakan, Data Customer, Data Jamaah Umroh/Haji, Data Penerimaan Mahasiswa Baru dan sebagainya. Serta bisa juga kita menambahkan kemapuan baru misalkan, pengiriman email otomatis ketika ada orang yang mendaftar Umroh/Haji, dan sebagainya.

Drupal 7 All Contributed Modules Pojok Programmer Drupal Training

Dan yang selalu perlu diingat adalah, Drupal lebih menyarankan membuat module sendiri untuk menambahkan (atau mengurangi) fungsionalitas Drupal, karena jika kita melakukan hack ke core module atau contributed module yang ada, maka semua perubahan yang kita lakukan akan hilang pada proses update security berikutnya.

Hook

Hook bisa diibaratkan event internal Drupal. Bisa juga disebut sebagai callback, namun bukan benar-benar sebuah callback, karena tidak menggunakan listener pada umumnya, namun hook dibuat menggunakan konvensi penamaan fungsi saja. Dengan hook ini, module yang kita buat bisa "hook into" atau "menempel" ke segala sesuatu yang terjadi di internal Drupal.

Misalkan pada saat proses login, maka otomatis Drupal akan muncul event hook_user_login() maka otomatis yang mengimplementasikan hook_user_login() akan ikut dipanggil. sebagai contoh jika module comment mengimplementasikan comment_user_login() maka fungsi ini akan ikut dijalankan ketika proses login. Contoh lain adalah jika kita membuat module khusus bernama spammer untuk memblokir spamming, maka otomatis fungsi spammer_user_login() juga akan ikut dijalankan

Node

Seluruh konten yang ada di Drupal berbasis pada satu tipe, yaitu node. Apapun website yang sedang kita bangun, blog sederhana, kumpulan resep makanan, atau to-do list sebuah project, maka struktur data dasarnya tetap sama. Pendekatan seperti ini membuat Drupal sangat mudah dikembangkan. Developer dapat menambahkan fitur seperti rating, komentar, file attachment, informasi lokasi, dan lain-lain tanpa perlu melihat jenis kontennya. Administrator kemudian bisa meramu fungsionalitas berdasarkan jenis konten, misalkan komentar hanya bisa untuk blog, tapi resep tidak. Atau attachment hanya bisa untuk to-do list, dan seterusnya.

Node juga memiliki beberapa behavior standar dan berlaku juga untuk jenis konten turunannya, misalkan bisa melakukan publish dan unpublish, promote dan unpromote node ke halaman muka. Dan dengan behavior yang seragam ini, kita dapat melakukan proses batch di antarmuka adminitrasi website.

Field

Konten di Drupal terdiri dari kumpulan Field-Field. Judul dan isi sebuah node adalah field. Kita bisa menggunakan field untuk membuat jenis konten apapun yang terlintas di pikiran kita. Misalkan kita ingin membuat Meetup, maka field yang mungkin diperlukan antara lain, nama meetup, deskripsi meetup, tanggal meetup, jam mulai, jam selesai, lokasi, dan link untuk proses registrasi.

Kita bisa menggunakan antarmuka administrasi Drupal untuk memngelola jenis konten dan field-fieldnya, namun untuk para hardcore programmer, tersedia Field API untuk membuat jenis konten dan fieldnya menggunakan coding.

Entity Type

Konsep Entity adalah hal baru di Drupal 7. Pada versi-versi sebelumnya Field – melalui module CCK (Content Construcyion Kit)  – hanya bisa digunakan pada Node dan Content Type turunannya saja. Dengan tersedianya Entity API di Drupal 7, kita sekarang dapat menambahkan Field ke komentar, user profile dan taxonomy. Bisa dikatakan Entity Type ini adalah abstraksi kumpulan field-field. Abstraksi seperti ini membuat Drupal menjadi semakin fleksible. Entity Type standar bawaan Drupal 7 meliputi:
  • Nodes (content)
  • Comments
  • Taxonomy terms
  • User profiles

 

Bundle

Bundle adalah implementasi atau turunan dari Entity Type, atau bisa juga disebut sebagai subtype, contohnya kita bisa membuat bundle Blog Post, Recipe, Product sebagai turunan dari entity type Node. Dan seperti halnya entity type, kita juga bisa menambahkan field ke bundle. Namun perlu diperhatikan, tidak semua entity type punya subtype, sebagai contoh kita tidak bisa membuat bundle entity type User.

Entity

Jika Entity Type adalah abstraksi dari kumpulan field, maka Entity sendiri adalah instance dari Entity Type tertentu, seperti comment, taxonomy term atau user profile, or instance dari bundle seperti blog post, article, resep, atau product. Jika dianalogikan dengan konsep OOP, maka konsep Entity Drupal sangat mirip,

  • Entity type adalah base class
  • Bundle adalah inherited class, atau extended class.
  • Field adalah class property, atau variable.
  • Entity adalah instance dari base atau inherited class.

 

Theme

Ketika kita membuat sebuah web page, maka ada dua hal penting yang perlu diperhatikan, pertama adalah bagaimana kita mendapatkan data yang ingin ditampilkan, dan yang kedua adalah bagaimana kita menampilkan data yang sudah didapat tersebut. Drupal menggunakan PHP Template, namun kita bisa juga menggunakan templating engine lainnya, seperti Easy Template System (ETS), namun kebanyakan developer Drupal sudah merasa cukup dengan tempalting standar.

Ada 3 (tiga) cara untuk melakukan kustomisasi tampilan Drupal (atau themeing) antara lain,

  • Membuat CSS tambahan untuk meng-override CSS standar Drupal
  • Membuat sendiri file-file template baru, cukup mudah karena hanya berisi code HTML dan sedikit kode PHP.
  • Dan untuk lebih jauhnya, kita juga bisa mengkustomisasi tampilan breadcrumb, menu, dll menggunakan fungsi buatan sendiri dan hook ke hook_theme()

 

Block

Block adalah bagian halaman yang bisa kita munculkan atau sembunyikan di lokasi tertentu dalam halaman web. Sebagai contoh block yaitu block yang menampilkan jumlah user yang aktif di website kita. Atau bisa juga block yang berisi daftar konten paling sering dilihat orang. Block umumnya ditempatkan di sidebar, header, atau footer dari halaman wab yang kita buat. dalam antarmuka administrasi, ada page khusus untuk mengelola block ini.

Seringkali, block digunakan untuk menampilkan sejumlah informasi yang khusus ditujukan untuk user yang sedang login pada saat itu, misalkan menampilkan link "My Account" yang ketika di-klik otomatis akan membuka halaman profile user tersebut.

Organisasi File

Pemahaman terhadap struktur folder Drupal akan sangat membantu kita mengetahui dimana Drupal menyimpan file seperti module, theme, dan lain-lain. instalasi standar Drupal akan memberikan struktur seperti gambar di bawah ini.

Pengenalan Drupal 7 File Layout BiruniLabs

Folder yang cukup penting dan akan sering kita akses adalah

  • Folder sites, digunakan untuk menyimpan file themes, modules, settings tambahan diluar file standar Drupal.
  • Folder sites/default, berisikan setting website, seperti konfigurasi akses database dan sebagainya
  • Folder sites/default/files, berisikan file-file yang kita upload melalui halaman administrasi Drupal
  • Folder sites/all/modules, adalah tempat kita mengunggah contributed modules, dan custom module buatan kita sendiri.
  • Folder sites/default/themes, adalah tempat kita mengunggah contributed themes, dan custom theme buatan kita sendiri
  • Folder sites/default/libraries, adalah tempat kita mengunggah library tambahan seperti jQuery, CKEditor, dan sebagainya.

 

Simpulan

Mudah-mudahan artikel ini bisa membantu memahami apa itu Drupal, dan bagaimana Drupal bekerja secara umum. Detail masing-masing konsep yang dijabarkan di atas akan dibahas dalam artikel selanjutnya.

Cheers…

Belajar SQL: Query Sederhana Menghitung Status Dinamis

Belajar SQL: Query Sederhana untuk Field Status Dinamis

Belajar SQL: | Kadangkala kita memerlukan sebuah field berubah nilainya seiring waktu berjalan. sebagai contoh kasus adalah untuk mengetahui apakah garansi suatu barang masih berlaku atau tidak. Salah satu caranya adalah dengan menyediakan field "status" untuk menyimpan nilai berlaku atau habis untuk mengetahui status garansi bersangkutan. Cara ini punya kerumitan karena kita perlu mengubah isinya. Maka, alih-alih menyimpan data status garansi dalam sebuah field khusus, maka akan lebih mudah jika kita cukup menyimpan akhir masa garansi dan menentukan status garansi menggunakan query. Metode ini dinamakan juga sebagai Computed Field.

Penggunaan Computed Field seperti ini akan jauh lebih mudah dan jauh lebih fleksible karena hasil query akan berubah sesuai perubahan hari. Silahkan pelajari langkah-langkah berikut ini untuk membangun query status garansi tersebut.

mysql> use test ;
Database changed
 
mysql> -- --------------------------------------
mysql> -- create table contoh
mysql> -- --------------------------------------
mysql> create table garansi (
    ->   id int auto_increment primary key,
    ->   awal_garansi date null,
    ->   akhir_garansi date null
    -> ) ;
Query OK, 0 rows affected (0.11 sec)
 
mysql> -- --------------------------------------
mysql> -- insert sample data
mysql> -- --------------------------------------
mysql> insert into
    -> garansi (awal_garansi, akhir_garansi)
    -> values ('2010-07-17', '2013-07-16')
    ->      , ('2011-09-24', '2014-09-23')
    ->      , ('2010-10-14', '2013-10-23')
    ->      , ('2012-01-14', '2015-01-23')
    -> ;
Query OK, 4 rows affected (0.05 sec)
Records: 4  Duplicates: 0  Warnings: 0
 
mysql> -- --------------------------------------
mysql> -- lihat isi sample data
mysql> -- --------------------------------------
mysql> select * from garansi ;
+----+--------------+---------------+
| id | awal_garansi | akhir_garansi |
+----+--------------+---------------+
|  1 | 2010-07-17   | 2013-07-16    |
|  2 | 2011-09-24   | 2014-09-23    |
|  3 | 2010-10-14   | 2013-10-23    |
|  4 | 2012-01-14   | 2015-01-23    |
+----+--------------+---------------+
4 rows in set (0.00 sec)
 
mysql> -- --------------------------------------
mysql> -- lakukan query
mysql> -- - tampilkan tanggal hari ini
mysql> -- - hitung selisih tanggal hari ini dengan akhir garansi
mysql> -- - dengan logika percabangan, 
mysql> --   => jika selisih positif artinya garansi sudah habis, 
mysql> --   => sebaliknya jika minus, maka garansi masih berlaku
mysql> -- --------------------------------------
mysql> select garansi.*
    -> , current_date tanggal
    -> , datediff(current_date,akhir_garansi) selisih
    -> , case
    ->   when datediff(current_date,akhir_garansi)>0
    ->        then 'habis'
    ->   else 'aktif' end status
    -> from garansi ;
+----+--------------+---------------+------------+---------+--------+
| id | awal_garansi | akhir_garansi | tanggal    | selisih | status |
+----+--------------+---------------+------------+---------+--------+
|  1 | 2010-07-17   | 2013-07-16    | 2013-12-17 |     154 | habis  |
|  2 | 2011-09-24   | 2014-09-23    | 2013-12-17 |    -280 | aktif  |
|  3 | 2010-10-14   | 2013-10-23    | 2013-12-17 |      55 | habis  |
|  4 | 2012-01-14   | 2015-01-23    | 2013-12-17 |    -402 | aktif  |
+----+--------------+---------------+------------+---------+--------+
4 rows in set (0.00 sec)
 
mysql> -- --------------------------------------
mysql> -- YAAAYYY !!! BERHASIL !!!
mysql> -- Silakan gunakan query terakhir dalam program php Anda
mysql> -- --------------------------------------

Walaupun contoh di atas menggunakan database MySQL, namun SQL yang ada bisa juga diterapkan di database lain seperti database PostgreSQL.

Semoga berguna………… (y)

 

Tutorial: Membuat Laporan Sederhana Menggunakan Crystal Report di Visual Studio 2010

Tutorial Membuat Laporan Sederhana Menggunakan Crystal Report di Visual Studio 2010

Membuat Laporan Crystal Report | Kemampuan aplikasi untuk membuat sebuah laporan yang bisa dicetak ke printer adalah hal umum yang harus bisa dilakukan sebuah aplikasi desktop. Untuk itu skill ini amat sangat diperlukan oleh seorang programmer pengembang aplikasi desktop. Tutorial ini mencoba memberikan arahan langkah demi langkah cara menggunakan vb.net untuk membuat sebuah laporan crystal report sederhana namun professional menggunakan Push Method, artinya proses pengambilan data dari database dilakukan di luar Crystal Report , namun menggunakan DataSet, dan setelah data siap, Data Set bersangkutan di-Push ke Crystal Report. Studi kasus berupa Laporan Purchase Order. Aplikasi ini dibuat menggunakan C# karena dengan menguasai C# kita lebih mudah untuk migrasi ke bahasa lain seperti Java. Namun jika kita ingin membuatnya dalam bahasa lain, seperti VB.net, itu adalah hal yang sangat mudah karena coding dalam aplikasi ini hanya beberapa baris saja.

Beberapa hal lain yang perlu diperhatikan antara lain, tutorial ini tidak membahas cara menjalankan Visual Studio, cara membuat Project baru, cara menambah Form atau DataSet baru, cara membuka Server Explorer dan sebangsanya. Ane berasumsi agan semua sudah mengetahui cara-caranya. Tutorial ini juga tidak membahas cara menyimpan data master detail ke dalam database, karena concern kita saat ini hanyalah manmpilkan data yang sudah ada dalam database menggunakan crystal report. Database yang digunakan adalah SQL Server Compact Database. Tutorial ini juga tidak membahas cara membuat database baru, cara koneksi database di .NET, cara design database yang baik dan lain sebagainya. Ane berasumsi agan semua sudah mengetahui cara-caranya.

 

Membuat Project dan DataSet

Buat project baru dan Siapkan database, untuk tutorial ini ane pakai Local Database (dbSample.sdf). Note: cara membuat project baru dan design database atau menggunakan database lain tidak dibahas di sini.

[collapsed title=Desain Database] [/collapse]

Tambahkan DataSet baru, beri nama dsSample.xsd, setelah itu buka Database menggunakan Server Explorer. Lakukanlah drag dan drop table yang ada di Database Explorer ke atas dataset designer dsSample.xsd menjadi seperti yang ada di gambar.

[collapsed title=Desain Datasat Setelah Proses Drag-Drop] [/collapse]

Buat custom query untuk mengambil data Companies berdasarkan CompanyID, beri nama method Fill dengan FillByCustomerID dan method Return DataTable dengan GetDataByCompanyID. Note: Perhatikan step pembuatannya di gambar.

[collapsed title=Custom query untuk table Companies]

[collapsed title=Langkah ke-1] [/collapse]
[collapsed title=Langkah ke-2] [/collapse]
[collapsed title=Langkah ke-3] [/collapse]
[collapsed title=Langkah ke-4] [/collapse]
[collapsed title=Langkah ke-5] [/collapse]
[collapsed title=Langkah ke-6] [/collapse]

[/collapse]

Buat custom query untuk mengambil data Orders berdasarkan OrderID, beri nama method Fill dengan FillByOrderID dan method Return DataTable dengan GetDataByOrderID. Note: Perhatikan step pembuatannya di gambar.

[collapsed title=Custom query untuk table Orders]

[collapsed title=Langkah ke-1] [/collapse]
[collapsed title=Langkah ke-2] [/collapse]
[collapsed title=Langkah ke-3] [/collapse]
[collapsed title=Langkah ke-4] [/collapse]
[collapsed title=Langkah ke-5] [/collapse]
[collapsed title=Langkah ke-6] [/collapse]

[/collapse]

Buat custom query untuk mengambil data OrderDetails berdasarkan OrderID, beri nama method Fill dengan FillByOrderID dan method Return DataTable dengan GetDataByOrderID. Note: Perhatikan step pembuatannya di gambar.

[collapsed title=Custom query untuk table OrderDetails]

[collapsed title=Langkah ke-1] [/collapse]
[collapsed title=Langkah ke-2] [/collapse]
[collapsed title=Langkah ke-3] [/collapse]
[collapsed title=Langkah ke-4] [/collapse]
[collapsed title=Langkah ke-5] [/collapse]
[collapsed title=Langkah ke-6] [/collapse]

[/collapse]

Buat custom query untuk mengambil data Items berdasarkan OrderID, beri nama method Fill dengan FillByOrderID dan method Return DataTable dengan GetDataByOrderID. Note: Perhatikan step pembuatannya di gambar.

[collapsed title=Custom query untuk table Orders]

[collapsed title=Langkah ke-1] [/collapse]
[collapsed title=Langkah ke-2] [/collapse]
[collapsed title=Langkah ke-3] [/collapse]
[collapsed title=Langkah ke-4] [/collapse]
[collapsed title=Langkah ke-5] [/collapse]
[collapsed title=Langkah ke-6] [/collapse]

[/collapse]

Buat custom query untuk mengambil list Orders yang terdenormalisasi, beri nama method Fill dengan FillList dan method Return DataTable dengan GetDataList. Note: Perhatikan step pembuatannya di gambar.

[collapsed title=Custom query untuk List Orders]

[collapsed title=Langkah ke-1] [/collapse]
[collapsed title=Langkah ke-2] [/collapse]
[collapsed title=Langkah ke-3] [/collapse]
[collapsed title=Langkah ke-4] [/collapse]
[collapsed title=Langkah ke-5] [/collapse]
[collapsed title=Langkah ke-6] [/collapse]

[/collapse]

Compile aplikasi (Ctrl-F5). Langkah ini penting agar dapat maju ke langkah berikutnya. Jika tidak dilakukan kompilasi, maka Crystal Report tidak bisa menggunakan DataSet – yang kita siapkan pada langkah sebelumnya – sebagai definisi report.

Sekarang DataSet sudah siap kita gunakan

[collapsed title=Hasil Akhir DataSet] [/collapse]
 

Membuat Report Definition

Tambahkan Crystal Report ke project untuk laporan List Order, pilih “Using the Report Wizard” untuk membuat definisi report, kemudian pilih Create New Connection > ADO.NET (XML) sebagai data source dan arahkan File Path ke DataSet dsSample.xsd yang kita buat pada langkah sebelumnya.

[collapsed title=Koneksi report ke data source]

[collapsed title=Using the Report Wizard][/collapsed]
[collapsed title=Create New Connection][/collapsed]
[collapsed title=Arahkan File Path][/collapsed]
[collapsed title=Data source terkoneksi][/collapsed]

[/collapsed]

Tambahkan ke Selected Tables: Companies, Orders, OrderDetails, dan Items ke list “Selected Tables”, kemudian klik next untuk melihat relasi antar tabel

[collapsed title=Selected Tables]

[collapsed title=Selected Tables][/collapsed]
[collapsed title=Relationship antar Tabel][/collapsed]

[/collapsed]

Tambahkan field-field yang yang akan ditampilkan ke list “Fields to Display”, kemudian tambahkan juga report grouping, summary, dan filtering jika diperlukan, akhiri dengan memilih template yang diinginkan.

[collapsed title=Fields to Display]

[collapsed title=Fields to Display][/collapsed]
[collapsed title=Grouping Fields][/collapsed]
[collapsed title=Summary Fields][/collapsed]
[collapsed title=Filtering Fields][/collapsed]
[collapsed title=Pilih Templete][/collapsed]

[/collapsed]

Tampilan standar dari wizard, Silakan ubah layoutnya sesuai keinginan agan, misalkan menjadi seperti ini,

[collapsed title=Hasil report wizardwizard]

[collapsed title=Tampilan standar dari wizard][/collapsed]
[collapsed title=ubah layoutnya][/collapsed]

[/collapsed]

Tambahkan formula field untuk menghitung nilai order dengan cara klik kanan pada item “Formula Field” di window “Field Explorer”. Beri nama formula tersebut “ItemAmount” dan isikan rumusnya seperti pada gambar, kemudian klik tombol “Save and Close” di pojok kanan. Note: agar tidak perlu ketik ulang nama field di formula editor, bisa dengan cara klik ganda pada field yang ada di Field Tree.

[collapsed title=Formula Field]

[collapsed title=Tambah Formula Field][/collapsed]
[collapsed title=Tentukan Rumusnya][/collapsed]
[collapsed title=Masukkan formula field ke report][/collapsed]

[/collapsed]

Tambahkan Subtotal untuk field ItemAmount, dengan cara klik kanan mouse pada field Item Amount, kemudian pilih menu “Insert” -> “Summary”, kemudian ubah “Summary Location” menjadi “Group 1” Hasilnya akan muncul field summary persis di bawah field “ItemAmount”.

[collapsed title=Subtotal ]

[collapsed title=Buat field summary][/collapsed]
[collapsed title=Field summary tampil di report][/collapsed]

[/collapsed]

Rapikan layout report kita, misalnya menjadi seperti ini. Note: Jika “GroupFooterSection2” tidak ada pada report, silahkan klik kanan mouse pada “GroupFooterSection” kemudian pilih menu “Insert Section Below”

[collapsed title=Finishing][/collapsed]

 

Buat Form untuk Menampilkan Report

buat form baru kemudian beri nama frmReportViewer, setelah itu drag dan drop komponen CrystalReportViewer dari toolbox, hasilnya akan tampak seperti gambar di bawah ini.

[collapsed title=desain form report viewer][/collapsed]

Kemudian buka code editor dan tambahkan coding seperti di bawah ini. Metoda yang kita pakai adalah dengan memanfaatkan constructor form untuk menerima argumen berupa report yang akan di tampilkan.

[collapsed title=coding form report viewer]

        using CrystalDecisions.CrystalReports.Engine;

        public frmReportViewer(ReportClass rpt)
        {
            InitializeComponent();
            InitializeReport(rpt);
        }

        private void InitializeReport(ReportClass rpt)
        {
            this.crystalReportViewer1.ReportSource = rpt;
            this.crystalReportViewer1.Zoom(0);
        }

[/collapsed]

 

Buat Form untuk List Order

Buka desain Form1, ubah namanya menjadi “frmMain” kemudian tambahkan 1 buah button dan 1 buah DataGridView seperti yang tampak dalam gambar. Selanjutnya menggunakan property window, ubah nama button1 menjadi btnPrintForm, dan dataGridView1 menjadi grid1.

[collapsed title=Desain Awal][/collapsed]

Kemudian drag dan drop ke form dari toolbox grup “CrystalReports1 Components”, dsSample dan OrdersTableAdapter, sehingga desain form akan tampak sepert gambar di bawah ini. Selanjutnya ubah property berikut ini untuk grid1,

  • DataSource = dsSample1
  • DataMember = Orders
  • ReadOnly = True
  • AllowUserToAddRows = False
  • AllowUserToDeleteRows = False
  • AutoSizeColumnMode = Fill

Jika sudah maka tampilan form akan berubah menjadi seperti gambar di bawah ini

 

[collapsed title=Setelah Set Property untuk grid][/collapsed]

Sekarang saatnya menambahkan coding untuk mengambil data dari database dan ditampilkan ke grid. Silakan buka Code Editor dan tambahkan code seperti di bawah ini

[collapsed title=code untuk retrieve list order]

        public frmMain()
        {
            InitializeComponent();
            InitializeDatabase();
        }

        private void InitializeDatabase()
        {
            ordersTableAdapter1.FillList(dsSample1.Orders);
        }

[/collapsed]

Coding untuk Menampilkan Report adalah sebagai berikut, Buka desain frmMain kemudian klik ganda pada button btnPrintForm untuk membuka code editor, kemudian tambahkanlah code seperti di bawah ini

[collapsed title=Coding Tampilkan report]

        private void btnPrintForm_Click(object sender, EventArgs e)
        {
            // ganti cursor
            Cursor = Cursors.WaitCursor;

            // ambil OrderID
            int col = 0;                                  // nomor index field OrderID
            int row = grid1.SelectedCells[0].RowIndex;    // nomor index row yang dipilih
            int id = (int)grid1[col, row].Value;          // order id yang terpilih

            // siapkan pengambilan data yng ingin ditampilkan di report
            dsSample ds = new dsSample();
            OrdersTableAdapter orders = new OrdersTableAdapter();
            OrderDetailsTableAdapter details = new OrderDetailsTableAdapter();
            ItemsTableAdapter items = new ItemsTableAdapter();
            CompaniesTableAdapter comp = new CompaniesTableAdapter();

            // ambil data dari databse sesuai OrderID
            comp.FillByCompanyID(ds.Companies, id);
            items.FillByOrderID(ds.Items, id);
            orders.FillByOrderID(ds.Orders, id);
            details.FillByOrderID(ds.OrderDetails, id);

            // siapkan report
            ReportClass rpt = new rptOrderForm();
            rpt.SetDataSource(ds);

            // siapkan report viewer
            Form f1 = new frmReportViewer(rpt);
            f1.ShowDialog();

            // ganti cursor
            Cursor = Cursors.Default;
        }

[/collapsed]

 

 

Hasilnya gan….

Hasil akhir tampilan form aplikasi seperti ini

[collapsed title=List Order][/collapsed]

Hasil akhir tampilan report yang dihasilkan seperti ini

[collapsed title=Tampilan Report][/collapsed]

Download Source Code di sini gan!

[collapsed title=Source Code silakan download di sini gan] Download Source Code Sekarang
Download Crystal Report for VS2010 Sekarang [/collapsed]

 

Semoga berguna

 

 

.

Belajar SQL: Penggunaan SUM dan JOIN untuk membuat Laporan Summary

Belajar SQL: Penggunaan SUM dan JOIN untuk membuat Laporan Summary

Belajar SQL | Membuat laporan summary data dari table di database bisa dibilang gampang-gampang susah. Gampang ketika hanya membuat summary dengan sumber data satu buah table saja. Namun jadi makin rumit ketika summary melibatkan 2 (dua) table atau lebih. Silakan pelajari TUTORIAL berikut ini sebagai salah satu contoh kasus untuk membuat summary data dari 3 buah table terpisah.

Pertama-tama kita buat Table MASTER untuk sample data menggunakan perintah SQL CREATE TABLE … AS SELECT … kemudian tampilkan isinya untuk memastikan.

mysql> create table t_master as
    -> select 1 id, 'A' data union all
    -> select 2 id, 'B' data union all
    -> select 3 id, 'C' data ;
Query OK, 3 rows affected (0.19 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from t_master ;
+----+------+
| id | data |
+----+------+
|  1 | A    |
|  2 | B    |
|  3 | C    |
+----+------+
3 rows in set (0.00 sec)

Kemudian buat table TRANSAKSI pertama juga menggunakan perintah SQL CREATE TABLE … AS SELECT … kemudian tampilkan isinya untuk memastikan.

mysql> create table t_transaksi_1 as
    -> select 1 id, 'DOC 1' doc, 2000 value union all
    -> select 1 id, 'DOC 1' doc, 1000 value union all
    -> select 2 id, 'DOC 2' doc, 5000 value union all
    -> select 3 id, 'DOC 3' doc, 3000 value union all
    -> select 3 id, 'DOC 4' doc, 3000 value union all
    -> select 3 id, 'DOC 4' doc, 2000 value ;
Query OK, 6 rows affected (0.30 sec)
Records: 6  Duplicates: 0  Warnings: 0

mysql> select * from t_transaksi_1 ;
+----+-------+-------+
| id | doc   | value |
+----+-------+-------+
|  1 | DOC 1 |  2000 |
|  1 | DOC 1 |  1000 |
|  2 | DOC 2 |  5000 |
|  3 | DOC 3 |  3000 |
|  3 | DOC 4 |  3000 |
|  3 | DOC 4 |  2000 |
+----+-------+-------+
6 rows in set (0.00 sec)

Berikutnya buat table TRANSAKSI kedua juga menggunakan perintah SQL CREATE TABLE … AS SELECT … kemudian tampilkan isinya untuk memastikan.

mysql> create table t_transaksi_2 as
    -> select 2 id, 'DOC 2' doc, 2000 value union all
    -> select 2 id, 'DOC 2' doc, 2000 value union all
    -> select 3 id, 'DOC 3' doc, 4000 value union all
    -> select 3 id, 'DOC 4' doc, 5000 value union all
    -> select 3 id, 'DOC 4' doc, 1000 value ;
Query OK, 5 rows affected (0.15 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> select * from t_transaksi_2 ;
+----+-------+-------+
| id | doc   | value |
+----+-------+-------+
|  2 | DOC 2 |  2000 |
|  2 | DOC 2 |  2000 |
|  3 | DOC 3 |  4000 |
|  3 | DOC 4 |  5000 |
|  3 | DOC 4 |  1000 |
+----+-------+-------+
5 rows in set (0.00 sec)

Sekarang kita buatkan summary untuk table TRANSAKSI pertama, menggunakan GROUP BY dan fungsi aggregat SUM()

mysql>    select tm.id, data, doc, sum(value) value1
    ->    from t_master tm
    ->    join t_transaksi_1 tr on tm.id=tr.id
    ->    group by id, doc
    -> ;
+----+------+-------+---------+
| id | data | doc   | value11 |
+----+------+-------+---------+
|  1 | A    | DOC 1 |    3000 |
|  2 | B    | DOC 2 |    5000 |
|  3 | C    | DOC 3 |    3000 |
|  3 | C    | DOC 4 |    5000 |
+----+------+-------+---------+
4 rows in set (0.00 sec)

Sekarang kita buatkan summary untuk table TRANSAKSI kedua, menggunakan GROUP BY dan fungsi aggregat SUM().

mysql> select tm.id, data, doc, sum(value) value2
    ->    from t_master tm
    ->    join t_transaksi_2 tr on tm.id=tr.id
    ->    group by id, doc  ;
+----+------+-------+---------+
| id | data | doc   | value12 |
+----+------+-------+---------+
|  2 | B    | DOC 2 |    4000 |
|  3 | C    | DOC 3 |    4000 |
|  3 | C    | DOC 4 |    6000 |
+----+------+-------+---------+
3 rows in set (0.00 sec)

Sekarang gabungkan SUMMARY dari TRANSAKSI pertama dan kedua, menggunakan LEFT JOIN menjadi seperti ini.


mysql> select res1.id, res1.data, res1.doc
    -> , value1
    -> , value2
    -> from (
    ->    select tm.id, data, doc, sum(value) value1
    ->    from t_master tm
    ->    join t_transaksi_1 tr on tm.id=tr.id
    ->    group by id, doc
    -> ) res1
    -> left join (
    ->    select tm.id, data, doc, sum(value) value2
    ->    from t_master tm
    ->    join t_transaksi_2 tr on tm.id=tr.id
    ->    group by id, doc
    -> ) res2 on res1.id=res2.id and res1.doc=res2.doc ;
+----+------+-------+--------+--------+
| id | data | doc   | value1 | value2 |
+----+------+-------+--------+--------+
|  1 | A    | DOC 1 |   3000 |   NULL |
|  2 | B    | DOC 2 |   5000 |   4000 |
|  3 | C    | DOC 3 |   3000 |   4000 |
|  3 | C    | DOC 4 |   5000 |   6000 |
+----+------+-------+--------+--------+
4 rows in set (0.00 sec)

Namun masih ada yang sedikit aneh, karena ada nilai NULL di sana, maka kita gunakan perintah IFNULL() untuk mengunbahknya menjadi angka 0 (nol).


mysql> select res1.id, res1.data, res1.doc
    -> , ifnull(value1,0) value1
    -> , ifnull(value2,0) value2
    -> from (
    ->    select tm.id, data, doc, sum(value) value1
    ->    from t_master tm
    ->    join t_transaksi_1 tr on tm.id=tr.id
    ->    group by id, doc
    -> ) res1
    -> left join (
    ->    select tm.id, data, doc, sum(value) value2
    ->    from t_master tm
    ->    join t_transaksi_2 tr on tm.id=tr.id
    ->    group by id, doc
    -> ) res2 on res1.id=res2.id and res1.doc=res2.doc ;
+----+------+-------+--------+--------+
| id | data | doc   | value1 | value2 |
+----+------+-------+--------+--------+
|  1 | A    | DOC 1 |   3000 |      0 |
|  2 | B    | DOC 2 |   5000 |   4000 |
|  3 | C    | DOC 3 |   3000 |   4000 |
|  3 | C    | DOC 4 |   5000 |   6000 |
+----+------+-------+--------+--------+
4 rows in set (0.00 sec)


Demikian TUTORIAL ini semoga membantu memahami penggunaan SUBQUERY, JOIN, GROUP BY, dan fungsi agregate SUM.

Oracle Magazine November 2012

oracle magazine free download dunia database programmer

oracle magazine free download dunia database programmerI didn’t count the number of conversa-tions I had or heard that included the word, but I’m quite comfortable saying that cloudwas the word of the week at Oracle’s conferences and events in San Francisco, California, September 29 through October 5, 2012. There were announcements focused explicitly on Oracle cloud technologies and solutions, but cloud was also a big part of every Oracle product, technology, and service announcement and discussion.

Oracle CEO Larry Ellison’s Sunday keynote at Oracle OpenWorld 2012 was about cloud computing, including the history of cloud computing going back to NetSuite in 1998 and the beginnings of Oracle Fusion Applications development in 2004. Ellison discussed public and private clouds, the levels of cloud services—software as a service (SaaS), platform as a service (PaaS), and infrastructure as a service (IaaS)—and their key components, and Oracle’s latest offerings in each of these service areas.

Ellison talked about Oracle technologies designed specifically for better cloud com-puting, from infrastructure and private cloud services to database multitenancy and engi-neered systems. He also unveiled the latest Oracle engineered systems releases and discussed their infrastructure and platform support for cloud computing.

Download magazine here

Oracle Magazine on Pojok Programmer

Oracle Magazine September 2012

oracle magazine free download dunia database programmer

oracle magazine free download dunia database programmerOracle Magazinepublishes some small amount of Oracle news every 60 days, and that’s not an apology or false modesty on behalf of the magazine. Oracle generates far more news about products, strategy, and tech-nology in a two-month period than we could possibly fit in the pages of this publication. (Take a look at the Oracle press release feed at pressroom.oracle.com to see what I mean—and to search for the latest Oracle news.)

Information technology news is also the kind of news that benefits from several dif-ferent approaches, formats, and presenta-tions. Oracle Magazinestrives to present Oracle news in news briefs and interviews, community briefs, customer reference stories, technology how-to content, and anal-ysis. But even these variations are not enough to guarantee that organizations have the news they need to see the potential impact the latest Oracle products, strategy, and tech-nology could have on their own operations.

Fortunately, as the volume of news about Oracle and Oracle technology has continued to expand, it has gotten easier to sepa-rate into components and address with a tighter focus. The aforementioned Oracle press releases are now broken into bite-size bullets, suitable as launch points for social media conversations. Oracle Web pages, data sheets, white papers, customer case studies, and newer-media assets including podcasts, Webcasts, and videos present new infor-mation in all sizes, to fit the time you have and the approach you’re looking for when exploring any area of Oracle technology.

Download magazine here

Oracle Magazine on Pojok Programmer

Oracle Magazine July 2012

oracle magazine free download dunia database programmer

oracle magazine free download dunia database programmerThe ComputerWorld article gives examples of the many types of information contained in tables on the Web and points out that pro-gramming languages have developed features specifically for working with information in tables. The hard part of the “data stored in tables” truth presented in the article appears to be that tables are not new, but rather are years-old constructs that have organized the information of the internet in clearly defined structures. The article also points out that NoSQL isnew, but the hard truth there is that NoSQL is also about data in tables.

To me, the fact that most of the Web is data stored in tables is fantastic. The down-side to that truth is that only mostof the Web is in tables. And as for the hard truth that even a newer technology like NoSQL works with data in tables, I see only benefit in adding new capabilities for the structures that already contain most of the information of the Web.

Like many people, I’ve counted on tables—on the Web and in intranet applica-tions—for Web transactions and interactions as well as for storage and access to various types of information for years. For internal projects, I’ve used relational database tables in situations where I first did not understand how using tables would help, but in each case the truth was that using the tables was convenient and definitely added value to both the process and the result.

Download magazine here

Oracle Magazine on Pojok Programmer

Oracle Magazine May 2012

oracle magazine free download dunia database programmer

oracle magazine free download dunia database programmerEach issue of Oracle Magazinecollects different editorial content in familiar sections and a particular order. And just as every editorial piece is designed to have an interesting beginning, a constructive middle, and a conclusive end, the various sections of the magazine are arranged for a similar flow. From Up Front, At Oracle, and Community to Features, Technology, and Comment, the idea is to give the magazine a beginning that makes you want to pick it up (in print), click it (for digital), or tap it open (for mobile distributions); a middle that provides infor-mation and awareness about Oracle and the Oracle community; and an end that makes you look forward to the next issue.

The beginning of each issue, the very first section and page, is key to getting readers to pick up or open the magazine. And that beginning is the cover. The discussion about what story to put on the cover of this particular issue of the magazine was a brief one. How to put that story—featuring Marvel’s The Avengers—on the cover was a much longer conversation. The solution: this issue of Oracle Magazinehas been published with six different covers, each highlighting one of the Marvel super heroes. Each cover version is numbered—1 through 6—in the “Special Collector’s Issue” logo.

Download magazine here

Oracle Magazine on Pojok Programmer