メニューの内容を編集する

最終更新日: 2024年9月30日

メニューの構造

Designerの環境タブからスクリプトを選びます。実行タイミング "メニュー" のスクリプトで、次のコードを実行することでメニュー構造を知ることができます。

var menu = p.request.getAttribute("__jfc_menubar");
print(menu);
実際のスクリプトファイルは WEB-INF/script/__sys/menu.js として保存されます。

出力結果の例を示します。

<?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)

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属性をセットする。