Futorial

Fu-styled tutorial
See also: Other Geeks@INDC

January 2009 - Posts

Input data lewat Web Site, InfoPath, Excel

Zaman sekarang udah canggih yah… Pusat data (baca: database) cukup satu, supaya data utuh, terorganisir, mudah dijaga, dan lain sebagainya. Tapi karena kecanggihan teknologi informasi, yang namanya mengakses data (retrieve, insert, edit, delete) bisa melalui berbagai cara (dan berbagai user interface tentunya). Bisa lewat web site, bisa lewat desktop application, bisa lewat SMS, daaaaaan lain sebagainya.

Nah, di Futorial kali ini, saya akan menunjukkan step-by-step untuk membuat tiga cara meng-input data ke satu database yang sama. Secara garis besar, kita akan membuat sebuah tabel di database, kemudian kita buat website dan web service, kemudian kita buat InfoPath Form, baru setelah itu kita buat Excel Workbook. Web service yang akan kita buat sebenarnya hanya pilihan saja, yaitu baik melalui InfoPath maupun Excel, nantinya akan memanggil fungsi di web service untuk input data. Sebenarnya bisa saja dari InfoPath atau Excel langsung tembak ke database. Namun alangkah baiknya jika ada “penengah” antara User Interface dengan database, salah satunya melalui Web Service.

Oke, tanpa banyak basa-basi, kita langsung saja.

Langkah 0 : Membuat database di SQL Server 2005 Express Edition

Di SQL Server Management Studio, expand database engine, klik kanan Databases, kemudian pilih New Database…

image

Misalkan kita beri nama SatuData, kemudian klik tombol OK.

image

Expand Databases, expand database SatuData. Klik kanan Tables, pilih New Table…

image

 

 

Berikut adalah spesifikasi untuk kolom-kolomnya:

Nama kolom

Tipe data

Keterangan

ID

int

Not Null, Primary Key, IsIdentity

Name

varchar(50)

Not Null

Price

money

Not Null

ProductionDate

datetime

Not Null

IsDiscontinued

bit

Not Null

Agar nilai kolom ID auto-increment, maka set properti IsIdentity menjadi Yes. Caranya, klik kiri kolom ID, kemudian di window Column Properties (ada di bagian bawah), expand pilihan Identity Specification. Ubah properti (Is Identity) menjadi Yes.

Simpan tabel ini sebagai tabel Products. Beginilah tampilan tabel Products di SQL Server Management Studio.

image

Nah, urusan bikin database sudah selesai sampai sini.

Langkah 0.5 : Membuat Blank Solution

Untuk keperluan proyek kecil-kecilan kita, kita buat sebuah blank Solution yang nantinya akan ada tiga buah project.

Buka Visual Studio, kemudian pilih File > New > Project…

image

Setelah klik OK, nanti di window Solution Explorer (biasanya ada di kanan, short-cut nya Ctrl+Alt+L) akan ada sebuah Solution tanpa ada project apapun.

image 

Dalam solution ini, kita butuh koneksi ke database yang telah kita buat pada langkah sebelumnya. Caranya, pada window Server Explorer (Ctrl+Alt+S), klik icon image . Akan muncul window Add Connection. Isi server name dengan instance database kita (dalam hal ini saya pakai SQL Server Express), dan isi Select or enter a database name dengan SatuData (nama database yang telah kita buat sebelumnya). Klik OK untuk connect.

image

Kalau berhasil, di window Server Explorer akan muncul database SatuData.

image

Selanjutnya, kita akan membuat web site sebagai salah satu cara menginput data.

Langkah 1 : Membuat ASP.NET Dynamic Data Web Site

Di window Solution Explorer, klik kanan Solution ‘SatuDataTigaCara’, kemudian pilih Add > New Web Site…

image

 

 

 

Pilih ASP.NET Dynamic Data Web Site. Pilih C# sebagai Labguage, dan beri nama web site yang akan kita buat ini sebagai WebSiteCaraPertama dengan mengganti path di sebelah kiri tombol Browse…

