coldfusion ii

43
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 11

Upload: muhammad-wahyu

Post on 03-Jan-2016

155 views

Category:

Documents


11 download

DESCRIPTION

guide

TRANSCRIPT

Page 1: ColdFusion II

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

Page 2: ColdFusion II

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

Page 3: ColdFusion II

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

Page 4: ColdFusion II

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

Page 5: ColdFusion II

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

Page 6: ColdFusion II

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

Page 7: ColdFusion II

 

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

Page 8: ColdFusion II

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

Page 9: ColdFusion II

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

19

Page 10: ColdFusion II

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

Page 11: ColdFusion II

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

Page 12: ColdFusion II

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

Page 13: ColdFusion II

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

Page 14: ColdFusion II

<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

Page 15: ColdFusion II

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

Page 16: ColdFusion II

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

Page 17: ColdFusion II

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

Page 18: ColdFusion II

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

Page 19: ColdFusion II

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

Page 20: ColdFusion II

'#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

Page 21: ColdFusion II

<!--- 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

Page 22: ColdFusion II

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

Page 23: ColdFusion II

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

Page 24: ColdFusion II

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

Page 25: ColdFusion II

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

Page 26: ColdFusion II

<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

Page 27: ColdFusion II

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

Page 28: ColdFusion II

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

Page 29: ColdFusion II

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

Page 30: ColdFusion II

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

Page 31: ColdFusion II

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

Page 32: ColdFusion II

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

Page 33: ColdFusion II

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

Page 34: ColdFusion II

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

Page 35: ColdFusion II

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