ページの先頭行へ戻る
 Apcoordinatorユーザーズガイド

29.3 電子フォームからの入力

29.2 電子フォームの表示”で説明したアプリケーションに以下を追加します。

コマンドマップでは、入力したデータの電子フォーム名、ボタン名に対応付けてデータを受けるビジネスクラス名、メソッド名を以下の形式で指定します。

/[電子フォーム名];[ボタン名]=[ビジネスクラス名].[メソッド名]  

以下は記述例です。

#commands.map
;=FormSampleHandler.startup
/SampleForm;send=FormSampleHandler.onSend

ビジネスクラスにデータを受けるメソッドを追加します。 このメソッドで、電子フォームに入力されたデータの取得、データの処理、次に表示する電子フォームの設定を行います。

import com.fujitsu.uji.DispatchContext;
import com.fujitsu.uji.GenericHandler;

import com.fujitsu.uji.formc.FormDataBean;
import com.fujitsu.uji.xml.XmlDataBean;

...
public class FormSampleHandler extends GenericHandler {
    public Object startup(DispatchContext context) {
        ...
        return formBean;
    }
    public Object onSend(DispatchContext context, FormDataBean dataBean) {
        // 電子フォームからXMLを取得します。
        XmlDataBean inData = dataBean.getData();
        // 入力データを取得します。
        String text1 = inData.getText("text1");
        String text2 = inData.getText("text2");
        // 次の画面を表示するため、FormDataBeanを作成します。
        FormDataBean nextFormBean = new FormDataBean("NextForm");
        // 出力データの雛形XMLを取得します。
        XmlDataBean outData = nextFormBean.getTemplateData(context);
        // 出力データを設定します。
        outData.setText("text1", text1);
        outData.setText("text2", text2);
        nextFormBean.setData(outData);
        // 次画面のFormDataBeanを返却します。
        return nextFormBean;
    }
}

電子フォームで使用するデータは、XMLデータBean (XmlDataBeanクラス) を使って取得や設定を行います。XMLデータBeanは、XMLのデータを保持するオブジェクトです。XMLデータBeanの使用方法の詳細は“6.2 XMLデータBean”を参照してください。

電子フォームに入力されたデータを取得するには、以下のようにします。

表示する電子フォームにデータを設定するには、以下のようにします。

取得または設定するデータは、電子フォームの構造に従って指定します。上記のソースは、以下の構造のタグに対応します。

DataRoot
 +- text1
 +- text2

集団項目で階層構造になっている場合は、途中のパスを指定します 。以下は階層構造を持ったデータの例です。

DataRoot
 +- group1
     +- text1
     +- text2

この構造の場合は、以下のようなソースになります。

        String text1 = inData.getText("group1/text1");
        String text2 = inData.getText("group1/text2");

繰り返し構造となる場合は、タグ名にインデックスを付けて指定します。以下は繰り返し構造を持ったデータの例です。

DataRoot
 +- item
 |   +- text1
 |   +- text2
 +- item
 :   :

この構造の場合は、以下のようなソースになります。 インデックスは1から始まります。

        //最初のitem内のデータを取得
        String text1 = inData.getText("item[1]/text1");
        String text2 = inData.getText("item[1]/text2");
        //2番目のitem内のデータを取得
        String text1 = inData.getText("item[2]/text1");
        String text2 = inData.getText("item[2]/text2");

階層構造の一部を別のXMLデータBeanとして取得することで、データの取得時や設定時にXPathの指定が簡単になります。

        XmlDataBean item = inData.getSubBean(item[1]);
        String text1 = item.getText("text1");
        String text2 = item.getText("text2");

FormDataBeanクラスのgetTemplateDataメソッドは、出力データの雛形となるXMLを作成し、そのXMLを格納したXMLデータBeanを返却します。この雛型の代わりに、すでに保存されたXML等を利用することも可能です。この場合は、以下の手順で処理を行います。

次のソースは、他のXMLを利用する例です。

        // 次の画面を表示するため、FormDataBeanを作成します。
        FormDataBean nextFormBean = new FormDataBean("NextForm");
        // 出力データをXMLから取得します。
        XmlDataBean outData = new XmlDataBean();
        outData.loadFrom("c:¥¥template¥¥sample.xml");
        nextFormBean.setData(outData);