PEXA Clientについて

チュートリアル

定義パターン

定義ファイル

リファレンス

目次

  1. はじめに
  2. Notification定義の内容
  3. identityセクション
  4. descriptionセクション
  5. item-listセクション
  6. notify-hookセクション
  7. listener-listセクション
  8. statusセクション
  9. Notification定義全体のサンプル


はじめに

このドキュメントは、PEXAクライアントフレームワークで使用するNotification定義ファイルについて解説するものです。

Notification定義ファイルは、Area同士が連係して動作するために送信する"通知"の単位で作成されるXML形式の定義ファイルです。
この定義ファイルには、Notificationに含まれるitem、送信前後のフック処理、通知を受信するリスナーの指定が含まれます。

Notificationは、例えば以下のようなケースで使用されます。

  • データの保存が伴う画面操作の最後で「操作完了」通知を送信して操作ログAreaの表示内容を更新。
  • Page内の特定エリアで更新ボタンを押したら、「再検索」通知を送信してPage内の全Areaで再検索を実行。

Notificationの送信及び受信はそれぞれ以下のように行われます。

Notification定義ファイルの内部は、いくつかのセクションに分かれています。 以下でNotification定義ファイルの内容の概説およびそれぞれのセクションの詳細を解説していきます。

なお、文中にでてくる Page定義についてはこちらを、 Area定義についてはこちらを、 Commandについてはこちら参照記法についてはこちらを参照してください。


Notification定義の内容

Notification定義に含まれる情報には、主に以下の物があります。

Notificationの識別情報

Notificationはシステム内でユニークに特定できる必要があります。
そのために、Notificationを識別するためのIDや名称を必ず定義する必要があります。

詳細はidentityセクションを参照してください。


通知範囲

Notificationの送信範囲は基本的にアプリケーション全体となります。
もし全体ではなく特定の範囲内にのみ通知を行いたい場合はidentityセクションの"scope"属性で指定することができます。

  • scope="page" : 通知元と同じPage内に配置されているPage/Areaに対してのみ通知されます。
  • scope="context" : 通知元と同じContextに属するPage/Areaに対してのみ通知されます。
  • scope="session" : アプリケーション全体のPage/Areaに対して通知されます。
通知範囲を限定するようなケースとしては、以下のようなケースが考えられます。

例:
一つのPage内に複数のAreaが配置されていて、あるArea上で編集開始ボタンが押されたらNotificationを送信して他のAreaを編集不可状態に切り替えているとする。 このウィンドウが非モーダルで複数枚同時にポップアップできるようになっていると、scope="page"としておかないと別のウィンドウにも影響を与えてしまう。


通知パラメータ項目

Notificationで取り扱うパラメータ項目を定義します。
Notificationで項目を宣言することで、通知の送信元と送信先で値やモデルをやりとりできます。

ここで宣言する項目は、単純な値でもデータモデルでもデータモデルのリストでも全てフラットに宣言して取り扱います。 そのフラットに宣言された項目一つ一つに対して属性値や子タグによって振る舞いを指定します。

詳しくはitem-listセクションを参照してください。


通知の送信前後のフック処理情報

通知の送信前及び送信後に行う処理の実行命令をフック処理としてNotification定義に記述します。
送信前処理(preNotifyタグ)および送信後処理(afterNotifyタグ)の2種類を定義できます。

サービスの呼び出しや、通知パラメータの操作といった処理を行う実行命令をフック処理としてNotification定義に記述します。 内部は簡易スクリプト的に実行命令と簡単な判定、分岐を組み合わせて記述することができます。 具体的には、サービス呼び出し、項目の値設定、項目の値クリアといったことが可能です。

また、JavaクラスとしてカスタムのNotificationHookクラスを作成してそれを呼び出すことも可能です。

詳しくはnotify-hookセクションを参照してください。


通知の受信リスナー情報

通知を受信するリスナーとなる対象を記述します。リスナーは複数個定義できます。
ここに定義されている対象にのみ、通知は送信されます。
なお、通知を受信できるのはPageもしくはAreaとなります。

詳しくはlistener-listセクションを参照してください。



identityセクション

記述例 :

<identity id="保存操作完了通知" name="保存が伴う画面操作の完了通知"/>

説明 :
identityセクションは、Notificationの識別情報を記述するセクションです。
IDや名称を定義します。


