PEXA Clientについて

チュートリアル

定義パターン

定義ファイル

リファレンス

ケース別チュートリアル目次


はじめに

このドキュメントは、細かいケース別の具体的な定義方法を示すチュートリアルです。
FAQ的な形式で、様々な細かいケースでの定義方法をサンプルを交えて解説していきます。
なお、画面タイプ毎のArea,Contentを含めた全体的な画面定義パターンについては定義パターン概要から各パターンを参照してください。

ここの内容は随時更新、追加されていきますので定期的にチェックしてください。


Q.同じ見た目の編集画面と参照画面、定義ファイルは別々?

A.Page定義を分割して、Area定義とContent定義は同一にしましょう。

同じ見た目の編集画面と参照画面は、同じJavaパネルで入力系コンポーネントの有効/無効を制御することで表現できます。
そこで、Area定義及びContent定義は編集画面と参照画面で同一の物を使用するようにして、Page定義を実行モード毎に用意しましょう。 Area及びContentは定義内容も多くなりがちなので、分割すると画面の内容に変更が入った場合に修正量が多くなりますが、Page定義は内容はAreaの配置と画面遷移定義のみなので量産しやすいです。

大抵は新規モード、修正モード、参照モード用の3Pageくらいがあるといいでしょう。場合によっては複写モードなどもあるかもしれません。 それぞれのPage定義に対してモードを指定する方法は、Q.画面の実行モード指定はどうするのですか?を参照してください。


Q.画面の実行モード指定はどうするのですか?

A.Page定義のidentityタグでcontext属性を設定して下さい。

例えば、一覧画面上に修正ボタンを参照ボタンがあり、それらをクリックすると選択したデータモデルを扱うEditパターンの画面がポップアップするとします。
ボタンによって修正モードもしくは参照モードで立ち上げたいとすると、ポップアップする側の画面のArea定義で初期化処理を変えたり入力系コンポーネントの抑止などが必要となります。

このような場合、ポップアップする側の画面のPage定義をモード分作成し、それぞれのPage定義のidentityタグでcontext属性を指定します。

記述例 : ポップアップ画面側のPage定義のidentityタグ

<identity id="CP_WKFL_Popup_TravelExpensePaymentUpdate"
          name="交通費精算書 新規作成"
          context="新規作成"/>
このようにしておくと、Area定義側ではpage参照を使用して"page:context"と指定することにより現在のモードを取得できます。

記述例 : ポップアップ画面側のArea定義の初期化コマンドでpage:contextを判定
<command id="初期化">
    <switch condition="page:context">
        <case value="新規作成">
            <doAction content="CC_ACPY_331_01_Edit" action="新規作成"/>
        </case>
        <case value="複写作成">
            <doAction content="CC_ACPY_331_01_Edit" action="複写作成"/>
            <return nextstate="明細行選択状態"/>
        </case>
        <case value="再起票">
            <doAction content="CC_ACPY_331_01_Edit" action="再起票"/>
            <return nextstate="明細行選択状態"/>
        </case>
        <default>
            <doAction content="CC_ACPY_331_01_Edit" action="引継"/>
            <return nextstate="明細行選択状態"/>
        </default>
    </switch>
</command>
一覧画面側からは、それぞれのボタンに応じてポップアップさせるPageのIDを変えることになります。

記述例 : 一覧画面側のPage定義の画面遷移定義
<transition id="交通費精算書新規をポップアップ">
    <popup-page next="CP_WKFL_Popup_TravelExpensePaymentNew" modal="true"/>
</transition>
<transition id="交通費精算書参照をポップアップ">
    <popup-page next="CP_WKFL_Popup_TravelExpensePaymentView" modal="true"/>
</transition>


Q.遷移元の画面を判別する方法はありますか?

A.遷移元画面のPage定義で、画面遷移定義のタグにcontext属性を設定して下さい。

例えば、あるポップアップ画面が複数種類の一覧画面から起動するとします。
遷移元の一覧画面の種類に応じてポップアップ画面側がコンポーネントの有効/無効を変えなければならないとすると、 遷移元画面が何であるかが判別できる情報が必要となります。

このような場合、それぞれの一覧画面側のPage定義で、画面遷移定義のタグにcontext属性を指定してください。

記述例 : 未申請一覧画面側のPage定義の画面遷移定義

<transition id="交通費精算書修正をポップアップ">
    <popup-page next="CP_WKFL_Popup_TravelExpensePaymentUpdate" 
	           modal="true" context="未申請の申請書を修正する"/>