Setelah itu, klik tombol OK.

image

Setelah itu, akan muncul web site WebSiteCaraPertama di Solution Explorer. Klik kanan web site tersebut (root-nya yang di-klik kanan), kemudian pilih Add New Item…

image

Pilih LINQ to SQL Classes sebagai template dan beri nama sebagai SatuData.dbml. Klik Add.

 

 

 

 

image

Klik Yes agar file SatuData.dbml ini ditempatkan di folder khusus bernama App_Code.

image

Secara visual, file SatuData.dbml akan terbagi menjadi dua Pane. Pane yang kiri untuk menempatkan Tables dan Views di database untuk akhirnya akan dibuatkan Class untuk masing-masing Table dan View. Pane yang kanan untuk menempatkan Stored Procedures untuk akhirnya akan dibuatkan Method untuk masing-masing Stored Procedure.

image

Dari Server Explorer, drag-and-drop tabel Products ke Pane yang kiri. Simpan file ini dengan Ctrl+S atau klik icon image .

Buka file Global.asax. Uncomment code pada baris ke 17, dan ganti menjadi seperti berikut:

model.RegisterContext(typeof(SatuDataDataContext), new ContextConfiguration() { ScaffoldAllTables = true });

Klik kanan Default.aspx, kemudian pilih View in Browser. Yup, kita telah selesai membuat web site. di halaman depan web site ini, klik link Products, akan tampil isi tabel Products (yang saat ini tentunya belum ada isinya). Klik link Insert new item untuk mengisi tabel Products. Isi dengan data berikut, kemudian klik tombol Insert.

image

Kalau berhasil, tabel Products kita sekarang ada satu record.

image

 

 

 

 

Dan ini benar-benar ter-insert ke database lho. Coba aja cek lagi ke SQL Server Management Studio kalo nggak percaya.

image

Nah, cara pertama sudah selesai. Sekarang kita beralih ke cara ke-2. Namun sebelum itu, kita buat sebuah penengah, yaitu si Web Service.

Langkah 1.5 : Membuat Web Service untuk insert new product

Kembali ke Visual Studio. Di window Solution Explorer, klik kanan root website kita, kemudian pilih Add New Item… Pilih Web Service sebagai template. Beri nama InsertNewProductWebService.asmx.

image

 

 

 

Ganti method HelloWorld menjadi seperti berikut

[WebMethod]
public void InsertNewProduct(string name, decimal price, DateTime productionDate, bool isDiscontinued)
{
    Product produkBaru = new Product();
    produkBaru.Name = name;
    produkBaru.Price = price;
    produkBaru.ProductionDate = productionDate;
    produkBaru.IsDiscontinued = isDiscontinued;

    SatuDataDataContext database = new SatuDataDataContext();
    database.Products.InsertOnSubmit(produkBaru);
    database.SubmitChanges();
}

Sekarang, di window Solution Explorer, klik kiri root web site. Perhatikan window Properties. Ganti nilai pada properti Use dynamic ports menjadi False.

image

Hal ini dilakukan agar port dari web site ini statis (tidak ganti-ganti), sehingga pemanggil web service ini nggak perlu khawatir akan lokasi web service ini. Kalau dinamis, bisa saja port nya ganti, sehingga begitu ingin memanggil fungsi InsertNewProduct, terjadi error karena ya jelas.. lha wong alamatnya bisa gonta-ganti.

Oke, sekarang kita coba apakah fungsi di web service kita sudah berjalan. Klik kanan InsertNewProductWebService.asmx, kemudian pilih View in Browser. Klik link InsertNewProduct. Isi dengan data berikut, kemudian klik tombol Invoke.

image

Cek apakah data yang kita kirim barusan telah masuk ke database. Kalau berhasil, pasti masuk.

image

OK, selanjutnya baru benar-benar langkah ke dua, yaitu melalui InfoPath.

Langkah 2 : Membuat form di InfoPath melalui Visual Studio

