ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Business Process Management Business Process Composerユーザーズ・ガイド
11g リリース1 (11.1.1.7)
B61410-08
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

10 Webフォーム・ルールの使用

この章では、Oracle Business Process Composerを使用してWebフォーム内でフォーム・ルールを作成および編集する方法について説明します。フォーム・ルールは、ユーザーとWebフォームとの相互作用を定義するJava-scriptコードです。この章では、JavaScriptの基本を理解していることを前提としています。

この章の構成は、次のとおりです。

10.1 フォーム・ルールの概要

フォーム・ルールを作成して、Webフォームの動作を定義できます。一般に、フォーム・ルールは次の場合に使用します。

フォーム・ルールとは、Webフォーム・コントロールの表示方法、ユーザーが入力できるデータのタイプなどを定義することで、ユーザーがWebフォームと対話する方法を定義できるサーバー側のJavascriptコードです。

次の項では、フォーム・ルールに含まれるJavascriptの基本機能について説明します。フォーム・ルールの特定のユース・ケースについては、付録D「Webフォーム・ルールの例」を参照してください。

10.1.1 フォーム・ルールのJavascript構文

Oracle BPMでは、フォーム・ルールはJavaScriptコードです。BPMプロジェクトを保存した後にフォーム・ルールが保存され、実行可能になります。

通常、フォーム・ルールには次のフォームがあります。

if (condition) 
{    
    true actions;
} 
else 
{   
    false actions; 
}

主に繰返しアイテムをループ処理する目的で高度なフォーム・ルールを作成できます。フォーム・ルールを作成するときに認識する必要があるJavaScriptの基本的な特徴を次に示します。

  • 大/小文字の区別: Javascriptコマンドは大文字小文字を区別します。たとえば、var color1とvar Color1は2つの異なる変数です。

  • 緩いタイプ指定の変数: Javascript変数のタイプは緩く指定されます。変数のタイプは明示的に宣言する必要はありません。たとえば、var color = 'red';およびvar num = 33と指定すると、変数colorは文字列タイプ、numは数値タイプになります。

  • 行末のセミコロン: 行末のセミコロンはオプションです。ただし、適切なコーディングの一部として行を終了するには、セミコロンを使用する必要があります。多くの場合、これにより間違いを防ぐことができます。

  • コメント: //または/* */の記号を使用して、コードにコメントを追加できます。

Oracle BPMでは次のJavascript構文はサポートされていません。

  • switch文

さらに、Oracle BPMではいくつかの制限付きで次の構文がサポートされています。

  • try-catch

たとえば、次の例では、xという名前のJavaScript変数はこのフォーム・ルールでは未定義のため、"FN"という名前のコントロールの値は'got exception'に設定されます。

if (form.load) {   
    try {     
        x.randomproperty = 'blah';   
    } catch (e) {     
        FN.value = 'got exception';   
    } 
}

ただし、フォーム・コントロールが未定義の場合の例外の捕捉はサポートされていないため、予期しない動作が発生する可能性があります。これは、JavaScriptインタープリタでエラーが捕捉される前に、フォーム・ルールの解析中にOracle BPMで問題が捕捉されるためです。

次の例では、Colorという名前のコントロールはフォームに存在しません。

if (form.load) {   
    try {     
        Color.value = "red";   
    }   catch(e) {     
        msg1.value = "error caught: " + e;   
    } 
}

10.1.1.1 コントロール名

多くの場合、フォーム・ルールはフォーム・コントロールを参照する必要があります。コントロールのnameプロパティを使用して、コントロールに名前を割り当てる必要があります。

名前は大文字と小文字が区別されます。コントロールがFirstNameという名前の場合、フォーム・ルールをFirstName.valueとして作成する必要があります。firstname.valueは機能しません。

フォーム・ルールでコントロールを使用する場合、コントロールが一意の名前になっていることを確認する必要があります。複数のコントロールが同じ名前を持つ場合、ランタイム環境ではフォーム・ルールが参照するコントロールを判別できません。パレットからフォームに追加したフォーム・コントロールは、通常、一意の名前が保証されます。フォームにすでに存在するコントロールの名前に変更することは、Webフォーム・エディタでは許可されません。

