メニューの構造
Designerの環境タブからスクリプトを選びます。実行タイミング "メニュー" のスクリプトで、次のコードを実行することでメニュー構造を知ることができます。
var menu = p.request.getAttribute("__jfc_menubar");
print(menu);
出力結果の例を示します。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<menubar>
<menu order="10000">
<title>管理処理</title>
<menu order="10001">
<title>ポータル管理</title>
<item name="showListJfcportal" desc="ポータル設定" order="10002"/>
<item name="showListJfcportlet" desc="ポートレット設定" order="10003"/>
</menu>
<menu order="10100">
<title>ジョブ管理</title>
<item name="showListJfcjob" desc="ジョブマスタ検索" order="10102"/>
<item name="showListJfcjobschedule" desc="ジョブスケジュール検索" order="10101"/>
<item name="showListJfcjobstatus" desc="ジョブ状態検索" order="10103"/>
<item name="showListJfcjobstatususer" desc="ユーザジョブ状態検索" order="10104"/>
</menu>
<menu order="10200">
<title>ワークフロー管理</title>
<item name="showListJfcflowSetting" desc="フローパターン検索" order="10203"/>
<item name="showListJfcparticipantSetting" desc="フロー参加者設定検索" order="10204"/>
<item name="showListJfcproxySetting" desc="代理者設定検索" order="10207"/>
<item name="showListJfcstartworkstate" desc="開始フロー状態検索" order="10201"/>
<item name="showListJfcsuspendworkstate" desc="保留フロー状態検索" order="10202"/>
<item name="showListJfcworkflowSetting" desc="ワークフロー設定検索" order="10205"/>
<item name="showListJfcworkstate" desc="フローイベント検索" order="10206"/>
</menu>
<menu order="10300">
<title>モデル定義</title>
<item name="showListJfcdomain" desc="ドメイン情報検索" order="10303"/>
<item name="showListJfcmodel" desc="定義モデルの確認" order="10301"/>
<item name="showListJfcmodel4dm" desc="データメンテナンス" order="10302"/>
</menu>
<menu order="10400">
<title>バッチジョブ</title>
<item name="showListJfcbatchjobExecution" desc="バッチジョブ実行結果検索" order="10402"/>
<item name="showListJfcbatchjobInstance" desc="バッチジョブインスタンス検索" order="10401"/>
<item name="showListJfcbatchstepExecution" desc="バッチステップ実行検索" order="10403"/>
</menu>
<item name="showListLog" desc="システムログ閲覧" order="10509" color="#006400" iconClass="fas fa-file-alt"/>
<item name="showListLogonUsers" desc="ログオンユーザ管理" order="10513" color="#B22222" iconClass="fas fa-users-cog"/>
<item name="showAboutApp" desc="このアプリケーションについて" order="10510" color="#006400" iconClass="fas fa-info-circle"/>
<item name="initLoader" desc="インポートとエクスポート" order="10507" color="#4169E1" iconClass="fas fa-sync-alt"/>
<item name="maintenanceApp" desc="メンテナンスモード切り替え" order="10514" color="#B22222" iconClass="fas fa-wrench"/>
<item name="analyticsLog" desc="統計情報" order="10508" color="#006400" iconClass="fas fa-chart-bar"/>
<item name="showListJuser" desc="アカウント一覧表示" order="10500" iconClass="fas fa-id-card"/>
<item name="showListJfcgraphsetting" desc="グラフ設定" order="10506" iconClass="fas fa-list-alt"/>
<item name="showListJfcgroupnode" desc="グループ階層情報検索" order="10502" iconClass="fas fa-project-diagram"/>
<item name="insertJfclicenseholder" url="mainMenu.do?name=insertJfclicenseholder&action_New=" desc="ライセンスキーファイル認証" order="10512" color="#800000" iconClass="fas fa-key"/>
<item name="showListJfcmailtemplate" desc="メールテンプレート検索" order="10504" iconClass="fas fa-list-alt"/>
<item name="showListJfcreporttemplate" desc="帳票テンプレート検索" order="10505" iconClass="fas fa-list-alt"/>
<item name="showListJgroup" desc="グループ検索" order="10501" iconClass="fas fa-users"/>
<item name="showListJnews" desc="お知らせ検索" order="10503" iconClass="fas fa-broadcast-tower"/>
</menu>
<menu order="20000">
<title>マスタ管理</title>
<menu order="20001">
<title>休日</title>
<item name="showListJholidayCalendarview" desc="休日設定" order="20002" iconClass="fas fa-calendar-alt"/>
<item name="uploadUpdateJholiday" desc="アップロード" order="20003" color="#B22222" iconClass="fas fa-upload"/>
</menu>
</menu>
<menu order="30000">
<title>サービス</title>
<item name="showListTestmodel" desc="テストモデル検索" order="100"/>
<item name="downloadTestmodel" desc="テストモデルダウンロード" order="101"/>
<item name="uploadUpdateTestmodel" desc="テストモデルアップロード更新" order="102"/>
</menu>
<menu order="40000">
<title>共通処理</title>
<item name="userPreference" desc="プレファレンス" order="40001" iconClass="fas fa-cog"/>
<item name="changeJuserPassword" url="mainMenu.do?name=changeJuserPassword&action_Update=password" desc="パスワード変更" order="40002" iconClass="fas fa-edit"/>
</menu>
</menubar>
- メニューもWagbyが扱う"モデル"の一つです。そのためprint文でコンソールに内容を出力した場合はxml形式で出力されます。
- メニューは再帰構造となっています。トップレベルは"menubar"で、その中に複数の"menu"が含まれます。menuの中にmenuを含めることができます。画面上のアイコンに相当するのは"item"になります。
- titleはタブ名になります。
- itemのname属性がリンク先です。desc属性が画面に表示されるアイコン名です。color属性が色です。iconClass属性がアイコンを示すCSSです。
- メニューの表示はorder順になります。
メニューの一部を隠すR9.2.6
システム管理者(admin)を含む、どのアカウントでログオンした場合にも、次のメニューを非表示とする例を示します。
このスクリプトを修正した後のテストは、いったん admin をログアウトし、再ログオンしてください。
var menubar = p.request.getAttribute("__jfc_menubar");
var mainmenus = menubar.getMenu();
for (var i=0; i<mainmenus.length; i++) {
var mainmenu = mainmenus[i];
var title = mainmenu.title;
if (title === '管理処理') {
var removeitems = new java.util.ArrayList();
var submenus = mainmenu.content;
for (var j=0; j<submenus.length; j++) {
var submenu = submenus[j];
if (submenu.title === 'ジョブ管理') {// 管理処理 > ジョブ管理について
var items = submenu.content;
var removesubmenu = new java.util.ArrayList();
for (var k=0; k<items.length; k++) {
var item = items[k];
//print(item);
if (item.name !== null && (
item.name.equals('showListJfcjob') || // ジョブマスタ検索
item.name.equals('showListJfcjobstatus') || // ジョブ状態検索
item.name.equals('showListJfcjobstatususer') // ユーザジョブ状態検索
)) {
removesubmenu.add(k);
}
}
for (var k=removesubmenu.size()-1; k>=0; --k) {
var index = removesubmenu.get(k);
submenu.removeContent(index);
}
} else if (submenu.title === undefined) {
//print(submenu.name+" "+submenu.desc);// この場合 submenu = item となっている。
if (submenu.name.equals('showListLog')) {// システムログ閲覧
removeitems.add(j);
}
}
}
for (var k=removeitems.size()-1; k>=0; --k) {// 管理処理直下のメニュー群を消去する
var index = removeitems.get(k);
mainmenu.removeContent(index);
}
}
}
- menubarのgetMenuメソッドを使って、含まれるすべての(第一レベルの)menuを取得できます。
- 各menuのremoveContentメソッドを使って、内容を削除することができます。要素番号を指定する方式のため、複数の内容を削除する場合はいったん要素番号を収集し、うしろから削除するようにするとよいでしょう。
メニュー以外の画面へ遷移させるR9.2.6
例えばインターネットアカウントの場合、メニュー画面を表示させたくない場合 menu.js に次のように記述します。
var username = ((p.user!==null)?p.user.getUsername():"");
if (username === 'internet1') {
return "redirect:insertCUSTOMER.do?action_New=";
}
上の例ではログオンアカウントが internet1 の場合、顧客モデル(CUSTOMER)の新規登録画面へ遷移させています。
Menubarが提供するAPIは次の通りです。
修飾子と型 |
メソッドと説明 |
Menu[] |
getMenu() menuオブジェクトの配列を返す。 |
void |
setMenu(Menu[] menus) menuオブジェクトの配列をmenubarにセット(置換)する。 |
void |
setMenu(Menu menu) 1つのmenuオブジェクトをmenubarにセット(置換)する。 |
void |
addMenu(Menu[] menus) menuオブジェクトの配列をmenubarに追加する。 |
void |
addMenu(Menu menu) 1つのmenuオブジェクトをmenubarに追加する。 |
int |
sizeMenu() このmenubarが保持するmenuオブジェクトのサイズを返す。 |
void |
setMenu(int index, Menu menu) 指定したindex位置にメニューをセットする。 |
void |
addMenu(int index, Menu menu) 指定したindex位置にメニューを追加する。 |
void |
removeMenu(int index) 指定したindex位置のメニューを削除する。 |
void |
removeMenu(Menu menu) 指定したmenuオブジェクトを削除する。 |
void |
clearMenu() すべてのmenuオブジェクトを消去する。 |
IMenuChoiceはメニューに含まれる要素がもつ共通のインタフェースです。このインタフェースをもつメニューオブジェクトは Menu と Item があります。
修飾子と型 |
メソッドと説明 |
int |
getOrder() menuオブジェクトの並び順を返す。 |
void |
setOrder(int order) menuオブジェクトの並び順を指定する。 |
boolean |
checkOrder() menuオブジェクトの並び順が指定されている(何らかの値がある)場合にtrue を返す。 |
String |
getColor() menuオブジェクトの色を返す。 |
void |
setColor(String color) menuオブジェクトの色を指定する。 |
String |
getTitle() menuオブジェクトのタイトルを返す。 |
void |
setTitle(String title) menuオブジェクトのタイトルを指定する。 |
String |
getTooltip() menuオブジェクトのツールチップを返す。 |
void |
setTooltip(String tooltip) menuオブジェクトのツールチップを指定する。 |
String |
getIconClass() menuオブジェクトのアイコンクラスを返す。 |
void |
setIconClass(String iconClass) menuオブジェクトのアイコンクラスを指定する。 |
Img |
getImg menuオブジェクトのイメージクラスを返す。 |
void |
setImg(Img img) menuオブジェクトのイメージクラスを指定する。 |
MenuはIMenuChoiceインタフェースを実装しているため、IMenuChoiceのすべてのメソッドが利用できます。さらにMenu独自のAPIとして次のものが用意されています。
IMenuChoice[] |
getContent() menuオブジェクトの内容を配列として返す。 |
void |
setContent(IMenuChoice[] contents) (メニューに関する)オブジェクトの配列をmenuにセット(置換)する。 |
void |
setContent(IMenuChoice contents) 1つの(メニューに関する)オブジェクトをmenuにセット(置換)する。 |
void |
addContent(IMenuChoice[] contents) (メニューに関する)オブジェクトの配列をmenuに追加する。 |
void |
addContent(IMenuChoice content) 1つの(メニューに関する)オブジェクトをmenuに追加する。 |
int |
sizeContent() このmenuが保持する(メニューに関する)オブジェクトのサイズを返す。 |
IMenuChoice |
getContent(int index) 指定したindex位置のメニューオブジェクトを返す。 |
void |
setContent(int index, IMenuChoice content) 指定したindex位置にメニューオブジェクトをセットする。 |
void |
addContent(int index, IMenuChoice content) 指定したindex位置にメニューオブジェクトを追加する。 |
void |
removeContent(IMenuChoice content) 指定したメニューオブジェクトを削除する。 |
void |
clearContent() すべてのメニューオブジェクトを消去する。 |
ItemはIMenuChoiceインタフェースを実装しているため、IMenuChoiceのすべてのメソッドが利用できます。さらにItem独自のAPIとして次のものが用意されています。
修飾子と型 |
メソッドと説明 |
String |
getName() このItemの名前を返す。この名前はURLの一部として利用される。 |
void |
setName(String name) このItemの名前をセットする。 |
String |
getDesc() このItemの説明を返す。この説明はメニューアイコンに表示されるタイトルとして利用される。 |
void |
setDesc(String desc) このItemの説明をセットする。 |
Img
Imgはメニューをアイコンではなく画像で表現します。
修飾子と型 |
メソッドと説明 |
String |
getSrc() イメージのソースを返す。 |
void |
setSrc(String src) このイメージのソースをセットする。 |
int |
getWidth() このイメージの幅を返す。 |
void |
setWidth(int width) このイメージの幅をセットする。 |
int |
getHeight() このイメージの高さを返す。 |
void |
setHeight(int height) このイメージの高さをセットする。 |
String |
getAlt() このイメージのalt属性を返す。 |
void |
setAlt(String alt) このイメージのalt属性をセットする。 |
String |
getStyle() このイメージのstyle属性を返す。 |
void |
setStyle(String style) このイメージのstyle属性をセットする。 |