構造体の例

構造体は、複数の変数を 1 つの名前でグループ化するときに役立ちます。次の例では、構造体を使用してフォームから情報を収集 し、 その情報を cf_addemployee というカスタムタグに送信します。カスタムタグの作成および使用については、カスタム CFML タグの作成と使用を参照してください。

サンプルファイル newemployee.cfm

次の ColdFusion ページでは、構造体を作成し、それを使用してデータベースにデータを追加しています。このページで呼び出している cf_addemployee というカスタムタグは、addemployee.cfm ファイルで定義します。

<head> 
<title>Add New Employees</title> 
</head> 

<body> 
<h1>Add New Employees</h1> 
<! --- Action page code for the form at the bottom of this page.---> 

<! --- Establish parameters for first time through ---> 
<cfparam name=&quot;Form.firstname&quot; default=&quot;&quot;> 
<cfparam name=&quot;Form.lastname&quot; default=&quot;&quot;> 
<cfparam name=&quot;Form.email&quot; default=&quot;&quot;> 
<cfparam name=&quot;Form.phone&quot; default=&quot;&quot;> 
<cfparam name=&quot;Form.department&quot; default=&quot;&quot;> 

<! --- If at least the firstname form field is passed, create 
a structure named employee and add values.---> 
<cfif #Form.firstname# eq &quot;&quot;> 
<p>Please fill out the form.</p> 
<cfelse> 
<cfoutput> 
<cfscript> 
employee=StructNew(); 
employee.firstname = Form.firstname; 
employee.lastname = Form.lastname; 
employee.email = Form.email; 
employee.phone = Form.phone; 
employee.department = Form.department; 
</cfscript> 

<! --- Display results of creating the structure.---> 
First name is #StructFind(employee, &quot;firstname&quot;)#<br> 
Last name is #StructFind(employee, &quot;lastname&quot;)#<br> 
EMail is #StructFind(employee, &quot;email&quot;)#<br> 
Phone is #StructFind(employee, &quot;phone&quot;)#<br> 
Department is #StructFind(employee, &quot;department&quot;)#<br> 
</cfoutput> 

<! --- Call the custom tag that adds employees. ---> 
<cf_addemployee empinfo=&quot;#employee#&quot;> 
</cfif> 

<! --- The form for adding the new employee information ---> 
<hr> 
<form action=&quot;newemployee.cfm&quot; method=&quot;Post&quot;> 
First Name:&nbsp; 
<input name=&quot;firstname&quot; type=&quot;text&quot; hspace=&quot;30&quot; maxlength=&quot;30&quot;><br> 
Last Name:&nbsp; 
<input name=&quot;lastname&quot; type=&quot;text&quot; hspace=&quot;30&quot; maxlength=&quot;30&quot;><br> 
EMail:&nbsp; 
<input name=&quot;email&quot; type=&quot;text&quot; hspace=&quot;30&quot; maxlength=&quot;30&quot;><br> 
Phone:&nbsp; 
<input name=&quot;phone&quot; type=&quot;text&quot; hspace=&quot;20&quot; maxlength=&quot;20&quot;><br> 
Department:&nbsp; 
<input name=&quot;department&quot; type=&quot;text&quot; hspace=&quot;30&quot; maxlength=&quot;30&quot;><br> 

<input type=&quot;Submit&quot; value=&quot;OK&quot;> 
</form> 
<br> 
</body> 
</html>

コードの説明

このコードについて、次の表で説明します。

コード

説明

<cfparam name="Form.lastname" default="">
<cfparam name="Form.email" default="">
<cfparam name="Form.phone" default="">
<cfparam name="Form.department" default="">

すべてのフォームフィールドにデフォルト値を設定します。これによって、このページが最初に表示された時点でそれらが確実に存在し、テストできるようにしています。

<p>Please fill out the form.</p>

firstname フィールドの値をテストします。このフィールドは必須です。このページが最初に表示された時点では、テストは False になります。Form.firstname 変数にデータが存在しない場合は、フォームへの入力を求めるメッセージを表示します。

<cfoutput>
<cfscript>
employee=StructNew();
employee.firstname = Form.firstname;
employee.lastname = Form.lastname;
employee.email = Form.email;
employee.phone = Form.phone;
employee.department = Form.department;
</cfscript>