ただし、状況によっては、同じ名前の複数のコントロールを使用できる場合があります。

  • XSDデータ・ソースから追加されたコントロール

  • カスタム・パレットから追加されたコントロール

  • セクションにネストされたコントロール

同じラベルで同じレベルにある2つのコントロールがある場合、コントロールの名前は自動的に一意になります。一意にならないように名前を編集しようとすると、Webフォーム・デザイナにより、変更は許可されません。

コントロールがセクション・コントロール内にドロップされた場合、セクションの外側にドロップされたコントロールとは別のネスト・レベルとなります。また、セクション内とセクション外の2つのコントロールも、異なるネスト・レベルになります。Webフォーム・デザイナでは、このようなコントロールに同じ名前を指定できます。

ただし、フォーム・ルールで一意ではない名前のコントロールが使用された場合、予期しない結果を生じます。フォームでエラーが発生した場合、一意になるようにコントロール名を編集できます。


注意:

フォームの名前を編集しても、xsdスキーマ・コントロールは、フォームの発行時またはxml検証時に作成されたxmlインスタンス・ドキュメントには影響しません。


10.1.1.2 フォーム・ルール識別子

フォーム・ルールは名前プロパティを使用してフォーム・コントロールを参照します。名前プロパティがMyControlと定義されているコントロールであれば、この名前を識別子として使用してフォーム・ルール内でこのコントロールのプロパティを参照できます。

フォーム・ルール識別子は、必ず次の形式である必要があります。

Name.<property>

次のフォーム・ルール識別子がサポートされています。

  • visible: コントロールを非表示にする場合はfalse、コントロールを表示する場合はtrueに設定します。

  • value: コントロールの値を読み取るか設定します。このプロパティは、セクション、タブ、またはユーザーに対して表示される値がないその他のコントロールに対しては無効です。

  • enabled: ユーザーが値を変更できないようにコントロールを無効化(グレー表示)する場合はfalse、コントロールを有効化する場合はtrueに設定します。これは、セクションとタブに対しては無効です。

  • expanded: グループ・コントロール(セクション・コントロールのみ)を縮小する場合はfalse、グループ・コントロールを拡張する場合はtrueに設定します。

  • selected: タブを選択された状態にする場合、trueに設定します(タブ・コントロールのみ)。

  • valid: コントロールに有効な値が含まれる場合、このプロパティの値はtrueです。それ以外の場合はfalseです。妥当性はコントロールのタイプに基づきます。たとえば、ユーザーが数値に変換できない文字列値を入力すると、数値コントロールは無効になります。このプロパティは設定および読み取ることができます。

  • required: コントロールを必須にし、赤いアスタリスクを表示する場合は、trueに設定します。このプロパティは、パレット・コントロールにのみ影響し、XSDスキーマ・データ・ソースから生成されたコントロールには影響しません。

    このプロパティは、セクション・コントロールに対しても有効です。セクションrequiredをfalseに設定すると、すべての内部コントロールがnot requiredに自動的に設定されます。

  • options: 選択コントロール・オプションを動的に設定できます(ラジオ、ドロップダウンおよびチェック・ボックス・コントロールのみ)。

  • label: セクションを含む任意のコントロールに表示されるラベルを設定します。

  • help: ヘルプ・テキストを設定します。

  • hint: マウスを置いて表示されるヒントを設定します。

  • status: コントロールの値が無効な場合に表示されるエラー・メッセージを設定します。

  • clicked: トリガー・コントロールによって使用されます。初期状態はfalseです。ユーザーがトリガーをクリックすると、状態がtrueになります。

  • printable: 印刷可能なビューとPDF提出文書の両方からコントロールを削除する場合は、falseに設定します。

  • itemAdded: 繰返しコントロールによって使用されます。初期状態はfalseです。ユーザーが「+」をクリックして繰返しアイテムを追加し、フォームのロード時にドキュメントURIを経由して繰返しアイテムが追加されると、状態がtrueになります。

  • itemRemoved: 繰返しコントロールによって使用されます。初期状態はfalseです。ユーザーが「-」をクリックして繰返しアイテムを削除すると、状態がtrueになります。

  • itemIndex: 繰返しコントロールによって使用されます。itemAddedまたはitemRemovedイベントが起動されると、itemIndexの値が設定されます。itemRemovedイベントの場合、itemIndexは-1を返します。itemAddedイベントの場合、itemIndexは追加されたアイテムの索引を返します。

  • form.load: フォームが初めてロードされる場合、このプロパティはtrueです。ユーザーがフォームとの対話を開始する前に設定する必要があるフォーム・ルールを使用してデフォルト値を設定する場合に便利です。

  • form.unload: ユーザーがフォームの発行ボタンをクリックすると、このプロパティはtrueになります。フォームのドキュメント・アクションおよびフォーム・アクションを実行する直前にコントロール値を設定する場合に便利です。

