PEXA Clientについて

チュートリアル

定義パターン

定義ファイル

リファレンス

目次

  1. はじめに
  2. Content定義の内容
  3. identityセクション
  4. descriptionセクション
  5. reference-listセクション
  6. item-listセクション
  7. action-listセクション
  8. transition-listセクション
  9. statusセクション
  10. Content定義全体のサンプル


はじめに

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

Content定義ファイルは、領域の中に現れる"内容"の単位で作成されるXML形式の定義ファイルです。
この定義ファイルには、役割の観点から分類されたステレオタイプ、取り扱う項目、Model寄りの実行処理内容などが含まれます。 位置づけとしては、MVCモデルにおけるM(Model)にあたります。

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

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


Content定義の内容

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

Contentの識別情報

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

また、Contentは画面上における役割からステレオタイプで分類されます。
たとえば、検索条件を入力して検索サービスを呼び出すならconfigであり、 検索結果を一覧表示し、ユーザに選択させるならeditlistであり、 ユーザに値を入力させてデータモデルを編集するならeditというスレテオタイプが割り振られます。

このステレオタイプにより、以下のような認識を開発者間で共有できます。

  • Contentのおおまかな内容(業務項目)
  • Contentのおおまかな振る舞い(Action)
  • Contentの組み合わせの基本パターン(Content間の連携)
詳細はidentityセクションを参照してください。


Contentの導出元になるアクティビティ

Contentは、画面と機能仕様をリンクさせるポイントになります。
SVOステートメントやアクティビティと直接リンクしない画面(メニューや情報表示など)もありますが、データモデルの操作に関連する画面は原則としてどれかのアクティビティから導出されます。
このContentの導出元アクティビティおよびそのプロセスをここ列挙します。

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


Contentが扱う業務項目

画面で取り扱う業務項目を定義します。
Contentで項目を宣言することで、画面が入出力する値を取り扱えるようになります。

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

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


実行アクション情報

サービスの呼び出しや、Content項目の操作といったModel寄りの処理を行う実行命令をアクションとしてContent定義に記述します。
アクションはIDをつけて複数個定義することができ、内部は簡易スクリプト的に実行命令と簡単な判定、分岐を組み合わせて記述することができます。
具体的には、サービス呼び出し、項目の値設定、項目の値クリアといったことが可能です。

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

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



identityセクション

記述例 :

<identity id="CC_WKFL_311_01_Edit"
          name="仮払申請書のEditコンテント"
          stereotype="edit"/>

説明 :
identityセクションは、Contentの識別情報を記述するセクションです。
IDや名称、ステレオタイプを定義します。


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

属性値名 説明 形式 必須/非必須 参照記法可/不可
id システム内でユニークになるContentの識別ID 文字列 必須 不可
name Contentの名称 文字列 非必須 不可
stereotype Contentのステレオタイプを指定します。
以下のステレオタイプのうちいづれかを指定します。
  • login:ユーザのログイン処理を行うコンテント
  • logout:ユーザのログアウト処理を行うコンテント
  • menu:選択メニューを提供するコンテント
  • config:設定値を入力してサービスを実行するコンテント
  • editlist:ユーザが選択操作できる一覧表示コンテント
  • list:ユーザが選択操作できない一覧表示コンテント
  • edit:データモデルに対する入力を行うコンテント
  • status:更新される情報の表示を行うコンテント
  • info:固定的な情報の表示を行うコンテント
文字列 非必須 不可


descriptionセクション

記述例 :

<description>
    ワークフローにログインするコンテントです。
</description>

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


reference-listセクション

記述例 :

<reference-list>
    <activity ref="XXXX_311" process="XXXを入力する"/>
    <activity ref="XXXX_312" process="XXXを修正する"/>
</reference-list>

説明 :
reference-listセクションは、Contentの導出元となるアクティビティを宣言するセクションです。
Contentがどの機能仕様から導き出されているのかを定義します。

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

activityタグ

Contentの導出元となるアクティビティを宣言するタグです。必要な分を複数個列挙してください。
activityタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
ref Contentの導出元になるアクティビティのIDをここで指定します。 文字列 必須 不可
process Contentの導出元になるアクティビティプロセスを指定します。 文字列 非必須 不可