Klik kanan solution ‘SatuDataTigaCara’ kita, kemudian pilih New Project. Pilih Office di Project types, dan pilih InfoPath 2007 Form Template sebagai Templates. Beri nama sebagai InfoPathFormTemplateCaraKedua, kemudian klik tombol OK.

image 

Pilih Web Service pada pilihan Based on. Klik OK.

image

Pilih Submit data kemudian klik Next.

image

Masukkan lokasi web service yang tadi kita buat (bisa diperoleh dari aksi klik kanan View in Browser file asmx yang tadi). Jangan lupa tambahkan string ?WSDL setelah huruf x pada asmx. Klik Next.

image

Pilih sebuah fungsi (memang hanya ada satu yang kita buat). Klik Next.

image

Biarkan nama koneksi sebagai Main submit. Klik Finish.

image

 

 

 

 

 

Setelah project dibuatkan. Pilih menu View > Data Source. Akan muncul window Data Source.

image

Drag-and-drop grup tns:InsertNewProduct ke area “Drag data fields here”. Pilih Controls in Layout Table.

image

 

 

Ganti tulisan “Click to add a title” menjadi Insert new product. Drag-and-drop sebuah button dari toolbox.

image

Klik kanan Button tersebut, kemudian pilih Button Properties… Pada window Button Properties, ganti properti Action menjadi Submit kemudian klik tombol OK.

image

 

Selesai! Yuk kita coba hasilnya. Di window Solution Explorer, klik kanan proyek InfoPathFormTemplateCaraKedua, kemudian pilih Set as StartUp Project. Setelah itu, tekan Ctrl+F5.

image

Sebuah form InfoPath akan terbuka. Isi data seperti berikut, kemudian klik tombol Submit.

image

Pilih Yes pada window Microsoft Office InfoPath Security Notice.

image

Yuk kita lihat hasilnya.

image

Nahh, dengan begini, input data lewat InfoPath udah beres. Sekarang mari kita coba pakai Excel.

Langkah 3 : Membuat Excel Workbook melalui Visual Studio

Dengan cara yang nyaris sama dengan cara membuat form InfoPath, kita buat Excel Workbook. Klik kanan Solution ‘SatuDataTigaCara’ kemudian pilih Add > New Project… Pilih Office sebagai Project types dan Excel 2007 Workbook sebagai Templates. Beri nama ExcelWorkbookCaraKetiga kemudian klik tombol OK.

image

Biarkan nama file Excel sebagai ExcelWorkbookCaraKetiga dan format xlsx. Klik OK.

image

Nahh.. sekarang Excel ada di dalam Visual Studio. Di Excel ini, kita bisa tambahkan control yang dimiliki oleh Windows Form, sepert TextBox, Button, DateTimePicker, CheckBox, dan lain sebagainya. Sekarang, ubah tampilan isi Excel tersebut menjadi seperti berikut:

image

Saya telah menambahkan beberapa tulisan dan beberapa control, yaitu

Control

Name

Keterangan

TextBox textBoxPrice Kosongkan isi properti Text
DateTimePicker dateTimePickerProductionDate  
CheckBox checkBoxDiscontinued  
Button buttonSubmit Ganti isi properti Text menjadi Submit

Sebelum otak-atik lebih lanjut, kita add service reference ke Web Service. Caranya, klik kanan project ExcelWorkbookCaraKetiga, kemudian pilih Add Service Reference… Tuliskan alamat web service yang telah kita buat (atau bisa juga melalui tombol Discover), kemudian expand Services hingga menemukan service InsertNewProductWebService. Ubah Namespace menjadi InsertNewProductServiceReference kemudian klik OK.

image

 

 

Kembali ke Excel yang ada di Visual Studio. Double-click buttonSubmit. Kita akan beralih ke “code behind”. Perlu diketahui bahwa dalam kasus ini, kita akan meng-insert sebuah record ke tabel product di mana datanya diisi melalui Excel. Kolom Name didapat melalui sebuah Cell (yaitu C3), kolom Price didapat dari textBoxPrice, kolom ProductionDate didapat dari dateTimePickerProductionDate, kolom IsDiscontinued didapat dari checkBoxDiscontinued.