フォーム・ルールで使用される識別子の例を次に示します。

  • FirstName.value

  • BillingAddress.visible

  • Email[1].value

  • Email[i].visible

後半の2つは、繰返しコントロールの例です。繰返しコントロールの詳細を次に示します。プロパティの大/小文字は重要です。FirstName.valueは有効なフォーム・ルール識別子ですが、FirstName.ValueおよびFirstName.vAlUeは無効です。

10.1.1.3 文字列と数値

Javascriptはタイプが緩く指定された言語であるため、フィールド値やフォーム・ルールを追加しようとすると、かわりに文字列が連結される場合があります。文字列操作ではなく、算術計算を実行するということをフォーム・ルールに知らせる複数の方法があります。簡単な方法としては、変数に*1を追加します。id = id*1 + 1;と指定することで、idは現在の値に1が付加された値ではなく、現在の値に1を加算した値になります。例: 現在の値が4の場合、id*1と記述しないと、結果は5ではなく41になる可能性があります。

フォーム・ルールでは、通貨コントロールが加算ではなく文字列連結を実行する場合もあります。この問題を修正するには、次のようにします。

  • フォーム・ルールを含むフォームをデザイナで開き、通貨コントロールをテキスト・コントロールに変更した後フォームを保存します。

  • フォームを開き、テキスト・コントロールを通貨コントロールに戻してから、フォームを再び保存します。

10.1.1.4 条件の作成

最も一般的な条件の1つは、ユーザーがコントロールに値を入力するとただちに実行されるフォーム・ルールです。この条件のテストは、フィールドが文字列タイプか数値タイプかによって異なります。

文字列タイプ: テキスト、テキスト領域、日付、電話番号

if (name.value.length > 0)

数値タイプ: 通貨、数量、数値

if (name.value != null) or if (name.value > 0)

はどちらも一般的なテスト条件です。

多くの場合、条件name.value.length > 0は完全にドロップ可能であり、フォーム・ルールが簡素化されます。このフォーム・ルールは、ユーザーがfirstnameまたはlastnameという名前のコントロールに値を入力するたびに実行されます。

fullname.value = firstname.value + ' ' + lastname.value;

10.1.1.5 選択コントロール

ラジオ・コントロール、ドロップダウンおよびチェック・ボックスはすべて、選択コントロールの例です。ラジオ・コントロールおよびドロップダウン・コントロールは単一選択です。つまり、ドロップダウン内の1つのアイテムを選択すると、ドロップダウン内の他のアイテムはすべて選択解除されます。同じことがラジオにも当てはまります。いつでも押せるのは1つのラジオ・ボタンのみです。したがって、ラジオおよびドロップダウンのID.valueは、他の入力および出力コントロールに似ています。値は単一のアイテムです。

チェック・ボックス・コントロールは複数選択です。いつでも複数のアイテムを選択できます。つまり、チェック・ボックスのID.valueは1つの配列です。したがって、チェック・ボックスの有効な式は、値配列内のアイテムの数を返すID.value.lengthです。ID[0].valueはリスト内の最初のアイテムを取得し、ID[1].valueは2番目のアイテムを取得します(以下同様)。チェック・ボックスが1つのみのチェック・ボックス・コントロールがあり、そのチェック・ボックスが未選択の場合、配列には要素は含まれません。チェック・ボックス・コントロールの場合、ID.value.length == 0という式が便利です。ID.lengthは有効な式ではないことに注意してください。チェック・ボックス・コントロールは配列であるため、ID[0].value ==と記述するのは有効な式ではありません。これは、チェック・ボックス・コントロール内のオプションが未選択の場合、値は空の文字列にならないためです。単に配列に存在しなくなります。