</transition>
記述例 : 承認済一覧画面側のPage定義の画面遷移定義
<transition id="交通費精算書修正をポップアップ">
    <popup-page next="CP_WKFL_Popup_TravelExpensePaymentUpdate"
	           modal="true" context="承認済の申請書を修正する"/>
</transition>
このようにしておくと、ポップアップ画面側のArea定義側ではcontext参照を使用して"context:name"と指定することで遷移元画面から指定された情報が取得できます。

記述例 : ポップアップ画面側のArea定義でcontext:nameを元にコンポーネントの有効・無効制御を行う
<TextField id="計上月" text="content:CC_ACPY_331_01_Edit/計上月" 
            enabled="filter:[page:context != 参照 and context:name != 承認済の申請書を修正する]"/>


Q.画面間での値の受け渡しはどうやるのですか?

A.同じIDでscope="group"のContent項目を定義してください。

例えば、検索を実行して一覧表示し、その中から一行選択して編集画面をポップアップするとします。
その場合、呼び出し元画面のEditList Contentにて、Tableコンポーネント上で選択されているレコードを保持するContent項目を用意しておきます。 そして、そのContent項目のscopeをgroupとしておき、それと同じIDを持つContent項目を遷移先画面のEdit Contentでも用意しておきます。
このように、scopeがgroupで、IDが同じContent項目を用意しておくことで、画面遷移が発生した際に値の引継を行うことができます。

なお、これはContent項目のtype(value or model)に関わらず一緒です。

記述例 : 遷移元画面のTableコンポーネントタグ

<Table id="一覧テーブル" selectedItem="content:CC_001_EditList/選択申請書">
    <TableModel rows="content:CC_001_EditList/申請書一覧">
        <TableColumn ......./>
        <TableColumn ......./>
        <TableColumn ......./>
    </TableModel>
</Table>
記述例 : 遷移元画面のEditList Content
<item id="選択申請書" access="hidden" type="model" scope="group">
    <description>一覧上で選択されているデータモデル</description>
</item>
記述例 : 遷移先画面のEdit Content
<item id="選択申請書" access="hidden" type="model" scope="group">
    <description>一覧画面から引き継いだデータモデル</description>
</item>


Q.子画面が終了したことを親画面が知る方法は?

A.何らかの子画面終了イベントが発行されるので、親画面でそのイベントに反応して下さい。

子画面が閉じられた時は、必ずなんらかのイベントが親画面に発行されるようになっています。 発行されるイベント名は、子画面終了時に明示的にcloseContext命令で指定されているかで決まります。

もしcloseContext命令のevent属性が指定されていれば、そこで指定されたイベントが親画面に発行されます。 もしevent属性が指定されていなかったり、そもそもcloseContext命令が使用されていない場合はデフォルトで"子画面終了"というイベントが発行されます。

これらのイベントに親画面が反応したい場合は、Area定義でstatechartセクションを記述して、受信イベントと実行コマンドの対応を定義します。 これにより、親画面は子画面の終了を契機としてなんらかの処理を実行することが出来ます。

記述例 : デフォルトのイベント"子画面終了"を受信した場合に検索処理を実行

<statechart>
    <state name="NORMAL">
        <event name="子画面終了" command="検索"/>
    </state>
</statechart>


Q.値の入力に連動して処理を実行するには?

A.ComponentのonChange属性かContentItemのtriggerオプションを使用して下さい。

値の入力に対する連動には2種類の方法があります。
もし、Area定義のレベルで値の入力に対して反応したい場合は、入力を受け付けるComponentのonChange属性で発行イベントを指定して下さい。 これにより、例えば確認ダイアログを表示した上で何らかの一括処理を実行すると言ったことが可能になります。

記述例 : テキストフィールドに対する値の入力に連動して再計算コマンドを実行

<TextField id="伝票日付" text="content:CC_XXX_001_01_Edit/伝票日付" onChange="COMMAND[再計算]"/>
特にダイアログ表示の必要もなく検索処理をすぐに実行すると言った場合には、Content定義のitemでtriggerオプションを付けて実行Actionを指定して下さい。 これにより、例えばXXXコードの入力を契機としてマスタを検索し、そのコードに紐尽くデータモデルを検索してくると言ったことが可能になります。

記述例 : 会社コードの入力と同時に会社マスタ検索アクションを実行する
<item id="会社コード" access="input" type="value">
    <trigger action="会社マスタ検索"/>
</item>


更新情報

  • 最終更新者 : $Author: morishita $
  • 最終更新日時 : $Date:: 2007-05-21 19:37:37 #$
  • バージョン : $Revision: 810 $



Copyright © 2006, Atrris Corporation