Ubah isi method buttonSubmit_Click menjadi seperti berikut:

private void buttonSubmit_Click(object sender, EventArgs e)
{
    Excel.Range rangeStart = Application.ActiveCell;
    Excel.Worksheet worksheet = rangeStart.Parent as Excel.Worksheet;

    string name = worksheet.get_Range("C3", "C3").Value2.ToString();
    decimal price = Convert.ToDecimal(textBoxPrice.Text);
    DateTime productionDate = dateTimePickerProductionDate.Value;
    bool isDiscontinued = checkBoxDiscontinued.Checked;

    InsertNewProductServiceReference.InsertNewProductWebServiceSoapClient service = new ExcelWorkbookCaraKetiga.InsertNewProductServiceReference.InsertNewProductWebServiceSoapClient();
    service.InsertNewProduct(name, price, productionDate, isDiscontinued);

    MessageBox.Show("Insert new product succeed");
}

Finish! Untuk mencobanya,pada window Solution Explorer, klik kanan proyek ExcelWorkbookCaraKetiga, kemudian pilih Set as StartUp Project. Setelah itu, tekan Ctrl+F5. Sebuah file Excel akan terbuka. Isi dengan data berikut, kemudian klik tombol Submit.

image

Sekarang kita lihat hasilnyaaa… Tadaaaaa…. sukses besar!!!

image

Huuffhhh… panjang juga yah post saya yang satu ini… :D

Selamat mencoba!

Share this post: | | | |
VPC TFS SP1 dan VSTS SP1

VPC TFS + VSTS yang dikeluarkan oleh Microsoft pada bulan Maret telah expired pada 31 Desember 2008. Untuk itu, Microsoft mengeluarkan VPC yang baru, yang akan expired 31 Desember 2009.

Silahkan download di sini: http://www.microsoft.com/DownLoads/details.aspx?familyid=C7A809D8-8C9F-439F-8147-948BC6957812&displaylang=en

image

Atau.. sebentar lagi Mas Wely akan download ke server INDC sehingga cukup meringankan beban kita dalam men-download.

Di VPC ini, sesuai dengan judulnya, baik TFS maupun VSTS nya sudah Service Pack 1.

image

Selamat mencoba…!

Share this post: | | | |
Meng-ekstrak teks dari gambar

Ada beberapa cara untuk meng-ekstrak teks dari gambar. Yang jelas, memang gak ada kelas OCR (Optical Character Recognition) di .NET sehingga kita butuh bantuan 3rd party tools. Saat ini yang baru saya coba adalah dengan menggunakan COM object dari Office 2007, yaitu Microsoft Office Document Imaging. Wahhh, jangan-jangan pada belum tahu nih, kalo Microsoft Office itu juga udah ada OCR nya..?

Oke, sebelum meng-ekstrak gambar, tentunya kita harus punya gambarnya dulu. Nah, saya membuat gambar dengan menggunakan Expression Design. Seperti ini…

image

Block semua objek, kemudian klik kanan, lalu pilih Export…

image

Pilih TIFF sebagai format

image

Tentukan nama file (kalau saya misalnya jadi Fuady.tif) dan lokasi file (kalau saya misalkan di C:\Temp) Klik tombol Export All.

Nahh, sekarang kita udah punya gambar.

Oke, pertama-tama, kita pakai Microsoft Office OneNote 2007, kita bisa ambil teks dari gambar. Caranya sangat sederhana. Buka OneNote, kemudian pilih menu Insert > Pictures > From Files…

image

Pilih gambar yang baru saja kita buat (Fuady.tif). Klik kanan gambar tersebut, kemudian pilih “Copy Text From Picture…”

image

Paste deh… tadaaaa..

image