属性値 :
identityタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
id システム内でユニークになるNotificationの識別ID 文字列 必須 不可
name Notificationの名称 文字列 必須 不可
scope Notificationの送信範囲の指定。
  • page : 通知元と同じPage内に配置されているPage/Areaに対してのみ通知されます。
  • context : 通知元と同じContextに属するPage/Areaに対してのみ通知されます。
  • session : アプリケーション全体のPage/Areaに対して通知されます。
省略時は"session"がデフォルト値として適用される。
page,
context,
session
非必須 不可


descriptionセクション

記述例 :

<description>
    データの保存処理が伴う画面操作が完了したことを通知するNotificationです。
</description>

説明 :
descriptionセクションは、Notificationの詳細説明を記述するセクションです。
フリーフォーマットで文章で記入してください。


item-listセクション

記述例 :

<item-list>
    <item id="実行日時" type="value">
        <valuetype implement="java.util.Date"/>
        <description>処理実行日時</description>
    </item>
    <item id="削除フラグ" type="value">
        <valuetype ptype="RemovedFlag"/>
        <description>削除有無フラグ</description>
    </item>
    <item id="ログイン情報" type="model">
        <description>ログインユーザ情報のUpdatable</description>
    </item>
</item-list>

説明 :
Notificationが保持するパラメータ項目を定義するセクションです。
item-listの子タグとしてitemタグを複数個記述できます。
itemタグで項目を宣言することにより、Notificationの送信元と送信先でパラメータのやりとりができます。

Notification項目は、単純な値であろうとデータモデルであろうと全て同列でフラットに定義します。 それぞれにNotification内でユニークになるIDを文字列で付与し、振る舞いを属性値や子タグで定義していきます。

Notification項目の振る舞いを決めるパラメータとして、以下があります。

パラメータ名 説明
type 項目がなのか、データモデルなのか、バイナリデータを定義します。
また、単値か複値(配列 or リスト)かも同時に表します。

値の場合、型は現象型もしくはvaluetypeタグのimplement属性値で決定されます。
データモデルの場合、型はpexa.share.concept.Updatableになります。
バイナリデータの場合、型はpexa.share.util.cont.Binaryになります。

また、複値の場合はそれぞれの型のオブジェクトを格納した配列もしくはjava.util.Listになります。

なお、Notificationはデータモデル中の値を参照することは出来ますが、データモデルに対して値を設定することはできません。 データモデルの生成、編集はServiceフレームワークの機能になります。

セクション内の子要素 :
item-listの子要素として、以下があります。

itemタグ

Notification項目を表すタグです。このタグによってNotificationが保持するパラメータ項目を定義します。
itemタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
id Notification項目を識別するIDを指定します。
Notification内でユニークになる必要があります。
後述するvaluetypeタグでNotification項目の現象型が定義されてない場合は、このid属性で指定された文字列を現象型名として認識します。
複数のNotification間で共有される項目(scopeがgroupかglobal)の場合、その項目はIDが一致している必要があります。
なお、IDの文字列中に半角スラッシュ("/")は使用禁止です。
文字列 必須 不可
type Notification項目の項目種別です。
この項目が値なのかデータモデルなのか、単値か複値かを表します。
  • value : 単数の値です。
  • values : 複数(配列 or List)の値です。
  • model : 単数のモデルです。
  • models : 複数(配列 or List)のモデルです。
  • binary : 単数のバイナリデータです。
  • binaries : 複数(配列 or List)のバイナリデータです。
value
values
model
models
binary
binaries
必須 不可

Notification項目のオプション設定となるタグとして、以下の物があります。

これらは記述する必要がなければ省略できます。また、全てのタグが組み合わせて指定することができます。


valuetypeタグ

記述例1 : 項目IDが現象型名と一致しない場合に、現象型とマッピングしたい場合
<item id="有効年月_From" type="value">
    <valuetype ptype="有効年月"/>
</item>

記述例2 : 現象型として存在していない値を使用したい場合
<item id="ログイン時刻" type="value">
    <valuetype implement="java.util.Date"/>
</item>
値の型に関する設定を記述するタグです。
このタグが記述されていない場合、itemタグのid属性で指定された名前が現象型名として認識されます。ptype属性とimplement属性は排他になります。

