coldfusion ii
DESCRIPTION
guideTRANSCRIPT
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
11
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"
12
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>
13
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
14
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.
1. Saat user meminta halaman dalam aplikasi ColdFusion
dengan submit sebuah form atau klik hyperlink, browser si
15
suer mengirimkan sebuah request HTTP ke Web server
melalui Internet atau Intranet.
2. 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.
3. 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.
4. ColdFusion secara dinamis men-generate sebuah halaman
HTML dan mengembalikan ke web server.
5. 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
16
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
17
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,
18
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
19
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
20
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
21
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:[email protected]">[email protected]</A>)<BR>
<HR>
John Smith
(Email: <A
HREF="mailto:[email protected]">[email protected]</A>)<BR>
<HR>
Frank Wilson
(Email: <A
HREF="mailto:[email protected]">[email protected]</A>)<BR>
Dalam standar HTML, <A HREF> tag dengan mailto: URL akan
memberi email link dalam halaman.
Menampilkan Output Query dalam Tabel
22
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.
23
<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:[email protected]”
[email protected]</A></TD>
<TR>
...
</TABLE>
Dalam browser kita, akan kita lihat seperti ini:
First Name Last Name Email
Deborah Jones [email protected]
John Smith [email protected]
Frank Wilson [email protected]
Menggunakan Parameter Dinamis dalam SQL Statement
24
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'
25
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.
26
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.
27
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
28
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="[email protected]"
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#',
29
'#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">
30
<!--- for testing uncomment the next line --->
<!--- cfset ThisEmail="[email protected]"--->
<CFSET ThisEmail=email>
<CFMAIL TO="#ThisEmail#"
FROM="<[email protected]> 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="[email protected]"
FROM="[email protected]"
SUBJECT="Auto emails"
SERVER="smtp.mycompany.com">
Sending followup email on #dateformat(now())#
31
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.
32
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
33
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
34
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:
35
<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
36
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
37
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="[email protected]"
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
38
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.
39
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.
40
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
41
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
42
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.
GetClientVariablesLis
t
Mengembalikan list dengan
delimiter koma dari variabel
client non-readonly sehingga
siap untuk sebuah template.
<CFQUERY NAME="GetCustomers"
DATASOURCE="Library">
SELECT *
43
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.
44
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.
45