10.1.1.6 コントロールの初期状態

フォーム内のすべてのコントロールは、visible、expanded、value、validおよびenabledの各プロパティのデフォルト・プロパティの初期状態にあります。ただし、フォーム・デザイナの「編集」タブでコントロールの初期状態を変更できます。コントロールの初期状態は複数の方法で変更できます。1つの方法としては、値を入力コントロールに関連付けます。これにより、フォームを使用モードで初めて開いたときにコントロールのデフォルト値が設定されます。グループ・コントロールを拡張または縮小するという方法もあります。これにより、初期拡張状態が設定されます。visibleおよびenabledプロパティのデフォルト状態は、コントロールの「プロパティの編集」パネルを使用して設定されます。「プロパティの編集」には、visibleおよびenabledプロパティが入力コントロールのように意味を持つコントロールのプロパティのチェック・ボックスがあります。

10.1.1.7 フォーム・ルールと繰返しコントロール

それ自体に繰返しコントロールが含まれる繰返しコントロールがフォームに存在する場合、フォーム・ルールを内側の繰返しコントロールに適用することはできません。これは、内側のどの繰返しアイテムが外側のどの繰返しアイテムと対になっているかを区別する方法がないためです。

10.1.2 フォーム・ルールでの動的コンテンツの使用

10.1.2.1 動的コンテンツ

多くの場合、実際のフォームではドロップダウン・リストに動的コンテンツが含まれている必要があります。通常、1つのフォーム・フィールドに入力された値に基づいて、選択コントロールで使用できる他のフィールドまたはオプションの値は動的である必要があります。

フォーム・ルールを使用すると、JSONオブジェクトを含むX-JSONヘッダーを返すhttp getsを呼び出すことができます。これにより、テキスト・コントロールや選択(ラジオ、ドロップダウン、チェック・ボックス)コントロールなど、フォーム・フィールドに移入されるデフォルト値の割当てが完全に柔軟になります。フォーム・ルールではhttp.post()、http.delete()およびhttp.put()を使用することもできますが、すべてのペイロードがサポートされているわけではないため、URLパラメータと組み合せて使用する必要があります。

http.getの構文を表示する例は次のとおりです。このフォーム・ルールでは、JSONオブジェクトを返す必要があるhttp getが呼び出されます。サーブレット上のメソッドは、itemPriceを取得するためにitemNameを指定してデータベースを問い合せるなど、必要な処理をすべて実行できます。この例では、返されるJSONオブジェクトにはpriceという名前のフィールドが含まれています。評価では、JSONオブジェクトがjavascript変数xに変換され、割り当てられます。その後、必要に応じてフォームでxを使用できます。この場合、値をPriceという名前のフォーム・フィールドに設定するために使用されます。

eval('x=' + http.get('http://<webhost>/test/json/getPrice?itemName=' + itemName.value));
Price.value = x.price;

http.getレスポンスで返されるJSONオブジェクトに、clientsという配列が含まれているという別の例を考えてみます。この配列を使用して、ドロップダウン・リストのオプションを設定できます。

eval('x=' + http.get('http://<webhost>/test/json/getClients')); 
Clients.options = x.clients;

ユーザー/パスワードの認証後にJSONオブジェクトを返すサーブレットの例もあります。