item-listセクション

記述例 :

<item-list>
    <!-- ====================================================
    ==  画面上の入出力項目
    ===================================================== -->
    <item id="仮払希望日" access="inout" type="value" scope="local">
        <load from="observable:仮払申請書/仮払希望日"/>
        <load from="calendar:TODAY"/>
        <description>仮払申請書中の仮払希望日</description>
    </item>
    <item id="仮払精算予定日" access="inout" type="value" scope="local">
        <load from="observable:仮払申請書/仮払精算予定日"/>
        <load from="calendar:TODAY"/>
        <description>仮払申請書中の仮払精算予定日</description>
    </item>
    <item id="仮払申請額" access="inout" type="value" scope="local">
        <load from="observable:仮払申請書/仮払申請額"/>
        <description>仮払申請書中の仮払希望日</description>
    </item>
    <item id="仮払目的" access="inout" type="value" scope="local">
        <load from="observable:仮払申請書/仮払目的"/>
        <description>仮払申請書中の仮払目的</description>
    </item>
    <!-- ====================================================
    ==  データモデル
    ===================================================== -->
    <item id="仮払申請書" access="hidden" type="model" scope="group">
        <description>仮払申請書のUpdatable</description>
    </item>
    <item id="ログイン利用者" access="hidden" type="model" scope="global">
        <description>ログイン時に取得したログイン情報</description>
    </item>
</item-list>

説明 :
Contentで取り扱う業務項目を定義するセクションです。
item-listの子タグとしてitemタグを複数個記述できます。
itemタグで項目を宣言することにより、画面で値を入出力できるようになります。

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

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

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

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

また、複値の場合はそれぞれの型のオブジェクトを格納した配列もしくはjava.util.Listになります。
scope 項目の有効範囲を定義します。 項目が定義されたContentでのみ有効(local)か、画面遷移上で関連のある画面間で共有される(group)か、アプリケーション全体で共有される(global)かのいずれかになります。
共有される項目については、Content間でIDが一致している必要があります。

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

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

itemタグ

Content項目を表すタグです。このタグによって画面で取り扱う業務項目を定義します。
itemタグの属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
id Content項目を識別するIDを指定します。
Content内でユニークになる必要があります。
後述するvaluetypeタグでContent項目の現象型が定義されてない場合は、このid属性で指定された文字列を現象型名として認識します。
複数のContent間で共有される項目(scopeがgroupかglobal)の場合、その項目はIDが一致している必要があります。
なお、IDの文字列中に半角スラッシュ("/")は使用禁止です。
文字列 必須 不可
access Content項目のアクセス種別です。
Area側から見て、項目が入力なのか出力なのか、画面に現れない内部項目なのかを表します。
この種別にあわない形で項目にアクセスされた場合、エラーになります。
  • input : 入力のみできる項目です。
  • output : 出力のみできる項目です。
  • inout : 入出力両方ができる項目です。
  • hidden : 画面からは参照できない内部項目です。
input
output
inout
hidden
必須 不可
type Content項目の項目種別です。
この項目が値なのかデータモデルなのか、単値か複値かを表します。
  • value : 単数の値です。
  • values : 複数(配列 or List)の値です。
  • model : 単数のモデルです。
  • models : 複数(配列 or List)のモデルです。
  • binary : 単数のバイナリデータです。
  • binaries : 複数(配列 or List)のバイナリデータです。
value
values
model
models
binary
binaries
必須 不可
scope Content項目の有効範囲です。
項目が宣言されたContent内でのみ有効か、画面遷移上関連のあるContent間で共有されるか、アプリケーション全体で共有されるかを指定します。
  • local : 宣言されたContent内で有効
  • group : 画面遷移上で関連のあるContent間で共有される
  • global : アプリケーション全体で共有される。
local
group
global
必須 不可

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

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


valuetypeタグ

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

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

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

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


procedureタグ

記述例 : テーブルモデルを生成する手続きクラスを指定する
<item id="特殊なテーブルモデル" access="output" type="value">
    <valuetype implement="javax.swing.table.TableModel"/>
    <procedure implement="xxxx.client.plugins.procedure.TableModelContentProcedure"/>
