Membangun Website Dinamis dengan ColdFusion
ColdFusion
Dalam
artikel ini kita akan membahas apa itu ColdFusion dan kemampuannya untuk
menciptakan website dinamis.
ColdFusion
adalah bahasa pemrograman yang berdasar pada standar dasar HTML (Hyper Text
Meta Language) yang digunakan untuk menulis webpage dinamis. ColdFusion akan
membuat halaman yang isinya tergantung dari user input, database, waktu
atau apapun kriteria yang diimpikan! Halaman ColdFusion pages akan terdiri dari
standard HTML tags seperti <FONT SIZE=”+2”> bersama dengan CFML
(ColdFusion Meta Language) tags seperti <CFQUERY>, <CFIF> and
<CFLOOP>. ColdFusion mulai diperkenalkan oleh Allaire in 1996 dan
sekarang sudah mencapai versi 5.0.
Program Hello World dalam ColdFusion
Saat
seorang user meminta sebuah halaman ColdFusion page (biasanya file dengan
extension .CFM) dari webserver, ColdFusion Server akan menjalankan halaman dan
mengeluarkan halaman standard HTML ke webserver untuk dikembalikan ke
browser user. Dalam kasus simpel dimana hanya ada HTML tags dan tidak ada CFML
tags dalam halaman, tidak ada proses yang dilakukan, dan HTML hanya melewatinya
tanpa diubah. Jadi jika anda ingin menulis program "Hello World"
dalam ColdFusion, ini hanya melibatkan HTML saja:
<HTML><BODY>
Hello World
</BODY></HTML>
HelloWorld.cfm
Jika
ada CFML tags maka ColdFusion akan memprosesnya, mengkalkulasi variabel,
pernyataan if, dan looping, untuk kemudian di buat HTML. Jika anda familiar
dengan C, maka anda bisa bandingkan dengan C preprocessor for HTML!
Mari
kita tambahkan beberapa ColdFusion code ke dalam contoh Hello World kita. Kita
akan menanyakan nama si user dan kemudian menampilkan Hello [nama]. Dalam
standard HTML web page, kita harus memasukkan nama user dalam halamam terpisah
adri halaman yang akan memprosesnya. Hal ini dikarenakan setelah sebuah halam
ditampilkan dalam browser, maka komunikasi antara browser dengan server akan
berhenti, jadi agar server dapat melakukan proses dibutuhkan halaman kedua.
(Catatan: Dapat juga dilakukan untuk menjalan code dalam browse, tetapi ini
akan membutuhkan JavaScript atau client-side addons lainnya ke HTML, dimana
kita tidak menginginkannya.)
Catatan:
Kenyataannya webpage berdiri sendiri (terpisah dari server) dan ini menjadi
satu dari banyak hal yang membingungkan dari penulisan aplikasi web.
Kadang-kadang dijelaskan sebagai stateless dan setiap halaman tidak
secara otomatis minyimpan dalam memori atau status dari halaman sebelumnya
sampai kode anda secara jelas menyampaikan informasi yang ada. Bandingkan
situasi ini dengan sebuah pemrograman tradisional dalam Basic atau C, dimana
kita dapat secara mudah memindahkan variabel global atau parameter dalam
program kita.
Kita
tambahkan sebuah halaman baru GetName.cfm untuk mengambil nama user dan
mengubah halaman tampilan menjadi HelloWorld2.cfm, seperti di bawah ini.
<HTML><BODY>
<FORM NAME="GetName" ACTION="HelloWorld2.cfm" METHOD="post">
<INPUT TYPE="TEXT" NAME="FirstName">
<INPUT TYPE="SUBMIT" VALUE="OK">
</FORM>
</BODY></HTML>
GetName.cfm
<HTML><BODY>
<CFOUTPUT>
Hello #FirstName#
</CFOUTPUT>
</BODY></HTML>
HelloWorld2.cfm
Halaman
pertama GetName.cfm adalah sebuah HTML murni untuk tampilan input. Halaman
kedua HelloWorld2.cfm mengandung dua perintah ColdFusion - <CFOUTPUT> tag
untuk menyalakan output ColdFusion variable(yang akan berpasangan dengan
</CFOUTPUT> tag untuk mematikannya). Dan tanda pagar (#) sebagai
pemisah variabel FirstName yang disampaikan sebagai variabel form dari halaman
GetName.cfm. Saat halaman dijalankan dan anda mengetikkan nama Michael ke halaman
pertama, hasilnya kemudian dapat kita lihat "Hello Michael" dan
HTML berikut akan di generate:
<HTML><BODY>
Hello Michael
</BODY></HTML>
Mari
kita lakukan latihan terakhir dari contoh ini, yang akan mengatakan Selamat
Pagi, Siang atau Malam tergantung waktu yang berlaku di server. Kita akan
menggunakan fungsi ColdFusion Now() dan Hour() yang akan mengembalikan
tanggal/jam (date/time) dan jam akan berada diantara 0 dan 23 dari
nilai tanggal/jam.
<HTML><BODY>
<CFOUTPUT>
<CFIF Hour(Now())GT 18>
Selamat Malam
<CFELSEIF Hour(Now())GT 12>
Selamat Siang
<CFELSE>
Selamat Pagi
</CFIF>
#FirstName#
</CFOUTPUT>
</BODY></HTML>
HelloWorld3.cfm
Disini
juga digunakan <CFIF> <CFELSE> </CFIF> tags yang akan
menampilkan hasil yang berbeda-beda tergantung dari jam hari tersebut - apapun
kondisinya. Harap diperhatikan karena kita menggunakan HTML, carriage return
dalam text tidak akan berpengaruh dan salam "Selamat Pagi Michael"
akan muncul dalam satu baris. Jika diinginkan dalam dua baris, kita harus gunakan
standar linebreak HTML tag <BR> sebelum variabel #FirstName#.
ColdFusion
memiliki lebih dari seratus fungsi Arrays, Date and Time, Decisions,
Display and Formatting, Dynamic Evaluation, List Processing, Structures,
International, Mathematics, Strings, System values and Query
manipulation. Juga ada sekitar 70 tags untuk Database Manipulation, Data
Output, Variable Manipulation, Flow-Control, Internet Protocols, File
Management, Web Application Framework, ColdFusion Forms, External System Tags.
Sebagai tambahan kita dapat menulis sendiri tag baru dalam ColdFusion or C.
Bagaimana ColdFusion Bekerja
Untuk
menyimpulkannya, sebuah aplikasi ColdFusion adalah kumpulan-kumpulan halaman
yang sangat sederhana yang mirip dengan sebuah static Web site. Tetapi tidak
seperti website static, Halaman dalam aplikasi ColdFusion mengandung
server-side ColdFusion Markup Language (CFML) sebagai tambahan ke HTML. CFML
akan memberikan keleluasaan untuk mengendalikan kebutuhan dari aplikasi kita,
mengintegrasikan dengan teknologi server dan secara dinamis meng-generate
content yang dikembalikan ke browser.
Saat
sebuah browser meminta sebuah halaman dalam aplikasi ColdFusion, secara
otomatis akan di proses terlebih dahulu oleh ColdFusion Application Server.
Berdasarkan pada CFML dalam halaman tersebut, Application Server mengeksekusi
logika aplikasi, berinteraksi dengan teknologi server lainnya dan secara
dinamis men-generate sebuah halaman HTML, yang dikembalikan ke browser.
Diagram
berikut menampilkan bagaimana sebuah browser meminta halaman di aplikasi
ColdFusion.
- Saat user meminta halaman dalam
aplikasi ColdFusion dengan submit sebuah form atau klik hyperlink, browser
si suer mengirimkan sebuah request HTTP ke Web server melalui Internet
atau Intranet.
- Web server menyampaikan data yang
dimasukkan oleh client dan meminta halaman ke server aplikasi ColdFusion
melalui server API atau CGI. Halaman ColdFusion secara otomatis dikompile
dan disimpan dalam memory sehingga pemrosesan menjadi sangat cepat dan
dapat dikembangkan walaupun dalam beban tinggi.
- ColdFusion membaca data dari
client dan memroses CFML yang digunakan dalam halaman tersebut.
Berdasarkan CFML, server aplikasi ColdFusion menjalankan logika aplikasi
dan berinteraksi dengan seluruh teknologi server, termasuk database, email
dan files.
- ColdFusion secara dinamis
men-generate sebuah halaman HTML dan mengembalikan ke web server.
- Web server kemudian menyampaikan
halaman tersebut ke browser si User.
Apalagi
yang dapat dilakukan oleh ColdFusion?
Kita
tidak hanya bisa mengolah variabel dan kondisi CFIF. Beberapa yang dapat
dilakukan adalah:
- Mengambil data dari
sebarang ODBC database termasuk Access dan SQL server
- Menjalankan seluruh SQL query
termasuk INSERT, UPDATE and DELETE queries
- Mengirim email dengan CFMAIL
- Looping dalam query database,
list atau For-Next.
- Menangani error dan mengalihkan
ke halaman yang berbeda.
- Secara otomatis membaca halaman
dari website lain dengan CFHTTP
Apa yang dibuat oleh web developer dengan ColdFusion?
Web
developer menggunakan ColdFusion untuk membangun aplikasi-aplikasi Internet,
Intranet, and Extranet termasuk:
Electronic Commerce
- Online stores and catalogs
- Supply chain management
- Business to business electronic
commerce
- One to one marketing and Web site
personalization
Collaborative Computing
- Online discussion groups
- Project management
- Groupware systems
- Workflow applications
- Web based support
Interactive Publishing
- Online information services
- Agent technology
- Dynamic Web publications
- Internal corporate
newsletters
- Interactive training
Business Systems
- HR applications
- Sales/order entry
- Business process automation
- Company directory
- Financial information
applications
- Customer asset management
Menampilkan
data dengan SQL
Kita
akan teruskan membahas apa yang dapat dilakukan oleh ColdFusion dan bagaimana
kita dapat menggunakannya untuk membuat website. Disini akan dibahas mengenai
penampilan data dari database dengan menggunakan SQL statement.
Membuat halaman data dengan Select dan Display Data
Untuk
select dan menampilkan data dari sebuah database, kita buat sebuah aplikasi
ColdFusion dengan menggunakan tag CFQUERY, ditambah sedikit HTML format seperti
yang kita inginkan. Query database dilakukan dengan SQL (Structured Query
Language) di dalam tag CFQUERY.
Untuk
menggambarkannya, kita akan menggunakan contoh sebuah database dengan
menggunakan ODBC (Open DataBase Connectivity) serta DSN-nya kita namakan
CompanyDB.
Untuk
membuat sebuah query select
yang diberi nama EmployeeList, yang akan mengambil semua data dalam tabel
employees, kita gunakan syntax dibawah ini:
<CFQUERY NAME="EmployeeList" DATASOURCE="CompanyDB">
SELECT FirstName, LastName, PhoneNumber, Email
FROM Employees
ORDER BY LastName
</CFQUERY>
EmployeeList.cfm
SQL dan ODBC
SQL
adalah bahasa industri standar untuk berinteraksi dengan database relational.
Dengan kelebihan-kelebihan SQL yang cukup hebat, ternyata mempelajari
dasar SQL relatif lebih mudah. Kita dapat mempelajari SQL yang kita butuhkan
untuk digunakan dalam ColdFusion.
Pernyataan
SQL dasar adalah:
Action
|
SQL syntax
|
Read
records
|
SELECT FieldsList FROM TableName
WHERE conditions ORDER BY FieldsList
|
Add
records
|
INSERT INTO TableName (FieldsList) VALUES (ValuesList)
|
Delete
records
|
DELETE * FROM TableName WHERE conditions
|
Change
records
|
UPDATE TableName SET field = value WHERE condition
|
Dalam
praktek, mungkin kita akan jarang menulis statement-SQL karena begitu banyak
tools untuk membuat ini. Yang paling mudah, kiita akan dapatkan SQL tools dalam
Microsoft Acces. Tools ini akan membuat kita secara visual membuat query serta dapat kita
lihat terlebih dahulu hasilnya. Kemudian dengan mudah kita copy-paste SQL
statement ini ke aplikasi lainnya seperti ColdFusion. Ini akan membantu anda
terlepas dari error message ODBC serta SQL syntax error.
Selain
itu, ODBC adalah salah satu cara untuk program seperti ColdFusion untuk
menggunakan SQL yang sama dengan database yang berbeda tanpa harus mengubah
kode. ODBC driver akan menangani semua detail dengan database sesungguhnya dan
kita akan lebih bebas untuk memikirkan hal lain dalam aplikasi kita. ODBC
drivers terdapat dari beberapa database:
- Access
SQL server
- Excel
- Comma
delimited text
- HTML
tables
- FoxPro
- Paradox
- Oracle
- Sybase
- DB2
Menampilkan Hasil dari SELECT
Setelah
kita membuat CFQUERY dalam aplikasi kita, kita dapat menghubungkannya dengan
tag CFML lainnya. Hasil query dapat kita gunakan untuk secara dinamis
menampilkan sebuah halaman HTML.
Selama kita
belajar CFML tags, harus diingat bahwa kita dapat juga menggunakan tag HTML
serta text dalam aplikasi kita. Saat kita gunakan tag HTML and text dalam
aplikasi kita, ColdFusion hanya akan melewatkannya saja untuk dikembalikan ke
browser client.
Cara
paling fleksibel untuk meampilkan data yang diambil dari sebuah CFQUERY adalah
mendefinisikan sebuah bagian CFML output dalam aplikasi kita dengan menggunakan
CFOUTPUT tag. Bagian ini kita isi dengan query tertentu atau dengan
beberapa query.
Bagian
output dasar biasanya memiliki syntax sebagai berikut:
<CFOUTPUT QUERY="queryname" MAXROWS=n STARTROW=s>
Text biasa, HTML tags, dan
dynamic field reference (contoh: #FirstName#)
</CFOUTPUT>
Catatan:
penggunaan tanda pound (#) untuk mengeluarkan nilai variable
'FirstName'. Sebuah CFOUTPUT tag dapat berisi:
- Text biasa
- HTML tag
- Reference ke query columns
- Reference ke parameter dinamis
seperti field form.
- Function
Contoh:
Jika
kita jalankan CFQUERY yang kita beri nama EmployeeList dan kita ingin
menggunakannya untuk menampilkan first name, last name, dan email address dari
setiap pegawai (setiap baris dipisah oleh garis horisontal), kita gunakan
bagian CFOUTPUT sebagai berikut:
<CFOUTPUT QUERY="EmployeeList">
<HR>
#FirstName# #LastName#
(Email: <A HREF="mailto:#Email#">#Email#</A>) <BR>
</CFOUTPUT>
EmployeeList2.cfm
Jika
ada 3 record dari hasil query tersebut, HTML yang di generate oleh
bagian CFOUTPUT ini akan kelihatan sebagai berikut:
<HR>
Deborah Jones
(Email: <A HREF="mailto:dj@ibm.net">dj@ibm.net</A>)<BR>
<HR>
John Smith
(Email: <A HREF="mailto:js@ibm.net">js@ibm.net</A>)<BR>
<HR>
Frank Wilson
(Email: <A HREF="mailto:fw@ibm.net">fw@ibm.net</A>)<BR>
Dalam
standar HTML, <A HREF> tag dengan mailto: URL akan memberi email link
dalam halaman.
Menampilkan Output Query dalam Tabel
Menampilkan
hasil query dengan menggunakan CFOUTPUT biasanya cukup seperti di atas
jika hasil record masih sedikit. Akan tetapi kita ingin agar hasil tampilannya
lebih baik dan rapih. CFOUTPUT tag dapat memasukkan HTML apapun, dan kita akan
menggunakan standar HTML table tag untuk membuat sebuah tabel secara dinamis.
Kita
rubah contoh kita di atas untuk menampilkan tabel:
<TABLE>
<TR>
<TD>First Name</TD>
<TD>Last Name</TD>
<TD>Email</TD>
</TR>
<CFOUTPUT QUERY="EmployeeList" MAXROWS=10>
<TR>
<TD>#FirstName#</TD>
<TD>#LastName#</TD>
<TD><A HREF=”mailto:#Email#”>#Email#</A></TD>
</TR>
</CFOUTPUT>
</TABLE>
EmployeeList3.cfm
Hasilnya adalah sebuah
tabel dengan tiga kolom dengan label "FirstName," "Last
Name" dan "Email”. Tabel ini akan menampilkan data dari CFQUERY yang
bernama "EmployeeList" dan ditambalikan tidak lebih dari 10 baris.
<TABLE>
<TR>
<TD>First Name</TD>
<TD>Last Name</TD>
<TD>Email</TD>
</TR>
<TR>
<TD>John</TD>
<TD>Smith</TD>
<TD><A HREF=”mailto:js@ibm.net” js@ibm.net</A></TD>
<TR>
...
</TABLE>
Dalam browser kita, akan
kita lihat seperti ini:
First Name
|
Last Name
|
Email
|
Deborah
|
Jones
|
|
John
|
Smith
|
|
Frank
|
Wilson
|
|
Menggunakan
Parameter Dinamis dalam SQL Statement
Kita baru dapat
merasakan manfaat kekuatan sebenarnya dari CFQUERY tag pada saat kita secara
dinamis menyesuaikan isi dari attribut SQL dengan menggunakan parameter yang
disampaikan oleh aplikasi. SQL statement dapat disesuaikan dengan menambahkan
parameter dinamis dalam SQL text. Parameter dinamis (disebut juga variabel)
biasanya terdapat dalam entry form, parameter melalui URL dan informasi CGI
environtment.
Konvensi penggunaan
parameter dinamis dalam statement SQL adalah menutup variable tersebut tanda
pound atau (contoh., #:LastName#). Saat ColdFusion memeriksa ada text di antara
tanda #, maka akan dicari di semua variabel Form, URL, cookies, client, and CGI
utnuk mencari yang sesuai dengan nama yang dimasukkan. Pada saat nama
diketemukan, maka ColdFusion menggantikannya dengan nilai variabel tersebut.
Jika kita memastikan variabel dengan type variabelnya, maka waktu pencariannya
akan lebih cepat sedikit.
Contoh
SQL Dinamis
Jika kita membuat sebuah
form agar user dapat mencari employees berdasarkan nama belakangnya, maka kita
dapat menggunakan statement SQK dengan parameter dinamis:
<CFQUERY NAME="EmployeeList" DATASOURCE="CompanyDB">
SELECT * FROM Employees
WHERE LastName = '#Form.LastName#'
</CFQUERY>
Jika kita masukkan
"Rucker" untuk LastName, statement SQL yang dikirim ke database
akan seperti:
SELECT * FROM Employees
WHERE LastName = 'Rucker'
Sources for dynamic parameters
Dibawah ini tabel
variabel CF, yang juga bisa kita gunakan dalam SQL query.
Type
Variabel dalam CF
Field
|
Description
|
Form
fields
|
Cara yang
paling sering digunakan untuk menyampaikan parameter ke aplikasi web. Saat
user memasukkan data ke form field, sebuah parameter dengan nama variabel
dalam form tersebut (#Form.formfield#) akan disampaikan ke aplikasi.
|
URL
parameters
|
Parameter
yang ditambahkan pada akhir URL (seperti, input.cfm?name=adam). Nama
variabelnya adalah "url.name"
|
Server
|
Sebuah variable
yang akan tetap ada ke semua aplikasi yang ada di server sampai ColdFusion
Server berhenti/mati.
|
CGI
environment
|
Sebuah
variabel environment yang diterjemahkan oleh browser. Setiap request yang
disampaikan ke aplikasi mempunyai beberapa variabel environment yang
berhubungan dengan context yang dikirimkan. Variabel tersebut tersedia
tergantung dari browser dan software server yang digunakan untuk memngirimkan
request.
|
Query
objects
|
Kolom
query hanya dapat kita gunakan setelah sebuah query tersebut dijalankan.
Hasil dari query ini dapat digunakan sebagai parameter dinamis bagi query
lainnya. Contoh, sebuah query menghasilkan kolom yang disebut UserID dan
dapat menjadi variabel untuk queryname.UserID
|
Cookies
|
Mekanisme
umum untuk menyimpan dan mengambil informasi di web client (browser).
|
Client
variables
|
Digunakan
untuk menyimpan variabel client di dalam sistem. Di register dalam
server web. Variabel ini sangat spesifik ke browser individual yang mengakses
aplikasi ColdFusion.
|
Session
variables
|
Variable
yang hanya ada pada saat sessi individual. Variabel session terikat ke klien
individual dan akan tetap ada selama client ID tersebut masih ada dalam
sessi.
|
Application
variables
|
Variable
yang hanya ada untuk aplikasi individual. Nama aplikasi didefinisikan dalam
CFAPPLICATION tag, dimana biasa digunakan dalam file application.cfm.
|
Email
Dinamis
Kita
teruskan membahas bagaimana ColdFusion bekerja. Kita akan bahas pengiriman
email dan bagaimana kita gunakan dalam pembuatan web site dinamis.
CFMAIL
Tag
<CFMAIL> bertugas mengirimkan email ke satu atau banyak tujuan dari
sebuah halaman web. Menggunakan standar SMTP (Simple Mail Transport Protocol)
server seperti MS Exchange atau SLmail. <CFMAIL> mempunyai parameter dikirimkan
kepada siapa memakai TO, pengirim memakai FROM, sebuah CC dan SUBJECT.
Isi email itu sendiri diantara dalam <CFMAIL> dan </CFMAIL>
tags. Agar lebih jelas, kita akan membuat sebuah inquiry dari pelanggan sebelum
kita simpan dalam database.
Mengirimkan email berbasis form
Pelanggan
memasukkan namanya, email, suject dari inquiry serta pesan dalam input form
ini:
<HTML>
<BODY>
Request more information.<BR>
<FORM ACTION="RequestInfoSub.cfm" METHOD="POST">
Name: <INPUT NAME="FirstName" TYPE="text">
<INPUT NAME="LastName" TYPE="text"><BR>
Email: <INPUT NAME="Email" TYPE="text"><BR>
Subject: <INPUT NAME="Subject" TYPE="text">
Details: <TEXTAREA NAME="InquiryText"></TEXTAREA>
<INPUT NAME="sumbit" TYPE="submit">
<INPUT NAME="Clear" TYPE="reset">
</FORM>
</BODY></HTML>
|
Halaman
output kita gunakan untuk mengirimkan email ke bagian marketing dengan
menggunakan tag <CFMAIL>. Kita juga mengirimkan CC ke customer kita,
sehingga mereka dapat konfirmasi dari permintaan mereka.
<CFMAIL FROM="#Form.EMailAddress#"
TO="marketing@perusahaanku.com"
CC="#Form.EMailAddress#"
SUBJECT="Customer Inquiry">
The following inquiry
was posted to our Web site:
Name: #Form.FirstName#
#Form.LastName#
Subject: #Form.Subject#
#Form.InquiryText#
</CFMAIL>
|
Pada
halaman yang sama kita juga menyimpannya dalam database dengan menggunakan tag
<CFQUERY> sebagai berikut.
<CFQUERY
NAME="EmployeeList" DATASOURCE="CompanyDB">
INSERT INTO Leads
(FirstName, LastName, Email, Subject,
InquiryText, LeadDate)
VALUES('#Form.FirstName#','#Form.LastName#',
'#Form.EmailAddress#',
'#Form.Subject#',
'#Form.InquiryText#',
#CreateODBCDate(now())#)
</CFQUERY>
|
Membuat mail merge dengan email
Program
diatas hangay mengirimkan satu email. Bagaimana jika kita ingin mengirimkan
email follow-up yang ada dalam database di tabel "Leads" 7 hari
lalu sampai sekarang? Langkah pertama adalah menulis sebuah query SQL dan
menggunakan tag <CFQUERY> :
<CFQUERY
NAME="GetEmail" DATASOURCE="CompanyDB">
SELECT FirstName,
LastName, Email
FROM Leads
WHERE int(LeadDate) =
int(now())-7
</CFQUERY>
|
Kita
gunakan fungsi int() dalam SQL karena field LeadDate dibuat dengan
fungsi now() yang memasukkan waktu (kita hanya ingin membandingkan
tanggalnya saja). Fungsi int() hanya akan mengambil bagian integer dari tanggal
dan menghilangkan bagian di belakang koma, sehingga kita dapat membandingkan
harinya.
Kemudian
kita looping hasil query GetEmail di atas dengan menggunakan tag <CFLOOP>
tag. Tag ini akan membuat looping dari setiap hasil yang didapatkan dari query
tersebut. Dan dari setiap loop kita menyisipkan tag <CFMAIL> utnuk
mengirimkan email ke masing-masing pelanggan hasil query ini:
<CFSET ListSent =
''>
<CFLOOP
QUERY="GetEmail">
<!--- for testing uncomment the next line
--->
<CFSET
ThisEmail=email>
<CFMAIL TO="#ThisEmail#"
FROM="<info@teratech.com> TeraTech"
SUBJECT="Programming News"
SERVER="smtp.mycompany.com">
Dear #FirstName#,
Here are this month's programming tips
</CFMAIL>
<CFSET ListSent
= ListSent & " #FirstName# #LastName#
mailto:#ThisEmail# "
& CHR(13) &CHR(10) &
CHR(13) &CHR(10)>
</CFLOOP>
|
Di
atas kita juga menyimpan daftar pengiriman email ke dalam variabel ListSent.
Kita menambahkan nama dan email ke dalam variabel menggunakan tag
<CFSET>. Sepasang carriage return/linefeed pair (ASCII character 13
and 10) ditambahkan agar terpisah barisnya dalam output. Dengan demikian,
setelah looping selesai, kita kirimkan email yang berisi daftar email yang
terkirim dengan menggunakan tag <CFMAIL> :
<CFMAIL
TO="marketing@perusahaanku.com"
FROM="info@perusahaanku.com"
SUBJECT="Auto
emails"
SERVER="smtp.mycompany.com">
Sending followup email on #dateformat(now())#
Name Email
#listsent#
</CFMAIL>
|
Mengapa
kita harus mengirimkan email yang terakhir ini? Jika kita akan menggunakan
jadwal untuk menjalankan program diatas dengan schedule tertentu dengan
menggunakan <CFSCHEDULE>, maka kita tidak dapat mengamati langsung proses
yang terjadi. Jadi cara satu-satunya adalah dengan mengirimkan email seperti
pada program terakhir di atas. Dengan demikian kita dapat mengikuti
perkembangan, tanpa harus mengecek database.
Saya
biasanya menggunakan CFMAIL yang tersembunyi untuk mengirimkan error. Bagaimana
kita tahu bahwa program kita tidak berjalan tanpa ada yang memberitahu? Dengan
error handling ditambah CFMAIL kita dapat mengetahuinya!
Note:
<CFMAIL> mempunyai sebuah parameter QUERY parameter yang memungkinkan
untuk mengirimkan email ke setiap record dalam sebuah query, akan tetapi saya
memilih metoda CFLOOP diatas agar lebih mudah untuk dirubah dan dikendalikan.
Protokol Internet Lainnya
Sebagai
tambahan pengiriman email ColdFusion, dibawah ini adalah beberapa standard
internet protokol. Termasuk diantaranya penerimaan email menggunakan POP,
mengambil data dari web serta pencarian direktori. Dibawah ini ringkasannya.
Mengirim E-mail
(SMTP)
<CFMAIL>
|
Secara
dinamis membuat serta mengirimkan email. Menggunakan informasi statis, form
input atau hasil query untuk mengendalikan alamat dan isi email. Pengiriman
beratus-ratus email yang dicustom dalam satu kali pengiriman. Memudahkan
pembuatan email HTM untuk aplikasi groupware dan workflow.
|
Mengambil
E-mail
<CFPOP>
|
Mengambil
email dari server POP dan menggabungkannya dengan aplikasi ColdFusion.
Memungkin interface aplikasi e-mail berbasis web, otomatisasi pengambilan dan
penyebarluasan email dan aplikasi email yang pintar, seperti auto responder
dan 'listserv'. Mendukung semua server POP, meninggalkan email tetap dalam
server, mengambil email-email tertentu, menghapus dan attachment.
|
Mengambil
Halaman Web
<CFHTTP>
|
Interface
ke Web server menggunakan HTTP. Membuat query distribusi dan
membuat bentuk tertentu dengan aplikasi. Mendukung HTTP GET and
POST, termasuk file attachment, dan membuat 'recordsets' dari hasilnya.
Juga mendukung standard Web server authentication dan SSL encryption.
|
Direktori
<CFLDAP>
|
Interface
dengan server direktori yang mendukung Lightweight Directory Access Protocol
(LDAP) seperti Netscape's Directory Server, Microsoft's Exchange Server,
Windows NT directory, Novell NDS directories, Banyan Vines, dan lusinan
Internet-based lainnya. Mendukung search, add, update, delete, authenticated
access, etc.
|
Kesimpulan
CFMAIL
memudahkan kita untuk mengirimkan email ke satu atau banyak tujuan dan dapat
digabungkan dengan program query mail merge.
LOOP
DAN LIST
What
is ColdFusion
Dalam
artikel ini kita lanjutkan membahas apa ColdFusion dan bagaimana kita
gunakan untuk membangun website yang dinamis. Kita akan membahas berbagai jenis
loop dan kemudahan dalam penanganan list.
Looping
in ColdFusion
Looping
adalah teknik yang paling sering digunakan dalam teknik pemrograman untuk
mengulang sekumpulan instruksi atau menampilkan output berulang-ulang sampai
kondisi yang diinginkan tercapai. ColdFusion mengimplementasi looping dengan
perintah <CFLOOP> tag. Lima jenis looping yang disediakan:
- Index Loops
- Conditional Loops
- Looping over a Query
- Looping over a List
- Looping over a COM Collection or
Structure
Jenis
loop akan ditentukan dari cara pemakaian attribute dalam <CFLOOP> tag
seperti yang diterangkan di bawah ini.
Index loops
Sebuah
index loop akan melakukan pengulangan yang ditentukan oleh range dari nilai
numerik. Index loops dikenal sebagai looping FOR, seperti "loop FOR
untuk rentang nilai berikut ini." Syntax umumnya sebagai berikut:
<CFLOOP INDEX="parameter_name"
FROM="beginning_value"
TO="ending_value"
STEP="increment">
HTML or CFML code to repeat
</CFLOOP>
Sebagai
contoh jika kita akan membuah list box untuk dua buah field form jam dan menit
(dari 0 sampai 23 dan 0 sampai 59(, kita akan dua tag CFLOOP sebagai berikut:
<SELECT NAME="Hour">
<CFLOOP INDEX="hour" FROM="0" TO="23">
<CFOUTPUT>
<OPTION VALUE="#hour#">#hour#
</CFOUTPUT>
</CFLOOP>
</SELECT>
:
<SELECT NAME="Minute">
<CFLOOP INDEX="minute"FROM ="0" TO="59">
<CFOUTPUT>
<OPTION VALUE="#minute#">#minute#
</CFOUTPUT>
</CFLOOP>
</SELECT>
Script
diatas akan menghasilkan dua list box berdampingan, yang pertama denga 24 item
dan yang lainnya 60 item. Jika kita inginkan hanya satu list box denga jam
dan menit bersamaan (ada 1440 item), kita lakukan nested pada looping kita sebagai berikut:
<SELECT NAME="HourAndMinutes">
<CFLOOP INDEX="hour" FROM="0" TO="23">
<CFLOOP INDEX="minute" FROM="0" TO="59">
<CFOUTPUT>
<OPTION VALUE="'#hour#:#minute#'">#hour#:#minute#
</CFOUTPUT>
</CFLOOP>
</CFLOOP>
</SELECT>
Kita
memasukan tanda ' dalam nilainya, karena kita inginkan nilai yang diberikan
dalam bentuk string seperti '12:25'. Kita juga mengabaikan paramaeter STEP,
karena nilai defaultnya adalah satu.
Jika
anda mencoba untuk menggunakan kode di atas ini, bersiaplah untuk menunggu
sebentar karean ada lebih dari seribu item dan ini sama sekali tidak user
friendly dan mungkin memakan waktu untuk menampilkannya bahakan crash dalam
browser versi lama!
Conditional Loops
Conditional
loop akan mengulang satu set instruksi sapai kondisi TRUE diberikan. Jumlah
pengulangan mungkin tidak dapat diketahui dengan pasti pada saat
penulisan kode, dan hal ini sangat berbeda dengan index loop. Jika untuk
menghindari pengulangan tak terhingga, anda harus mengubah kondisi agar kondisi
yang dievaluasi tidak selalu FALSE. Conditional loops dikenal sebagai WHILE
loops, sebagai “loop WHILE kondisi ini benar/true.”
Kita
ambil contoh untuk menampilkan angka random. Salah satu cara adalah dengan loop
sampai angka random lebih besar dari angka yang diberikan.
<CFSET StopIt = 0>
<CFLOOP CONDITION="StopIt LESS THAN OR EQUAL TO 5">
<CFSET StopIt = RandRange(1,10)>
<HR>
</CFLOOP>
Jika
diinginkan keluar dari loop, dapat digunakan perintah <CFBREAK>
Looping dari sebuah Query
Sebuah
loop query akan mengulang untuk setiap record dari record set hasil
query. Hasil CFLOOP seperti hasil dari CFOUTPUT. Selama iterasi dari
loop, kolom akan tersedia untuk dikeluarkan.
Mengapa
kita harus menggunakan CFLOOP dibanding CFOUTPUT? Kelebihan looping query
adalah tag <CFOUTPUT> tidak dapat diperbolahkan untuk digunakan dalam
sebuah <CFOUTPUT> tag sebelumnya. Sebagai contoh, kita iterasi alamat
email dan untuk setiap email tersebut kita kirim pesan.
<CFQUERY NAME="GetEmail"
DATASOURCE="Library">
SELECT Email , SecurityLevel
FROM Customer
</CFQUERY>
<CFLOOP QUERY="GetEmail">
<CFQUERY NAME="GetText"
DATASOURCE="Library">
SELECT EmailText, EmailSubject
FROM Messages
WHERE SecurityLevel = #GetEmail.SecurityLevel#
</CFQUERY>
<CFMAIL QUERY="GetText"
TO="#GetEmail.Email#"
FROM="info@mycompany.com"
SUBJECT="#GetText.EmailSubject#"
SERVER="smtp.mycompany.com">#GetText.EmailText#
</CFMAIL>
</CFLOOP>
Dalam
contoh ini kita melakukan pengulangan terhadap email address customer dan
subyek serta isi email tergantung dari tingkat security yang dimilikinya. jika
kita ganti CFLOOP dengan CFOUTPUT, maka coldfusion akan menghasilkan error.
Looping terhadap sebuah List
Looping
terhadap sebuah list akan menjalankan pengulangan sebuah list yang biasanya
dipisah oleh tanda koma. Dalam sebuah list loop, attribute INDEX
menspesifikasi nama sebuah variabel yang akan menerima nilai dan attribute LIST
akan berisi sebuah list.
Kapan
list akan digunakan? Biasanya adalah multi-select list box atau check boxes
dari halaman sebelumnya. Dalam contoh kita generate sebuah list dari keadaan
dari sebuah tabel dalam database.
<CFQUERY NAME="StateNames"
DATASOURCE="Library">
SELECT State_ID, StateName
FROM States
</CFQUERY>
<FORM ACTION="example.cfm" METHOD="Post">
<SELECT NAME="state" MULTIPLE>
<CFOUTPUT QUERY="StateNames">
<OPTION VALUE="’#State_ID#’">#StateName#
</CFOUTPUT>
</SELECT>
<INPUT TYPE="submit" VALUE="Submit">
</FORM>
Saat
form ini di submit, form ini akan menyampaikan kondisi dari State_ID tyang
terpilih dalam sebuah comma delimited list.
Untuk
mengambil keadaan ini dalam halaman beriktunya kit proses list sebagai berikut:
<H2>The following states were selected</H2>
<CFSET extraSQL = ‘FALSE’>
<CFLOOP INDEX="ListElement"
LIST="#form.state#"
DELIMITERS=",">
<CFOUTPUT>#ListElement#</CFOUTPUT><BR>
<CFSET extraSQL = extraSQL & “ OR
State_ID = ‘#PreserveSingleQuotes(ListElement)#’”>
</CFLOOP>
ColdFusion
List functions
ColdFusion
mempunya support yang handal untuk menangani list ini. Dibawah ini fungsi list
yang tersedia.
ListAppend
|
Mengembalikan
list dengan menambahkan sebuah nilai di akhir elemen.
|
ListPrepend
|
Mengembalikan
list dengan menyisipkan sebuah nilai di awal serta menggese semua elemen ke
kanan.
|
ListInsertAt
|
Mengembalikan
list dengan nilai disisipkan pada posisi yang ditentukan.
|
ListSetAt
|
Mengembalikan
list dengan memberikan nilai pada sebuah elemen di posisi tertentu.
|
ListGetAt
|
Mengembalikan
nilai elemen pada posisi yang ditentukan.
|
ListFirst
|
Mengembalikan
nilai elemen pertama dari list.
|
ListLast
|
Mengembalikan
nilai elemen terakhir dari list.
|
ListRest
|
Mengembalikan
list tanpa elemen pertama. Mengembalikan list kosong jika list tersebut hanya
memiliki satu elemen.
|
ListDeleteAt
|
Mengembalikan
list dengan menghapus terlebih dahulu elemen pada posisi tertentu.
|
ListFind
|
Mengembalikan
index dari temuan pertama dalam sebuah list. Mengembalikan 0 jika tidak
ditemukan. Search ini case-sensitive.
|
ListFindNoCase
|
Mengembalikan
index dari temuan pertama dalam sebuah list. Mengembalikan 0 hika tidak
ditemukan. Search ini tidak case-sensitive.
|
ListContains
|
Mengembalikan
index dari elemen pertama yang mengandung substring yang ditentukan dalam
elemen. Search ini case-sensitive. Jika ditemukan, mengembalikan 0.
|
ListContainsNoCase
|
Mengembalikan
index dari elemen pertama yang mengandung substring yang ditentukan dalam
elemen. Search ini tidak case-sensitive. Jika ditemukan, mengembalikan 0.
|
ListChangeDelims
|
Mengembalikan
list dengan delimiter diubah menjadi delimiter baru.
|
ListToArray
|
Mengubah
list tertentu, dengan delimiter yang ditentukan, menjadi sebuah array.
|
ArrayToList
|
Mengubah
array satu dimensi, menjadi list dengan delimiter yang ditentukan.
|
ReplaceList
|
Mengembalikan
string dengan mengganti semua elemen yang ditemukan dengan elemen lain yang
berhubungan. Search ini case sensitive.
|
ListLen
|
Mengembalikan
jumlah elemen dalam sebuah list.
|
QuotedValueList
|
Mengembalikan
list dengan delimiter koma dari nilai yang sebelumnya dieksekusi dari query.
Setiap nilai akan ditutup dengan tanda kutip.
|
ValueList
|
Mengembalikan
list dengan delimiter koma dari setiap nilai yang dikembalikan oleh query
terdahulu.
|
GetClientVariablesList
|
Mengembalikan
list dengan delimiter koma dari variabel client non-readonly sehingga siap
untuk sebuah template.
|
<CFQUERY NAME="GetCustomers"
DATASOURCE="Library">
SELECT *
FROM Customer
WHERE #PreserveSingleQuotes(extraSQL)#
</CFQUERY>
Jika
keadaan yang dipilih adalah MD, VA dan DC maka kode di atas akan mengenerate
HTML berikut:
<H2>The following states were selected</H2>
MD<BR>
VA<BR>
DC<BR>
Dan
query statement-nya akan menjadi:
SELECT *
FROM Customer
WHERE FALSE OR State_ID = ‘MD’ OR State_ID = ‘VA’ OR State_ID = ‘DC’
Harap
diperhatikan bahwa kita menggunakan nilai awal FALSE untuk variabel extraSQL
variable sehingga kode di atas akan tetap bekerja walaupun listnya kosong atau
berisi. Tanda kutip satu diperlukan untuk mencegah penggandaan dari tanda
tersebut.
Walaupun
CFLOOP pada dasarnya menggunakan elemen tanda koma sebagai default, kita dapat
bebas merubah tanda separasi dengan mengisi nya pada attribut DELIMITER.
Bahkan kita dapat menggunakannya beberapa tanda pemisah sekaligus.
Sebenarnya
kita juga dapat menggunakan hal yang lebih mudah, yaitu memanfaat perintah SQL
IN.
SELECT *
FROM Customer
WHERE State_ID IN (#PreserveSingleQuotes(Form.state)#)
Dalam
contoh kita di atas, SQL statement yang dikirim ke database akan seperti:
SELECT *
FROM Customer
WHERE State_ID IN (‘DC’,‘MD’,‘VA’)
Looping terhadap sebuah COM Collection atau Structure
Walaupun
teknik ini ada berada di atas tingkatan dari artikel ini, anda harus tahu bahwa
CFLOOP dapat melakukan pengulangan terhadap structure atau obyek COM/DCOM
collection. Untuk yang selalu ingin tahu sebuah obyek COM/DCOM collection
adalah sebuah set dari item yang biasa yang direferensikan sebagai sebuah
group.