以下の属性値があります。

属性値名 説明 形式 必須/非必須 参照記法可/不可
ptype 項目の現象型を指定します。項目名と現象型を区別して扱いたい場合に指定します。
この指定がない場合は、itemタグのid属性が現象型名として処理されます。
文字列 非必須 不可
implement 項目の型をクラス名として直接指定します。
この属性値が指定されている場合は現象型に結びついていない項目と判断されて、指定された型で変換されます。ptype属性が指定されていると無効。
文字列 非必須 不可

descriptionタグ

記述例 : 
<item id="特殊なデータモデル" type="value">
    <description>ある特殊なデータモデルです。</description>
</item>
項目についての説明を記述するタグです。タグに挟んで項目に関するコメントを記述してください。



notify-hookセクション

記述例 :

<!--==============================================================
==  通知の送信前後に仕掛けるフック処理の定義
===============================================================-->
<notify-hook>
    <!--======================================================
    ==  送信前に行う処理
    =======================================================-->
    <preNotify>
        <logging message="送信前"/>
        <set item="ログイン利用者情報" value="global:ログイン利用者情報"/>
        <doService service="操作ログを検索する">
            <inputServiceSession>
                <inputValue item="ログイン利用者情報" key="ログイン情報"/>
            </inputServiceSession>
            <outputServiceSession>
                <outputValue item="操作ログ検索結果" key="操作ログ検索結果"/>
            </outputServiceSession>
        </doService>
    </preNotify>
    <!--======================================================
    ==  送信後に行う処理
    =======================================================-->
    <afterNotify>
        <logging message="送信後"/>
    </afterNotify>
</notify-hook>

説明 :
Notificationの送信前、送信後に行う実行処理を表すHookを定義するセクションです。
このセクションの子タグとして、preNotifyタグとafterNotifyタグを記述することが出来ます。
preNotifyタグの処理内容はNotificationの送信前に実行されます。
afterNotifyタグの処理内容はNotificationの送信後に実行されます。

セクション内の子要素 :
notify-hookの子要素として、以下があります。

preNotifyタグ

Notificationの送信前に呼び出される実行命令を定義するタグです。 このタグの内部に、簡易スクリプト的に処理命令、分岐命令等を記述して処理内容を定義します。
使用できる実行命令については、別途リファレンス が用意されていますので、詳細はそちらを参照してください。

タグとして処理命令を書く代わりに、HookをJavaクラスとして作成して実行することも出来ます。 その場合はpreNotifyタグのimplement属性でカスタムHookクラスのクラス名を指定します。

このタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
implement カスタムHookクラスのクラス名を指定します。
Javaクラスとして作成したHookクラスをここで指定することで使用することが出来ます。
この属性を指定した場合、preNotifyタグの内部は無視されます。
文字列 非必須 不可

afterNotifyタグ

Notificationの送信後に呼び出される実行命令を定義するタグです。 このタグの内部に、簡易スクリプト的に処理命令、分岐命令等を記述して処理内容を定義します。
使用できる実行命令については、別途リファレンス が用意されていますので、詳細はそちらを参照してください。

タグとして処理命令を書く代わりに、HookをJavaクラスとして作成して実行することも出来ます。 その場合はafterNotifyタグのimplement属性でカスタムHookクラスのクラス名を指定します。

このタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
implement カスタムHookクラスのクラス名を指定します。
Javaクラスとして作成したHookクラスをここで指定することで使用することが出来ます。
この属性を指定した場合、preNotifyタグの内部は無視されます。
文字列 非必須 不可


listener-listセクション

記述例 :

<!--==============================================================
==  通知を受け取るリスナーの指定
===============================================================-->
<listener-list>
    <listener ref="CA_COMM_004_01"/>
    <listener ref="CA_COMM_004_02"/>
    <listener ref="CA_PPRF_002"/>
    <listener ref="CA_PLRF_001"/>
    <listener ref="CA_MLRF_001"/>
    <listener ref="CA_PSRF_001"/>
    <listener ref="CA_WKRF_001_01"/>
    <listener ref="CA_WKRF_001_02"/>
    <listener ref="CA_WKRF_002_02"/>
    <listener ref="CA_SLRF_001"/>
</listener-list>