Ehm.. intinya sih bukan ini.. karena yang mau saya lakukan itu adalah dari C#. So, kita bisa pakai objek COM yang terdapat pada Microsoft Office, yaitu Microsoft Office Document Imaging (MODI). MODI ini akan ada kalau kita pilih ketika install Office lho ya.. jadi gak secara otomatis ada. Ketika install Office, jangan lupa pilih komponen Microsoft Office Document Imaging untuk diinstall juga.

image

Bagi yang belum terinstall, toh kan kita bisa Add or Remove Features. Double-click aja file instalasinya (setup.exe) trus klik tombol continue, trus baru kita pilih komponen Microsoft Office Document Imaging untuk diinstall.

image

 

 

Oke, setelah terinstall, akan ada COM object yang bisa kita add di aplikasi kita. Contohnya, kita buat aplikasi WPF (yang tampilannya sengaja saya samakan dengan aplikasi di post saya sebelumnya) yang akan memanfaatkan COM bernama MODI ini.

Di aplikasi WPF ini, kita add reference ke MODI (klik kanan di Solution Explorer, kemudian pilih COM, lalu cari Microsoft Office Document Imaging 12.0 Type Library)

image

Nah, di Window1.xaml.cs, kita import namespace MODI

using MODI;

Kemudian masih di file yang sama, Window1.xaml.cs, isi method Button_Click dengan code ini

Document md = new Document();
md.Create(@"C:\Temp\Fuady.tif");
md.OCR(MODI.MiLANGUAGES.miLANG_ENGLISH, true, true);

MODI.Image image = (MODI.Image)md.Images[0];
MODI.Layout layout = image.Layout;

for (int j = 0; j < layout.Words.Count; j++)
{
    // Get this word and deal with it.
    MODI.Word word = (MODI.Word)layout.Words[j];
    textBlockResult.Text += "\n" + word.Text;
}

md.Close(false);

Coba kita tes yahh..

image

Yess!!! Berhasil…!!! Selamat mencoba :)

Sumber: Using The Office 2007 OCR Component in C#

Share this post: | | | |
Meng-ekstrak teks dari file PDF menggunakan library dari Winnovative

Pertama-tama, kunjungi halaman http://www.winnovative-software.com/download.aspx. Di situ, scroll down ke bawah sampai pada produk PDF to Text Coverter 2.0.

image

Simpan license key nya (misalkan disimpan di file txt atau di OneNote supaya gampang nyarinya), kemudian klik link “Continue Download”. Anda akan mendapatkan sebuah file zip bernama WnvPdfToText.zip. Ekstrak file tersebut.

Nah, dengan cara yang hampir sama dengan cara pada post saya sebelumnya, kita buat sebuah aplikasi WPF. Perbedaannya adalah:

  1. File yang di-reference adalah pdftotext.dll yang didapat dari hasil ekstrak WnvPdfToText.zip.
  2. Tidak perlu add file PDFParser.cs ke project.
  3. Tidak perlu add file pdf (Source.pdf) ke project. Namun kita harus tahu lokasi file pdf nya, misalnya di C:\Temp\Source.pdf

Nahhh, pada intinya adalah, kita import namespae Winnovative

using Winnovative;

Kemudian isi method Button_Click dengan code seperti berikut:

PdfToTextConverter pdfToTextConverter = new PdfToTextConverter();

pdfToTextConverter.Layout = TextLayout.OriginalLayout;
pdfToTextConverter.AddHtmlMetaTags = false;

//License key didapat dari website Winnovative
pdfToTextConverter.LicenseKey = @"WXJoeWtseWhpaWl5a3dpeWlhd2lrd2tpaWA=";

string extractedText = pdfToTextConverter.ConvertToText(@"C:\Temp\Source.pdf");
textBlockResult.Text = extractedText;

Kali ini hasilnya jauh lebih baik, kalau file pdf mengandung gambar, maka pengambilan teks tetap berhasil, dan gambar akan di-ignore oleh extractor.

Sumbernya:

image

Hasilnya:

image

 

Hmm… mantapp!!

 

Sumber: http://www.winnovative-software.com/PdfToText.aspx
Share this post: | | | |
Meng-ekstrak teks dari file PDF

