Tampilkan postingan dengan label asp. Tampilkan semua postingan
Tampilkan postingan dengan label asp. Tampilkan semua postingan

Selasa, 07 Agustus 2007

Printer Friendly Page

Kali ini tantangan yang muncul adalah pembuatan printer friendly page atau apapun namanya yang akan memberikan fasilitas bagi user untuk melakukan pencetakan halaman yang diinginkannya tanpa harus terlalu banyak melakukan editing dan hasilnya nanti tidak mengikutkan bagian yang tidak penting. Karena aplikasi ini adalah aplikasi berbasis web, maka bagian ini misalnya menu, header, footer dan yang lainnya.

Dimisalkan sebuah halaman web seperti ini:


*--------------------------*
| |
| HEADER SITE |
| |
*--------------------------*
| MENU |
*-----*--------------------*
| | |
| SUB | |
| MENU| DATA |
| | YG |
| | INGIN |
| | DIPRINT |
| | |
*-----*--------------------*
| FOOTER |
*--------------------------*


Sehingga permasalahan kita adalah pada saat user memilih untuk memproses halaman tersebut menjadi printer friendly page, maka yang tampil hanyalah pada bagian DATA YG INGIN DIPRINT.

Namun sebelum hal tersebut kita lanjutkan, sebenarnya terdapat beberapa cara yang dapat dilakukan untuk implementasi printer friendly page. Cara tersebut adalah menggunakan CSS atau membuat suatu mekanisme sendiri. Untuk tulisan ini saya akan menggunakan sebuah mekanisme sendiri untuk mendapatkan halaman yang printer friendly.
Misalkan untuk format halaman web diatas kita menggunakan penulisan kode seperti ini dengan menggunakan table:


<table>
<tr>
<td>
HEADER SITE
</td>
</tr>
<tr>
<td>
MENU
</td>
</tr>
<tr>
<td>
<table>
<tr>
<td> SUB MENU </td>
<td> DATA YANG INGIN DIPRINT </td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
FOOTER
</td>
</tr>
</table>


Untuk mendapatkan kemampuan menampilkan printer friendly page itu saya harus memikirkan sebuah mekanisme untuk memberikan penanda di halaman, dimana penanda tersebut dapat memberikan garis pemisah diantara bagian halaman yang bisa dicetak dan tidak. Penanda tersebut sendiri haruslah compatible dengan syntax yang ada dan tidak akan menimbulkan error pada saat ditampilkan di layar user. Untuk itu saya menggunakan cara yang kuno dengan menggunakan syntax comments di HTML dan tulisan unique di dalamnya. Untuk kesempatan ini saya menggunakan <!--$DPS$--> untuk "Data Print Start" dan <!--$DPE$--> untuk "Data Print End".
Karena itu format halaman web tersebut kodenya ditulis seperti ini ...


...
<td> SUB MENU </td>
<td><!--$DPS$--> DATA YANG INGIN DIPRINT <!--$DPE$--><td>
...


Kemudian permasalahan selanjutnya adalah proses untuk menampilkan halaman yang hanya menampilkan bagian diantara syntax <!--$DPS$--> dan <!--$DPE$-->. Karena saya menggunakan ASP, maka saya mencari tahu dan kemudianmendapatkan cara untuk melakukan eksekusi terhadap suatu halaman dan mendapatkan hasilnya menggunakan object Microsoft.XMLHTTP. Lalu saya tinggal menggunakan property yang dimiliki: Open, Send dan ResponseBody seperti yang ditunjukkan oleh kode dibawah ini; dimana sPageTarget adalah alamat URL lengkap halaman yang ingin kita proses.


....
Set xml_http = Server.CreateObject("Microsoft.XMLHTTP")
Call xml_http.Open( "GET", sPageTarget , false )
xml_http.Send
strContent = xml_http.responseBody
Set xml_http = Nothing
...


Namun hasil proses ini masih dalam format binary, sehingga kita harus melakukan konversi ke karakter dengan membuat sebuah fungsi konversi.


Function BinaryToString(Binary, CharSet)
'--- Converts the binary content to text
Const adTypeText = 2
Const adTypeBinary = 1
'--- Create Stream object
Dim BinaryStream 'As New Stream
Set BinaryStream = CreateObject("ADODB.Stream")
'--- Specify stream type - we want To save text/string data.
BinaryStream.Type = adTypeBinary
'--- Open the stream And write text/string data To the object
BinaryStream.Open
BinaryStream.Write Binary
'--- Change stream type To binary
BinaryStream.Position = 0
BinaryStream.Type = adTypeText
'--- Specify charset For the source text (unicode) data.
If Len(CharSet) > 0 Then
BinaryStream.CharSet = CharSet
Else
BinaryStream.CharSet = "UTF-8"
End If
'--- Open the stream And get binary data from the object
BinaryToString = BinaryStream.ReadText
End Function