</item>
値の取得を手続きを通して行いたい場合に記述するタグです。
このタグでPEXAが提供するpexa.client.std.content.ContentProcedureを実装するクラスを指定することで、 値の取得処理をカスタマイズすることが出来ます。複数個の値から動的に導き出されるような値の導出や、データモデルの 内容を特定の画面コンポーネント向けのデータに変換する処理などを組み込むといった使い方が出来ます。

なお、このprocedureタグの設定はloadタグよりも優先されます。 両方記述されている場合、まずprocedureタグの設定に従って手続きが実行され、その結果がnullの場合にloadタグが評価されます。

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

属性値名 説明 形式 必須/非必須 参照記法可/不可
implement ContentProcedureの実装クラス名をフルパッケージで指定します。 文字列 必須 不可


preferenceタグ

記述例 : 印刷実行時設定を保存して次回も初期表示したい
<item id="印刷設定_プリンタ印刷" access="inout" type="value">
    <valuetype implement="java.lang.String"/>
    <preference save="on"/>
    <load from="プリンタ印刷しない"/>
</item>
※注意※
この機能を使うには、Preferenceによる値保存機能自体がプロパティファイルの
実行時設定の保存機能に対する設定セクションで有効にされている必要があります。

値をPreferenceに保存して次回も読み込みたい場合に記述するタグです。
このタグでsave属性がonになっていると、このContent項目に値が設定されたタイミングでPreferenceに自動で値が記録されます。 次回のContent初期化時には、まずこのPreference保存内容が参照されて、取得できればその値が返るようになります。

この機能は、データモデルによる永続化で値が保持されないような項目に使用してください。
例えば印刷実行画面での、実行設定のチェックボックスのON/OFFをPreferenceで記録しておき、 次回同じ画面を開いた時に前回の設定内容で表示するといったことができるようになります。

なお、このpreferenceタグの設定はloadタグよりも優先されます。
両方記述されている場合、まずpreferenceタグの設定に従ってPreference保存内容が参照されて、その結果がnullの場合にloadタグが評価されます。

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

属性値名 説明 形式 必須/非必須 参照記法可/不可
save Preferenceでの値の保存を行うかの指定です。デフォルトはoffです。 on,
off
必須 不可


loadタグ

記述例 : データモデルの値を初期値とし、無い場合は固定の初期値を使用する場合
<item id="申請日" access="inout" type="value">
    <load from="observable:申請書/申請日"/>
    <load from="calendar:TODAY"/>
</item>
値の読み込み元を指定するタグです。初期値のあるContent項目に対して指定します。
このタグは複数個列挙して記述できます。複数個記述された場合は、上から優先的に読み込みを試みます。

なお、このloadタグの設定は前述のprocedureタグの後に評価されます。 両方記述されている場合、まずprocedureタグの設定に従って手続きが実行され、その結果がnullの場合にloadタグが評価されます。

また、それぞれのloadタグの指定が有効になる条件をcondition属性で指定できます。
これにより、例えば特定の条件下では3つ指定されている家の2番目のloadタグの指定を無効にするといった事が可能です。

注意:loadタグはContentをまたいでは機能しません。
たとえばContentAとContentBでscope="group"の項目XYZを共有していたとして、loadタグがContentA側にのみ記述されている場合はそのload設定はContentAでのみ有効です。 ContentA側で項目XYZに明示的に値をsetしないかぎりContentB側では値はnullであると見なされます。

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

属性値名 説明 形式 必須/非必須 参照記法可/不可
from 項目の取得元の指定。固定値、データモデル中の値などを参照記法で指定できます。 文字列 必須
condition loadタグの有効条件の指定。この条件に合致しなかった場合はloadタグそのものが無視されます。
基本的には、filter参照を使用して条件式を記述します。
この属性値は省略可能です。省略時はデフォルトでtrueになります。
文字列 非必須
(省略時はtrue)


triggerタグ

記述例 : コードの入力と同時にマスタ検索を実行したい場合
<item id="利用者コード" access="input" type="value">
    <trigger action="利用者マスタ検索"/>
</item>
値の入力を契機として実行したい処理を指定するタグです。
画面から入力されたコードを元にマスタを検索して、その結果を入力後すぐに画面に反映したいというような場合に記述します。

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

