メタWebUI

第0.43版 2016年10月23日
第0.39版 2010年 9月23日

● 画面データの初期化/バックアップに使用するXMLの定義(dtd/WebUiData.dtd)
<!ELEMENT WebUiData (Target, MenuItem*)>
<!ELEMENT Target (#PCDATA)>
<!ELEMENT MenuItem (LineNumber, Name, Kind, Text, View?)>

フレームの左側は、表示文字列がMenuItem/TextのMenuItem/LineNumber順の
メニューに相当です。MenuItem/KindはTitleかViewです。
Titleなら静的ラベル、Viewならフレームの右側の画面を指定するリンク。
KindがViewのリンクをクリックすると、
WebUI`Target`Servlet::invoke`Name`(list params, DbConnection conn);
が呼び出されます。

<!ELEMENT View (RoleName*, UiElem*)>
<!ELEMENT RoleName (#PCDATA)>
<!ELEMENT UiElem (LineNumber, Name, Kind, Text?, Selectable?)>

Viewの画面を表示するには、RoleNameで指定した役割を、
ログインユーザが持っている必要があります。
Viewは、UiElem/Kindで指定される画面要素(UiElem)が
UiElem/LineNumber順に並んだ画面となります。
以下は画面要素一覧です。
Kind 出力HTML 備考
Title <H3>Text</H3> タイトル
Text Text テキスト
Link <A HREF="`Name`">`Text`</A> リンク
BR <BR/> 改行
HR <HR/> 水平線
Button <INPUT TYPE="submit" NAME="`Name`" VALUE="`Text`"/> プッシュボタン
Check <INPUT TYPE="checkBox" NAME="`Name`"/>`Text` チェックボタン
Radio <INPUT TYPE="radio" NAME="`Name`" VALUE="`Text2`"/>`Text2` ラジオボタン
TextField <INPUT TYPE="text" NAME="`Name`" VALUE="`Text2`" SIZE="20"/> テキスト入力フィールド
Password <INPUT TYPE="password" NAME="`Name`" VALUE="`Text2`" SIZE="20"/> パスワード入力フィールド
Hidden <INPUT TYPE="hidden" NAME="`Name`" VALUE="`Text2`"/> 隠しパラメタ
Upload <INPUT TYPE="file" NAME="`Name`"/> ファイルアップロード
TextArea <TEXTAREA NAME="`Name`" ROWS="20" COLS="72" >`Text2`</TEXTAREA> 複数行入力エリア
Select <SELECT>○○○</SELECT> コンボボックス
Table1 <TABLE BORDER="1">○○○</TABLE> 1レコードでカラムを縦に並べる表
Table2 <TABLE BORDER="1">○○○</TABLE> 複数レコードでレコードを縦に並べる表
Text2となっている所は、頭の1文字が「@」ならServletのメンバー変数の値、
頭の1文字が「#」ならsessionの属性値に変換されます。

UiElem/KindがSelect,Table1,Table2の時は、可変数個の出力を含み、
UiElem/Selectableのタグを持ち、表示項目をここで指定します。

<!ELEMENT Selectable (Children*, Condition2?, TableItem*)>

<!ELEMENT Condition2 (
    RangePath, RangeType, From, To,
    OrderByPath, OrderByType, Desc, CountFrom, CountMax,
    ColumnName, ColumnValue, ColumnName2, ColumnValue2)>

XPathがRangePath(型はintegerかstringでRangeTypeで指し)でその値がFromからToまでのレコードを、
XPathがOrderByPath(型はintegerかstring)でその値(型はintegerかstringでOrderByTypeで指定)でソートした、
レコード群に相当するXmlDbObjectのコレクションを取得する時の条件に追加します。
Descが非trueの時は昇順、trueの場合は降順でソートします。
レコードの数が多い場合、CountFromからCountMaxまでのレコードが対象になります。
ColumnName/ColumnName2で指定されるXPathの値が空でない場合、
ColumnValue/ColumnValue2が(likeで)マッチするという条件が追加されます。

<!ELEMENT Children (LineNumber, ((MsgType, MsgVersion, DTDfilename) | ChildPath), Condition*, Type, Default?)>

Selectable/Childrenは(MsgType, MsgVersion, DTDfilename)の場合、
メッセージ種類を指定します。XmlUtilityのXmlDbAccessorの以下のメソッドに渡されます。
    void create(string msgType, string msgVersion, DbConnection conn);
    void setDTDfilename(string dtd_filename);
MsgTypeは、DTDで指定されたXML形式のトップタグ、
MsgVersionはバージョンが有る場合、DTDのバージョン、無ければdefaultです。
通常表に表示する対象は、XMLユーティリティですが、フラットなDBテーブルも
対象にすることが出来、その場合、MsgVersionの値はdbTalbeにします。
DTDfilenameはDTDのファイル名です。このXmlDbAccessorで通常以下の事が出来ます。
    - 様々な条件でXmlDbObjectの取得。
    - XMLメッセージの一括格納。
    - XMLメッセージの一括取出し。

Selectable/Children/ChildPathの場合は、
(MsgType, MsgVersion, DTDfilename)で得られたXmlDbObjectが1個で、
このXmlDbObjectに対しXPathで指定されるpathで以下のメソッドに渡されます。
    list getChildren(string path);

<!ELEMENT Condition (LineNumber, Path, Value)>

Selectable/Children/Conditionは、
XPathがPathで指定される値がValueの値と(likeで)等しいという条件を追加します。

Selectable/Children/Typeは、取得されるXmlDbObjectが1個の場合はsingle、
複数個の場合はmultipleを入れます。

Selectable/Children/Defaultは、KindがSelectの時に、
selected=trueにするOPTION値を指定します。

<!ELEMENT TableItem (LineNumber, Path, Editable, Password?)>

Selectable/TableItemは表を表示する時に、行をLineNumber順にし、
各カラムを表示するか、カラムの値が編集可能か、パスワードの様に
入力時に入力文字列を隠すかを指定します。
Kind Text2 TableItem/Path TableItem/Editable TableItem/Password
Table1 edit_mode このタグで指定された項目だけ表示。 このタグの値がedit_mode以上なら編集状態で表示。 このタグの値がtrueの時、文字列を隠す。
Table2 radio このタグで指定された項目だけ表示。 radioの値がcheckならチェックボタン付き、checkでないならラジオボタン付き。