Hasil yang didapatkan dari proses tersebut kemudian disimpan di variable strBody lalu diproses dengan algoritma sederhana.


...
strBody = BinaryToString(strContent, "")
content_start = instr(strBody, "") + 12
content_end = instrrev(strBody, "") ' for better feature, we used inStrRev ...
...


Seperti yang Anda tebak, kita tinggal mengambil bagian dari strBody dimulai dari content_start hingga content_end.


...
strBody = mid(strBody, content_start, content_end - content_start)
...


Dari hasil tersebut akan kita dapatkan bagian halaman yang dikatakan orang-orang sebagai printer friendly page :). Tentunya itu adalah dasar dari teknik ini dan sebenarnya kita harus melakukan beberapa percobaan yang lumayan menantang ;), misalkan bagaimana agar hasil proses tersebut bisa ditampilkan sama persis formatnya dengan sebelum dia diproses!
Saya serahkan buat Anda untuk mencoba sendiri :D ...

Selesai deh ...

thanks to www.livio.net

Jumat, 03 Agustus 2007

Rule For ASP & DB Prog.

Berdasarkan pengalaman saya yang masih novice rada advance ini ;) terdapat beberapa aturan penting dalam ASP dan hubungannya dengan pemrograman Database.
Aturan itu antara lain:


  • Selalu On Error Resume Next dilanjutkan dengan On Error Goto 0
    Akan ada 1000 alasan untuk kemalasan, tapi akan ada 1 alasan untuk membuat program Anda tidak berjalan dengan baik. Memang On Error Resume next adalah syntax yang sangat powerfull untuk memerintahkan program mengeksekusi baris selanjutnya walaupun ditemukan terdapatnya error. Tapi tahukah Anda, pada program yang menggunakan database yang sangat intents hal ini merupakan sebuah mimpi buruk karena dapat mengakibatkan server anda mengalami penurunan performance ?

  • Selalu bunuh object yang sudah Anda buat
    Memang secara otomatis ASP akan menghancurkan object yang Anda buat pada akhir script. Tapi tahukah Anda pada beberapa kasus object yang Anda buat tidak demikian saja terhapus oleh ASP? Kembali lagi pada proses yang terjadi pada aplikasi dengan menggunakan database, object yang tidak dihapus dapat meninggalkan jejak tak terlihat yang akan terus didiamkan atau dieksekusi oleh server dan memakan sebagian resource server Anda

  • Pada intinya
    jadilah programmer yang konvensional, kukuh dalam menjalankan sprit aturan pemrograman yang baik, setia pada satu aturan dan tidak poligami, serta tidak mendukung partai demokrat dan juga republikan (kok kayak USA :D). Daripada Anda harus melakukan tracing terhadap beribu baris program Anda pada saat sudah di gunakan oleh user Anda tersayang :) ...

  • Terakhir
    Jangan terlalu serius dengan tulisan ini :D ... karena you are is what you are ... (duenk ... )

Why ASP

Saatnya membuat program untuk implementasi alur logika dari sistem yang akan saya bangun menggunakan bahasa pemrograman untuk aplikasi web yang saya bisa. Karena latar belakang saya adalah bahasa Basic, maka secara naluriah :) saya memilih untuk menggunakan Active Server Pages. Karena selain relatif mudah digunakan untuk saya, ASP juga memberikan saya kemudahan untuk melakukan pengembangan di komputer yang saya miliki. Hal tersebut dikarenakan project saya sebelumnya di kantor juga menggunakan ASP dan dengan memilih ASP saya tidak memerlukan proses untuk menginstal bermacam-macam program tambahan. Cukup ke control panel->lalu windows component->dan kemudian saya pilih IIS. Installer kemudian meminta saya memasukkan instalasi windows; yang lainnya tinggal memenuhi petunjuk khas instalasi windows yang mudah dan simple.

Bagi saya yang bertipe penantang keterbatasan murni dan bukan orang yang terlalu fanatik dengan bahasa tertentu dan dengan berbagai jargon tertentu, bahasa pemrograman yang saya gunakan bukanlah sesuatu yang terlalu dianggap sebagai salah satu faktor penting dalam pembuatan sebuah aplikasi. Bagi saya yang novice advanced ini ;), bahasa adalah sebuah tool. Oleh karena itu sebuah tool adalah sesuatu yang relatif terhadap sang operator, dalam hal ini adalah programmer. Oleh karena itu persetan banget dengan .NET, php atau apapun namanya yang lain! Karena selama saya bisa menggunakan ASP yang simple but faster, saya tokh masih bisa membuat sebuah aplikasi yang handal. Nah, tentunya hal tersebut bukan sekedar bergantung dengan penulisan algoritma di dalam bahasa yang saya gunakan, akan tetapi lebih merupakan gabungan diantara pengalaman, kedisiplinan dan ketekunan serta pengetahuan dan insialisasi topik permasalahan dari sistem yang saya bangun. Kata singkatnya, hal tersebut haruslah lebih dahulu di rencanakan dan didalami lebih dahulu, bukan sekedar langsung terjun berperang ria tanpa tahu bagaimana medannya.