属性値名 説明 形式 必須/非必須 参照記法可/不可
action 値が入力されたタイミングで実行させたいActionのIDを指定します。 文字列 必須 不可
always 値入力されたら常に実行するか、入力によって値が書き換わった場合にのみ実行するかの指定です。 常に実行ならtrue,書き換わった場合のみであればfalseを指定します。
省略された場合はfalseとして扱われます。
true,
false
非必須 不可


descriptionタグ

記述例 :
<item id="特殊なテーブルモデル" access="output" type="value">
    <description>手続きから取得する、特殊な構造を持つテーブルモデルです</description>
</item>
項目についての説明を記述するタグです。タグに挟んで項目に関するコメントを記述してください。



action-listセクション

記述例 :

<action-list>
    <!-- ================================================
    == 新規作成時のアクション
    ================================================= -->
    <action id="新規作成">
        <remove item="仮払申請書"/>
        <doService service="仮払申請書新規作成">
            <outputServiceSession>
                <outputValue item="仮払申請書"/>
            </outputServiceSession>
        </doService>
        <set item="申請書" value="item:仮払申請書"/>
    </action>
    <!-- ================================================
    == 修正時のアクション
    ================================================= -->
    <action id="修正">
        <set item="仮払申請書" value="item:申請書"/>
    </action>
</action-list>

説明 :
Model寄りの実行処理を表すActionを定義するセクションです。
このセクションの子タグとして、actionタグを複数個記述することが出来ます。
このセクションで定義されたActionは、Contentのインスタンス生成時や破棄時、 Area定義のCommandからの呼び出し、Content項目のTrigger呼び出しによって実行されます。

予約済Action:
以下のAction名は、フレームワーク側で予約されています。
これらの名前を持つActionを定義することで、特定のタイミングでの処理を定義することが出来ます。

予約済Action名 実行タイミング 説明
INIT Content生成時 Contentの初期化を行うためのActionです。
マスタ検索を行ったり、値の初期化などを行いたい場合等に使用します。
CLOSE Content破棄時 Contentの終了処理を行うためのActionです。

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

actionタグ

Contentのインスタンス生成、破棄等のタイミングや、CommandやTriggerによる呼び出しによって 起動されるModel寄りの実行命令を定義するタグです。 このタグの内部に、簡易スクリプト的に処理命令、分岐命令等を記述して処理内容を定義します。
使用できる実行命令については、別途リファレンス が用意されていますので、詳細はそちらを参照してください。

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

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

属性値名 説明 形式 必須/非必須 参照記法可/不可
id アクションを識別するIDを指定します
Content内でユニークになる必要があります。
文字列 必須 不可
implement カスタムActionクラスのクラス名を指定します。
Javaクラスとして作成したActionクラスをここで指定することで使用することが出来ます。
この属性を指定した場合、actionタグの内部は無視されます。
文字列 非必須 不可
activity このアクションの導出元アクティビティのIDを指定します。 文字列 非必須 不可
process このアクションの導出元アクティビティのプロセスを指定します。 文字列 非必須 不可


transition-listセクション

記述例 :

<transition-list>
    <transition next="CC_XXX_001_EditList">
        <description>Configでの検索結果を一覧表示する連携Contentです。</description>
    </transition>
</transition-list>

説明 :
このセクションは省略できます。
連携先のContentに対する論理的なリンク情報を表すセクションです。
このセクションの情報は実行時には参照されません。Content定義をドキュメント化する際に使用されるリンク情報です。

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

transitionタグ

連携先のContentに対するリンクを表すタグです。
属性値は以下の通り。

属性値名 説明 形式 必須/非必須 参照記法可/不可
next リンク先のContentのIDを指定します。 文字列 必須 不可

descriptionタグ :
コンテントのリンク情報に対する説明を記述するタグです。
タグの間に挟んで、Content間のリンクに対するコメントを記述してください。



statusセクション

記述例 :

<status>
    <author>$Author: morishita $</author>
    <datetime>$Date:: 2011-09-17 12:46:24 #$</datetime>
    <version>$Revision: 6627 $</version>
</status>

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

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

authorタグ

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