@Override
public void doGet (HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException 
{     
    try {  
        String u = request.getParameter("username");  
        String p = request.getParameter("password");
        if (authenticate(u, p) == null)   
                response.addHeader("X-JSON", "{auth:false}");  
        else   
                response.addHeader("X-JSON", "{auth:true}");   
    } catch (Exception e) {  
        throw new ServletException(e);   
    } 
} 
 

このサーブレットは、次のようにフォーム・ルールで使用できます。

if (signForm.clicked) 
{   
    eval('x=' + http.get('http://<webhost>/MYservices/signForm?username=' + u.value + '&password=' + p.value));    
    if (x.auth)   
    {     
        m.value = "<center>Authenticationn Succeeded</center>";   
    } else   
    {     
      m.value = "<center>Invalid username or password</center>";     
      } 
}

http.getはURLを介してhttpサービスにアクセスしていることに注意してください。特定の文字については、HTTP URLを介して正しく渡すためにエンコードする必要があります。ユーザーがフォーム・フィールドに入力する値は常に制御できるわけではありません。値にこのような文字の1つが含まれる場合、その値をエンコードする必要があります。

たとえば、このhttp.getにはパスワード・パラメータが含まれています。ユーザー・パスワードには「#」などの文字が含まれる可能性があるため、値をエンコードする必要があります。組込みのjavascriptメソッドencodeURIComponent()により、これを簡単に実行できます。

eval('x=' + http.get('http://<webhost>/MYservices/signForm?username=' +  
                         u.value + '&password=' + encodeURIComponent(p.value)));

HTTPサービスでURLパラメータをデコードする必要がある場合もあります。例:

import java.net.URLDecoder;
String p = request.getParameter("password"); 
p = URLDecoder.decode(password, "UTF-8");

10.1.2.2 動的コンテンツの再利用

バックエンド・システムから動的コンテンツを取得しようとすると、フォームのパフォーマンスが低下する原因になる可能性があります。フォームで動的コンテンツを複数回使用する必要がある場合、http.get()からコンテンツを1回取得し、返されたJSON文字列を非表示のテキスト・フォーム・コントロールに保存することで、パフォーマンスを向上できます。その後、バックエンド・システムを複数回呼び出さなくても、テキスト・コントロール値を読み取って再評価できます。

たとえば、jsonUserDataという名前のフォームに非表示のテキスト・コントロールを追加します。http.get():を介してバックエンド・システムからユーザー・データを取得する1行をフォーム・ルールに追加します。

jsonUserDate.value = x;

ユーザー・データを必要とする他のフォーム・ルールで、http.get()をバックエンド・システムに再度呼び出すのではなく、フォーム・ルールに次の行を追加します。

var val = jsonUserDate.value;   
    eval('x' = val);

これは、バックエンド・システムからコンテンツを再び取得したのと同じように、xを同じ文字列に設定する効果があります。

10.1.3 フォーム・ルールでのデータ・メソッドとビルトイン・メソッドの使用

Webフォーム・ルール内のビルトイン・データとビルドイン・メソッドにアクセスできます。

10.1.3.1 ビルトイン・データ

Oracle BPMではフォーム・ルールに特定のデータが提供されます。これには、フォーム、テナントおよびフォーム情報を現在使用しているユーザーに関する情報が含まれます。_data.getParameter('<data name>')構文を使用してフォーム・ルール内のこのデータを取得します。

使用可能なデータのリストを次に示します。

  • subject.id - ログインしたユーザーのユーザー名

  • subject.first.name - ログインしたユーザーの名

  • subject.last.name - ログインしたユーザーの姓

  • subject.roles - ログインしたユーザーのすべてのロールのリスト(v4.1.5で使用可能)

form.loadフォーム・ルールを使用すると、現在ログインしているユーザーに関する情報を使用してフォーム内のフィールドを事前に設定できます。たとえば、Id、FirstName、LastName、EmailおよびRolesというコントロールがフォームにあるような場合です。


注意:

コントロールの値を配列またはランダムなJavaScriptオブジェクトに設定することはできません。


10.1.3.2 ビルトイン・メソッド

Oracle BPMには、フォーム・ルールで必要な共通の機能に使用されるビルトイン・ヘルパー・メソッドが用意されています。日付および時間の操作に使用できるメソッドのリストを次に示します。

  • Time frevvo.currentTime(form) - 現在の時間をユーザーのローカル・タイムゾーンで返します。このメソッドは、Timeコントロールの値を設定する場合にのみ使用してください。

  • Date frevvo.currentDate(form) - 現在の日付をユーザーのローカル・タイムゾーンで返します。このメソッドは、Dateコントロールの値を設定する場合にのみ使用してください。

  • DateTime frevvo.currentDateTime(form) - 現在の日時をユーザーのローカル・タイムゾーンで返します。このメソッドは、日付/時間コントロールの値を設定する場合にのみ使用してください。

Tmという名前の時間コントロール、Dtという名前の日付コントロール、DtTmという名前の日付/時間コントロールを設定する例を次に示します。

Tm.value = frevvo.currentTime(form);
  Dt.value = frevvo.currentDate(form);
  DtTm.value = frevvo.currentDateTime(form);

_formTz Urlパラメータを使用してフォームのUrlでタイムゾーンを指定しないかぎり、currentTime()、currentDate()およびcurrentDateTime()はform.loadフォーム・ルールでは機能しません。これは、フォーム・サーバーが日時を返すタイムゾーンを認識する必要があるためです。_formTzを指定しない場合、メソッドはnullを返し、コントロール値は空白のままになります。たとえば、東部標準時を指定するには、&_formTz=America/NewYorkとします。

ユーザーとロールを操作する場合は、次のメソッドを使用します。

  • boolean isUniqueUserId (String userId, String tenantId) - このユーザーがテナントに存在しない場合はtrue、存在する場合はfalseを返します

  • boolean isUniqueRoleId (String roleId, String tenantId) - このロールがテナントに存在しない場合はtrue、存在する場合はfalseを返します

10.1.4 実行時のフォーム・ルールの動作の理解

Webフォームでフォーム・ルールを使用する場合、フォーム・ルールの実行時の動作を理解することが重要です。

10.1.4.1 フォーム・ルールが実行されるタイミング

フォーム・ルールを作成または編集すると、Oracle BPMでは、コントロール、およびフォーム・ルールが依存するそのコントロールのプロパティのリストを確認します。フォーム・ルールに関連する状態が変化すると、フォーム・ルールが自動的に実行されます。フォーム・ルールは、フォーム・ルール・パネルに表示されるときに上から下の順序でも実行されます。

フォーム・ルールは他のフォーム・ルールの実行をトリガーできることに注意してください。したがって、フォーム・ルールR1がコントロールの値をName Aで設定し、A.valueに依存するフォーム・ルールR2が存在する場合、フォーム・ルールR2がトリガーおよび実行されます。

フォーム・ルールでは通常、1つ以上のフォーム・コントロールとそのプロパティが参照され、そのプロパティのいずれかが値を変更するとフォーム・ルールが実行されます。フォーム・ルールは、ページがロードされるときには起動されないことに注意してください。たとえば、次のフォーム・ルールは、N1.valueが値を変更したときにのみ実行されます。

if (N1.value > 0 || N2.value > 0) {   
    T.value = N1.value + N2.value; 
}

ここで、ユーザーが無効な電子メールを入力した場合にメッセージを表示するユースケースがあるとします。フォームには必須の電子メール入力コントロール(Name=E)があり、電子メール・コントロールのvalidプロパティがfalseの場合、アクションを実行する必要があります。たとえば、次のようなフォーム・ルールを作成したとします。

if (!E.valid) { 
// code to show message here. 
}

前述のコードは、予想どおりに機能しませんでした。Eは必須フィールドであり、フィールドは最初は空のため、E.validの初期値はfalseです。ユーザーが無効な電子メール・アドレスを入力すると、E.validの値はfalseのままになり、状態が変化しないため、フォーム・ルールは実行されません。次のコードは適切に機能します。

if ((E.value.length > 0) && (!E.valid)) { 
// code to show message here.
}

ここで、フォーム・ルールはE.validとE.value.lengthの両方の値に依存するため、ゼロより長い文字列が入力されると、フォーム・ルールが実行され、メッセージが表示されます。

10.1.4.2 無限ループ

ループ状態になるフォーム・ルールを簡単に作成できます。たとえば、B.valueに基づいてA.valueを更新するフォーム・ルールや、A.valueに基づいてB.valueを更新するフォーム・ルールなどです。このようなフォーム・ルールは相互に継続してトリガーされます。

Oracle BPMサーバーでは、フォーム・ルールごとに実行時間の制限を設定することで、この状態が発生しないようにします。実行に5秒以上かかるフォーム・ルールは強制的に停止されます。これは、ほとんどの計算タスクでは非常に長い期間であり、フォーム・ルールの大部分がこの制約の影響を受けないことに注意してください。ただし、Oracle BPMは多数のユーザーが同時に使用するホスト・サイトであるため、このような計算によって課される時間制限があります。

10.1.5 フォーム・ルールのデバッグ

この項では、フォームのデバッグ方法について説明します。

10.1.5.1 重複するコントロール名のデバッグ

フォームを設計する場合、フォーム設計者は通常、コントロールに重複する名前が指定されないようにしますが、コントロールが別のセクション・コントロールに含まれる場合、コントロールに同じ名前を付けることができます。たとえば、HomeとOfficeという名前の2つのセクションがフォームにあり、各セクションにAddressという名前のテキスト・コントロールがあるとします。ただし、フォーム・ルールでいずれかのAddressコントロールを使用する場合、一意の名前を指定する必要があります。

名前が重複しているためにフォーム・ルールに違反しているかどうかを識別するには、Tomcatコンソールのログを参照するという方法があります。次のようなメッセージが表示された場合、コントロール名が重複している可能性があります。

16:50:35,390 WARN RuleObserver:455 - Error evaluating rule [Translate.Translate Form Rule]: Java arrays have no public instance fields or methods named "value." ([Translate.Translate Form Rule]#2) if (form.load) { Name.value = 'Nancy'; }

Java arrays have no public instance fields or methods...は、Javaでは同じ名前のコントロールが、単一のコントロールではなく1つの配列として解釈されていることを意味します。

10.1.5.2 フォーム・ルールのプロファイリング

フォーム・ルールの実行をプロファイリングすると、各フォーム・ルールの実行にかかる時間を判断できます。これは、多数のフォーム・ルールを使用するフォームのパフォーマンスを調整および向上する際に役立ちます。プロファイリングをオンにするには、urlでrule-debug=profileを設定します。

動的な選択コントロール(ドロップダウン、ラジオ、チェック・ボックス)を設定するためにフォーム・ルールがデータベース問合せを実行する場合、フォーム・ルール・プロファイリングを使用すると、データベース問合せに時間がかかりすぎるかどうかを識別するのに役立ちます。実行に時間がかかるHTTPコールが表示されます。

10.2 フォーム・ルールの使用

次の手順では、フォーム・ルールを作成およびテストする方法を説明します。

10.2.1 フォーム・ルールの作成方法

Business Process Composerには、フォーム・ルールを作成および編集できるエディタが用意されています。

新しいフォーム・ルールを作成するには:

  1. 新しいフォーム・ルールを作成するフォームを開きます。

  2. フォーム・ツールバーで、「ルール」ボタンをクリックします。

  3. 「新規ルールの作成」をクリックします。

  4. 「編集」をクリックし、必要に応じて次のフィールドを編集します。

    要素 説明

    名前

    フォーム・ルールの名前を定義します。これは、意味のある名前に変更する必要があります。

    有効

    フォーム内のフォーム・ルールを有効にする場合に選択します。このオプションの選択を解除すると、フォーム・ルールはランタイム時にフォームに適用されません。

    説明

    フォーム・ルールの説明を指定します。フォーム・ルールの動作、およびフォーム内のフォーム・コントロールや他のフォーム・ルールのコンテキストでどのように機能するかを説明するようにデフォルトを変更する必要があります。

    ルール

    フォーム・ルールを定義します。


  5. フォーム・ルールの作成および編集が完了したら、ツールバーの「編集」をクリックしてWebフォーム・デザイナに戻ります。

10.2.2 フォーム・ルールのテスト方法

Webフォームのテスト中にフォーム・ルールの動作をテストできます。詳細は、9.7.7項「Webフォームをテストする方法」を参照してください。