Wuek ... aku baru tahu kalau tulisan ini terlalu melebar :D ...

Nah, terkait dengan ASP, sebenarnya ini merupakan sebuah lingkungan pengembangan aplikasi yang dibuat oleh microsoft untuk pengembangan aplikasi web, sehingga kita bisa mengatakan bahwa ASP bukan merupakan sebuah bahasa pemrograman. Sedangkan bahasa yang digunakan bisa menggunakan VBScript dan juga JScript. Kalau kita pernah menggunakan Visual Basic atau mengenal bahasa turunan dari BASIC, VBScript memiliki syntax yang sama dengannya. Sedangkan bagi yang pernah menggunakan bahasa C, JScript juga memiliki syntax yang sama. Menggunakan ASP kita bisa menggabungkan syntax HTML dan native script yang kita pilih. Sedangkan untuk menunjukkan bahwa bagian kode kita adalah bagian dari ASP, kita tinggal menambahkan tag <% dan %>, atau dengan cara lain menggunakan <script language=vbscript|javascript runat=server>.

Karena sifatnya yang seperti itulah saya bisa menggunakan kemudahan syntax basic dan menggabungkannya dengan flexibilitas dan kekayaan library yang dimiliki oleh javascript, misalnya penggunaan Regular Expression yang lebih kaya di javascript dibandingkan dengan vbscript.

Sebagai contoh adalah potongan kode dari library yang saya kembangkan dan saya gunakan untuk membuat definisi tag saya sendiri.


<%
function parseTag(byval sText)
sText = killHTML(sText)
sText = setLink(sText) ' it must be link 1st
sText = setOther(sText)
sText = setQuoteCode(sText) ' then quote
sText = setFont(sText) ' set font
sText = setSmiley(sText) ' then last ! smiley
parseTag = setBR(sText)
end function
%>


Untuk parseTag(..) tersebut saya menggunakan bahasa VBScript. Akan tetapi saya menginginkan sebuah cara untuk melakukan pemrosesan dengan tag yang saya kembangkan sendiri, misalnya [b]tebal[/b] akan menghasilkan hal yang sama dengan <b>tebal</b>, dan beberapa tag spesifik yang lain. Untuk itu saya memilih menggunakan library dari bahasa JSCript yang kaya untuk melakukan hal tersebut, dengan flexibilitas yang diberikan oleh library Regular Expression nya.

Untuk itu saya tinggal menulis syntax berikut.


<script language=javascript runat=server>
....
function setLink(sText)
{
// /(\[link)(\=?)([^\]]*)(\]{1})([^\[]+)(\[\/link\])/ - since v.0.6 a
// { s1 }{ s2}{ s3 }{ s4 }{ s5 }{ s6 }
var re = /(\[link)(\=?)([^\]]*)(\]{1})([^\[]+)(\[\/link\])/gi; // [link=abc.com]ccc[/link] OR [link]abc.com[/abc]
var s = new String(sText);
s = s.replace(re,
function(str,s1,s2,s3,s4,s5,s6)
{
var linkz = s3.length == 0 ? s5 : s3;
linkz = linkz.toLowerCase();
if(linkz.substr(0,6) != 'mailto')
{
if(linkz.toString().search(/(ht|f)tp(s?)\:\/\//i) == -1)
linkz = 'http://' + linkz;
}
if(s2.length == 0)
{
return "<a target=_blank href=\"" + linkz + "\">" + s5 + "</a>";
}
return "<a target=_blank href=\"" + linkz + "\">" + s5 + "</a>";
});
return s;
}
function removeTAGG(sText)
{
return (new String(sText)).replace(/\[([^\]]+)\]/gi, "");
}
....
</script>


Dan seperti yang dilihat, fungsinya bisa dipanggil oleh bagian ASP yang menggunakan VBScript seperti memanggil fungsi dalam bahasanya sendiri (Tentu saja ada beberapa batasan dalam variable advance). Kalau dilihat, sepertinya ASP memiliki konsep yang sama dengan salah satu sifat .NET. Hal tersebut adalah kebebasan dalam menggunakan bahasa pemrograman. Tentunya dalam hal ini tidak bisa dibilang sama dengan apa yang dimiliki oleh .NET ;).

Nah cukup sudah, saya lumayan capek neh ... mau tidur dulu yah ;)...