<! --- Display results of creating the structure.--->
First name is #StructFind(employee, " firstname ")#<br>
Last name is #StructFind(employee, " lastname ")#<br>
EMail is #StructFind(employee, "email")#<br>
Phone is #StructFind(employee, "phone")#<br>
Department is #StructFind(employee, "department")#<br>
</cfoutput>

Form.firstname にテキストが含まれている場合は、ユーザーからフォームが送信されています。CFScript を使用して構造体 employee を作成し、フォームフィールドのデータを代入します。次に、この構造体の内容を表示します。

</cfif>

cf_addemployee カスタムタグを呼び出して、employee 構造体のコピーを  empinfo  属性に渡します。duplicate 関数を使用することで、元の employee 構造体ではなく、その複製をカスタムタグに渡しています。このテクニックを使用しなくてもこの例は正常に動作しますが、呼び出しページの構造体の内容がカスタムタグによって変更されるのを防止できるので、常にこのテクニックを使用することをお勧めします。

First Name:&nbsp;
<input name="firstname" type="text" hspace="30" maxlength="30"><br>
Last Name:&nbsp;
<input name="lastname" type="text" hspace="30" maxlength="30"><br>
EMail:&nbsp;
<input name="email" type="text" hspace="30" maxlength="30"><br>
Phone:&nbsp;
<input name="phone" type="text" hspace="20" maxlength="20"><br>
Department:&nbsp;
<input name="department" type="text" hspace="30" maxlength="30"><br>

<input type="Submit" value="OK">
</form>

データフォーム。ユーザーが [OK] をクリックすると、フォームのデータがこの ColdFusion ページに送信されます。

サンプルファイル addemployee.cfm

次のファイルは、従業員を追加するカスタムタグの例です。従業員の情報は、employee 構造体(empinfo 属性)によって渡されます。キーの自動生成機能がサポートされていないデータベースでは、Emp_ID も追加します。

<cfoutput>
Error.No employee data was passed.<br>
</cfoutput>
<cfexit method=&quot;ExitTag&quot;>
<cfelse>
<! --- Add the employee --->
<cfquery name=&quot;AddEmployee&quot; datasource=&quot;cfdocexamples&quot;>
INSERT INTO Employees
(FirstName, LastName, Email, Phone, Department)
VALUES (
'#attributes.empinfo.firstname#' ,
'#attributes.empinfo.lastname#' ,
'#attributes.empinfo.email#' ,
'#attributes.empinfo.phone#' ,
'#attributes.empinfo.department#' )
</cfquery>
</cfif>
<cfoutput>
<hr>Employee Add Complete
</cfoutput>

コードの説明

このコードについて、次の表で説明します。

コード

説明

<cfoutput>
Error.No employee data was passed.<br>
</cfoutput>
<cfexit method="ExitTag">

empinfo 属性が指定されずにカスタムタグが呼び出された場合は、エラーメッセージを表示してタグを終了します。

<! --- Add the employee --->
<cfquery name="AddEmployee" datasource="cfdocexamples">
INSERT INTO Employees
(FirstName, LastName, Email, Phone, Department)
VALUES (
'#attributes.empinfo.firstname#' ,
'#attributes.empinfo.lastname#' ,
'#attributes.empinfo.email#' ,
'#attributes.empinfo.phone#' ,
'#attributes.empinfo.department#' )
</cfquery>
</cfif>

empinfo 構造体に渡された従業員データを、cfdocexamples データベースの Employees テーブルに追加します。StructFind 関数ではなく、構造体エントリへの直接参照を使用します。データベースで Emp_ID キーの自動生成がサポートされていない場合は、Emp_ID エントリをフォームに追加し、クエリにも追加します。

<hr>Employee Add Complete
</cfoutput>

終了メッセージを表示します。このコードは、cfelse ブロックの内側に置く必要はありません。empinfo 構造体が空の場合は cfexit タグが実行されるので、このコードが実行されることはありません。

ヘルプをすばやく簡単に入手

新規ユーザーの場合

Adobe MAX 2025

Adobe MAX Japan
クリエイターの祭典

2025 年 2 月 13 日
東京ビッグサイト