Misalkan kita punya file PDF (bernama Source.pdf) seperti ini

image

Nah, kemudian kita mau ambil isi teksnya. Ada library yang free (namun tidak sempurna, nanti akan saya beritahu alasannya) yang bisa mengambil teks dari pdf kemudian menyimpannya dalam file txt. Library tersebut bisa di-download di http://www.codeproject.com/KB/cs/PDFToText.aspx. Di halaman tersebut, download baik source files maupun demo project.

Setelah download, ekstrak dua file zip tersebut. Di dalam PDFToText_bin.zip, ada file itextsharp.dll dan SharpZipLib.dll. Nah, dua file ini yang akan kita jadikan reference ke project kita. Kemudian di dalam PDFToText_src.zip, ada file PDFParser.cs yang nanti akan kita add (existing item) ke project kita.

Oke, sekarang ke contoh project. Misalkan kita buat sebuah aplikasi WPF (pertama-tama dengan menggunakan Ekspression Blend, tentunya).

image

Buatlah sebuah Button dan sebuah TextBlock pada Window1 (di dalam LayoutRoot).

image

Percantiklah tampilan (mohon maklum kalau tampilan yang saya buat nggak cantik ya..)

image

 

Kemudian, klik kiri di tombol Ekstrak, setelah itu di window Properties, klik icon Events image

Di pilihan Events, double-click text box di sebelah Click.

image

Sekarang kita beralih ke Visual Studio (yang terbuka secara otomatis gara-gara kita double-click tadi). Nah, sebelum ngapa-ngapain di Visual Studio, lakukan langkah-langkah berikut:

  1. Add reference ke itextsharp.dll dan SharpZipLib.dll yang ada di dalam PDFToText_bin.zip.
  2. Add existing item ke file PDFParser.cs yang ada di dalam PDFToText_src.zip.
  3. Add existing item ke file pdf yang akan kita ekstrak isinya, yaitu Source.pdf.

Berikut screen-shot nya…

Add reference

image

image

 

 

Add existing item

image

image

Nahh, kalau step-step tadi udah selesai, berarti di Solution Explorer akan tampil seperti ini:

image

Gunakan cara yang sama untuk menambahkan file Source.pdf. Namun, agar file Source.pdf ter-copy secara otomatis ke folder bin\Debug, maka kita harus memilih “Copy always” pada pilihan Copy to Output Directory. Caranya, klik kiri Source.pdf yang ada di Solution Explorer, kemudian di window Properties, set properti Copy to Output Directory menjadi Copy Always.

image 

Setelah itu, buka Window1.xaml. TextBlock kita belum punya nama. Beri nama TextBlock kita dengan textBlockResult. Caranya, klik kiri TextBlock kemudian isi property Name di window Properties.

image

Oke.. sekarang kita menuju code. Buka Window1.xaml.cs (sebenernya udah kebuka dari tadi sih..). Pertama-tama, kita import dulu namespace System.IO dan PdfToText.

using System.IO;
using PdfToText;

Di dalam handler-nya button click, atau dengan kata lain di method Button_Click yang dibuatin dari sananya, tuliskan code berikut:

//Ekstrak isi teks di Source.pdf kemudian menyimpannya dalam Result.txt

PDFParser pdfParser = new PDFParser();
pdfParser.ExtractText("Source.pdf", "Result.txt");

//Supaya teks di dalam Result.txt tertulis di text block

TextReader reader = new StreamReader("Result.txt");
textBlockResult.Text = reader.ReadLine();

Nahh, coba sekarang kita test hasilnya.

image

Klik tombol Ekstrak, maka inilah hasilnya:

image

Nahh… hasilnya bagus kalau kebetulan teksnya sederhana. Kalau agak rumit.. misalnya isi pdf nya seperti ini:

image

Maka, tidak ada teks yang berhasil diambil barang sehuruf pun..

Ada yang punya solusinya?

Sumber: http://www.codeproject.com/KB/cs/PDFToText.aspx

Share this post: | | | |