説明 :
通知の送信対象となるListenerを定義するセクションです。
Listenerとしてこのセクションに定義されることによってNotoficationの送信対象となります。

Listenerとして指定できるのはPageもしくはAreaとなります。
Listenerタグのref属性にPageのIDもしくはAreaのIDを指定して下さい。

セクション内の子要素 :
listener-listの子要素として、以下があります。

Listenerタグ

Notificationを受信する通知リスナーを定義するタグです。
ここで指定された対象が、Notificationの送信対象として扱われます。
必要な数だけ複数個記述することが出来ます。

このタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
ref リスナーとなるPageもしくはAreaのIDを指定します。 文字列 必須 不可


statusセクション

記述例 :

<status>
    <author>$Author: morishita $</author>
    <datetime>$Date:: 2010-07-09 18:44:33 #$</datetime>
    <version>$Revision: 5225 $</version>
</status>

説明 :
Notification定義ファイルの編集情報を記述するセクションです。
バージョン管理システムの置換キーワードなどと連携して使用してください。

セクション内の子要素 : 以下の子要素があります。

authorタグ

タグの間にはさんで、ファイルの編集者を記述します。


datetimeタグ

タグの間にはさんで、ファイルの編集日時を記述します。


versionタグ

タグの間にはさんで、ファイルのバージョンを記述します。



Notification定義全体のサンプル

<?xml version="1.0" encoding="Windows-31j"?>
<!--
 - Copyright
 -->
<!DOCTYPE client-notification SYSTEM "../doctype/client-notification.dtd">
<!--==============================================================
 == Current-Module:   $HeadURL$
 == Release-Date:     $Date:: 2010-07-09 18:44:33 #$
 == Release-Version:  $Revision: 5225 $
 == First-Created-On: 2007/04/02
 == First-Created-By:
 == Copy-Right-Owner:
 ==============================================================-->
<client-notification>
<!--==============================================================
==  識別情報
===============================================================-->
    <identity id="操作完了" name="操作完了"/>
<!--==============================================================
==  詳細説明
===============================================================-->
    <description>
        操作が完了したことをログViewに対して通知します。
    </description>
<!--==============================================================
==  通知が保持する項目の宣言
===============================================================-->
    <item-list>
        <item id="ログイン利用者情報" type="model">
            <description>ログインユーザーの情報</description>
        </item>
        <item id="操作ログ検索結果" type="models">
            <description>操作ログモデルの検索結果</description>
        </item>
    </item-list>
<!--==============================================================
==  通知の送信前後に仕掛けるフック処理の定義
===============================================================-->
    <notify-hook>
        <!--======================================================
        ==  送信前に行う処理
        =======================================================-->
        <preNotify>
            <logging message="送信前"/>
            <set item="ログイン利用者情報" value="global:ログイン利用者情報"/>
            <doService service="操作ログを検索する">
                <inputServiceSession>
                    <inputValue item="ログイン利用者情報" key="ログイン情報"/>
                </inputServiceSession>
                <outputServiceSession>
                    <outputValue item="操作ログ検索結果" key="操作ログ検索結果"/>
                </outputServiceSession>
            </doService>
        </preNotify>
    </notify-hook>
<!--==============================================================
==  通知を受け取るリスナーの指定
===============================================================-->
    <listener-list>
        <listener ref="CA_COMM_004_01"/>
        <listener ref="CA_COMM_004_02"/>
        <listener ref="CA_PPRF_002"/>
        <listener ref="CA_PLRF_001"/>
        <listener ref="CA_MLRF_001"/>
        <listener ref="CA_PSRF_001"/>
        <listener ref="CA_WKRF_001_01"/>
        <listener ref="CA_WKRF_001_02"/>
        <listener ref="CA_WKRF_002_02"/>    
        <listener ref="CA_SLRF_001"/>   
    </listener-list>
<!--==============================================================
==  ファイル編集情報
===============================================================-->
    <status>
        <author>$Author: morishita $</author>
        <datetime>$Date:: 2010-07-09 18:44:33 #$</datetime>
        <version>$Revision: 5225 $</version>
    </status>
</client-notification>


更新情報

  • 最終更新者 : $Author: morishita $
  • 最終更新日時 : $Date:: 2010-07-09 18:44:33 #$
  • バージョン : $Revision: 5225 $



Copyright © 2006, Atrris Corporation