datetimeタグ

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


versionタグ

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



Content定義全体のサンプル

<?xml version="1.0" encoding="Windows-31J"?>
<!--
 - Copyright
 -->
<!DOCTYPE client-content SYSTEM "../doctype/client-content.dtd">
<!--==============================================================
 == Current-Module:
 == Release-Date:
 == Release-Version:
 == First-Created-On:
 == First-Created-By:
 == Copy-Right-Owner:
 ==============================================================-->
<client-content>
<!--==============================================================
==  コンテントの属性値の宣言
===============================================================-->
    <identity id="CC_WKFL_331_01_Edit"
              name="交通費申請書のEditコンテント"
              stereotype="edit"/>
<!--==============================================================
==  コンテントの詳細説明
===============================================================-->
    <description>
        交通費申請書に対応するEditコンテントです。
    </description>
<!--==============================================================
==  リンクするSVOステートメントの宣言
===============================================================-->
    <reference-list>
        <activity ref="ACPY_331" process="1"/>
        <activity ref="ACPY_332" process="1"/>
        <activity ref="ACPY_333" process="1"/>
        <activity ref="ACPY_334" process="1"/>
        <activity ref="ACPY_335" process="1"/>
    </reference-list>
<!--==============================================================
==  コンテントで参照する項目の宣言
===============================================================-->
    <item-list>
        <!--======================================================
        == 共通コンテント上からの入力項目
        =======================================================-->
        <item id="ワークフロー申請コメント" access="hidden" type="value" scope="group">
            <load from="observable:申請書/ワークフロー申請コメント"/>
            <description>
                共通申請情報パネルからの入力項目
            </description>
        </item>
        <!--======================================================
        == データモデル
        =======================================================-->
        <item id="会計部門" access="hidden" type="model" scope="group">
            <description>
                共通申請情報パネルとやりとりする会計部門マスタ
            </description>
        </item>
        <item id="申請書" access="hidden" type="model" scope="group">
            <description>
                共通申請情報パネルとやりとりする申請書データ
            </description>
        </item>
        <item id="交通費精算書" access="hidden" type="model" scope="group">
            <description>
                交通費精算書のUpdatable
            </description>
        </item>
        <item id="ログイン利用者" access="hidden" type="model" scope="global">
            <description>
                ログイン時に取得したログイン情報
            </description>
        </item>
    </item-list>
<!--==============================================================
==  コンテントアクション
===============================================================-->
    <action-list>
        <!--======================================================
        == 新規作成時のアクション
        =======================================================-->
        <action id="新規作成">
            <remove item="交通費精算書"/>
            <doService service="交通費精算書新規作成">
                <outputServiceSession>
                    <outputValue item="交通費精算書"/>
                </outputServiceSession>
            </doService>
            <set item="申請書" value="item:交通費精算書"/>
        </action>
        <!--======================================================
        == 引継のアクション
        =======================================================-->
        <action id="引継">
            <remove item="交通費精算書"/>
            <set item="交通費精算書" value="item:申請書"/>
        </action>
        <!--======================================================
        == 画面上で保存を行った場合のアクション
        =======================================================-->
        <action id="保存">
            <doService service="交通費精算書保存">
                <inputServiceSession>
                    <inputValue item="会計部門No"/>
                    <inputValue item="ワークフロー申請コメント"/>
                    <inputValue item="ログイン利用者"/>
                    <inputValue item="交通費精算書"/>
                </inputServiceSession>
            </doService>
        </action>
    </action-list>
<!--==============================================================
==  コンテントの遷移先リスト
==  (コンテントカタログ間の関連定義。実行時には参照されません)
===============================================================-->
    <transition-list>
    </transition-list>
<!--==============================================================
==  ファイル編集情報
===============================================================-->
    <status>
        <author>$Author: morishita $</author>
        <datetime>$Date:: 2011-09-17 12:46:24 #$</datetime>
        <version>$Revision: 6627 $</version>
    </status>
</client-content>


更新情報

  • 最終更新者 : $Author: morishita $
  • 最終更新日時 : $Date:: 2011-09-17 12:46:24 #$
  • バージョン : $Revision: 6627 $



Copyright © 2006, Atrris Corporation