3.2
汎用検索(Entity Listing)

1. 汎用検索(Entity Listing)

汎用検索(Entity Listing)はエンティティに対して、

  • エンドユーザーが自分自身で抽出項目やフィルター条件を指定したり、システム管理者が定期的なデータ抽出作業用の定型フィルター条件を作成したり

  • その作成した条件や検索結果を保存・共有

する機能を提供しています。

検索条件の動的指定

登録されているエンティティに対して、抽出項目(Select)やフィルター条件(Where)を画面上で自由に指定することができます。

検索条件、検索結果の保存

指定した検索条件や検索結果はCSVに出力することが可能です。 また、保存リストとして指定した検索条件や検索結果を保存して、再利用したり共有することが可能です。
保存リストはGEM機能のTopViewパーツとしてTop画面に配置する方法と、メニューから画面遷移する方法を提供しています。

2. 操作説明

2.1. 画面構成

entitylisting ope structure

2.2. 画面操作

データアイテム選択

エンティティ選択

エンティティをドロップダウンから選択します。選択すると アイテム 部分にプロパティが表示されます。

選択可能なエンティティやプロパティはEntityListingメタデータで指定することが可能です。EntityListingメタデータを利用しない場合は、エンティティ権限の設定により参照可能なエンティティやプロパティが表示されます。
プロパティ選択

抽出項目 を設定したい場合は、アイテムをダブルクリックするか、 抽出項目 領域にドラッグ&ドロップすることで追加されます。

フィルター条件 に追加したい場合は、フィルター条件下部の「アイテムをドロップしてください」という領域にドラッグ&ドロップすることで追加されます。

entitylisting ope extractionitem

プロパティがReferenceプロパティの場合は、左に右向き「▼」が表示されます。 このアイテムをクリックすることでReference対象エンティティのプロパティが表示されます。

entitylisting ope reference

抽出項目設定

entitylisting ope extractionitem2
列の並び替え

抽出項目の列の順番はドラッグ&ドロップで並びかえることが可能です。

集計関数設定

抽出項目に対して、集計関数を指定することが可能です。 集計関数として利用できる関数は、ドロップされたアイテムのデータ型によって決まります。

entitylisting ope extractionitem aggregation
表示設定

検索結果一覧の表示設定を行うことが可能です。

  • 配置設定
    左寄せ、中央寄せ、右寄せを設定します。未指定の場合、「左寄せ」になります。

  • 列幅設定
    検索結果の表示列幅を設定します。未指定の場合、150pxになります。

  • 数値フォーマット設定(集計項目、数値項目のみ)
    数値をフォーマットするかを設定します。
    未指定の場合、GemConfigServiceの「formatNumberWithComma」がtrueの場合にのみフォーマット表示されます。 GemConfigServiceの「formatNumberWithComma」がtrueの場合で、フォーマット表示したくない場合は、「フォーマットしない」を選択する必要があります。

フィルター条件

entitylisting ope filteritem expression

フィルター条件として指定可能な条件入力方法は、ドロップされたアイテムのデータ型によって決まります。

条件式

フィルターに条件が1つでも追加されると、 条件式 の入力エリアが表示されます。 この条件式には各フィルターの組み合わせ条件を指定することができます。

${フィルタの行番号} で対象の条件を指定します。

※ 条件式には、カッコ、AND、OR、NOT を利用することができます。

フィルター条件式が未指定の場合は、同一プロパティはOR条件として、他プロパティに対してはAND条件として検索します。

画面の例の場合、条件式が指定されていなければ、

 ( 販売ステータス = '準備中' OR 販売ステータス = '販売中' ) AND ( 在庫数 < 500 OR 在庫数 < 100 )

となりますが、

($1 and $2) or ($3 and $4)

を指定した場合は、

 ( 販売ステータス = '準備中' AND 在庫数 < 500 ) OR ( 販売ステータス = '販売中' AND 在庫数 < 100 )

として検索することができます。

検索条件、検索結果の保存

設定した検索条件や検索結果を保存リストとして保存することができます。保存データは別名での保存も可能です。

まだ保存されていない場合
entitylisting ope action save
保存されているデータを編集で開いた場合
entitylisting ope action saved

保存ボタン をクリックすると、ダイアログが表示されます。

entitylisting ope savedlist
保存フォルダ

保存リストの名前に表示されているフォルダをクリックすることで、 保存フォルダ にフォルダが設定されます。 また フォルダの作成 から新しくフォルダを作成することができます。

entitylisting ope savedlist folder
共有

保存した保存リストを他のユーザーが参照することができるようになります。

他者編集

保存した保存リストをもとに、他のユーザーが編集画面を表示することができるようになります。 他者編集を許可しない場合は、保存リスト上でデータを参照することはできますが、編集画面には遷移できません。

保存形式
  • 条件を保存
    条件のみ保存されます。このリストを開くと、保存された条件で最新のデータを検索します。

  • スナップショットを保存
    条件とデータを保存します。このリストを開くと、保存時のデータが表示されます。

※ スナップショットについて
スナップショットとして保存したデータについては、保存データ編集(検索条件編集)や、保存されたエンティティの参照画面への遷移は行えません。

条件編集

保存リストとして参照する際に、フィルター条件を変更できるかを指定するものです。 例えば、システム管理者がある特定のデータに対する抽出条件を保存リストとして保存して一般ユーザーに公開したときに、一般ユーザーが検索条件を変更してもいいような場合に利用します。

編集を許可した場合
entitylisting ope list permition
編集を許可しない場合
entitylisting ope list nopermition
リスト初期表示

保存リストを画面に表示する際に、同時に検索を実行するかを指定します。 対象のデータ件数が多い場合、または条件の指定を行ってから検索させたい場合など、リスト初期表示を「しない」に設定することで画面表示時に検索を行いません。

※ フォルダやデータの可視範囲について
フォルダや保存データの他者への可視範囲については、エンティティ権限で制御します。 フォルダは mtp.listing.SavedListFolder、保存データは mtp.listing.SavedList エンティティに対して権限を設定します。

検索結果一覧

抽出項目オブジェクトID が含まれている場合、リンクとして表示されます。 リンクをクリックすることで、エンティティの参照ダイアログが開きます。

entitylisting ope entity reference

※ 対象エンティティの OID プロパティをカスタマイズしている場合、 OID プロパティが1つのみであれば、その項目に対してもリンクが張られます。 複数項目を利用して OID プロパティを指定している場合(複合指定)は、リンク表示されません。

※ EntityListingメタデータを定義することで、 Name プロパティに対してもリンクを表示することが可能です。

※ EntityListingメタデータを定義することで、参照時のView指定や編集可能とするかの設定が可能です。 デフォルトでは、 default Viewで 編集可 として動作します。

3. EntityListingの管理

3.1. EntityListingの作成

EntityListingアイコンを右クリックして、「EntityListingを作成する」を選択してください。

3.2. 設定

メタデータを定義しなくてもEntityListing機能自体は実行することが可能です。
ただし、ユーザーによって利用可能なエンティティやプロパティを制御したい場合には、EntityListingメタデータを作成します。

Default Setting

ここでの設定は、下のCustom Settingを設定していないエンティティに対してデフォルトで適用される設定です。

設定項目 設定値

exclude mtp entities

選択可能なエンティティから「mtp.*」を除外します。 下のCustom Settingでエンティティを1つでも選択している場合は、そちらが優先されます。

exclude inherited properties

選択可能なプロパティとして継承プロパティを除外します。 下のCustom Settingでエンティティ別にプロパティ設定をしている場合は、そちらが優先されます。 選択した場合、オブジェクトIDが選択可能なプロパティとして選択できなくなるため、エンティティの参照画面が開けなくなります。 (エンティティ定義でOIDプロパティを独自指定している場合は可能です)

to edit the narrowing condition, as dialog

抽出項目に集計関数がある場合に利用可能な絞り込み条件(Having条件)の指定方法を設定します。

ダイアログモードの場合

絞り込みボタンが表示され、クリックで結果の絞り込みを行うダイアログを表示

直接編集モードの場合

フィルタの下に絞り込み対象を指定する領域を表示

handle inherited user property as name

エンティティの「作成者」、「更新者」、「ロックユーザー」を名前で扱います。 Filter条件に指定する場合は、Userエンティティを選択します。 検索結果、CSVファイルには名前が出力されます(ただしソートはOIDで比較します)。

display user name in privileged execution

handle inherited user property as name がチェックされている場合、ユーザー名を特権実行で取得します。 それによりユーザー情報のEntity、またはユーザー名のプロパティに参照権限が無いユーザーでもユーザー名を表示することが可能です。

show reference dialog for edit mode

エンティティの参照画面を開く際に編集可能モードで開くかを指定します。
下のCustomSettingでエンティティ別に設定をしている場合は、そちらが優先されます。

show reference dialog from name property

抽出項目として「name」プロパティを指定した際に、参照画面のリンクを表示するかを指定します。
下のCustomSettingでエンティティ別に設定をしている場合は、そちらが優先されます。

can CSV download

条件編集画面で「CSV Download」を利用できるかを指定します。
保存リストの詳細画面上で「CSV Download」を許可するかは、TopViewの「SavedList」Partsで行う必要があります。

CSV multiple format

CSVファイルダウンロード時の多重度が複数のプロパティの出力形式を指定します。

Each Column

多重度の数分別々の列に出力します。

One Column

1つの列にカンマ区切りでまとめて出力します。

One Column Fill Null

1つの列にカンマ区切りでまとめて出力します。 登録データが多重度分保存されていない場合にも多重度分空を補完します。

CSV file name format

CSVファイルダウンロード時のファイル名をGroovyTemplate書式を利用して指定します。 詳細はCSV file name formatを参照してください。

use property name in CSV header

CSVヘッダに表示名ではなくプロパティ名を出力します。

Custom ViewScript

条件編集画面内に埋め込むカスタムコード(HTML)を設定できます。GroovyTemplateとして定義します。

Custom JavaScript

条件編集画面にJavaScriptコードを埋め込みます。
コードは<script>タグ内に出力されます。GroovyTemplate形式ではないためバインド変数などは利用できません。

Query interrupter class name

実際に検索が実行される直前に、実行するEQLをカスタママイズするためのクラスを指定します。 詳細はQuery Interrupterを参照してください。

CSV file name format

CSVファイルダウンロード時のファイル名をGroovyTemplate書式を利用して指定します。 フォーマットが指定されている場合、ボタンに「(*)」が表示されます。 また、/とスペースについては、_(アンダースコア)に変換します。

利用可能なバインド変数は、編集ダイアログの「Notes」を参照してください。

(例)CSVファイル名の後ろに出力時の時間を付加する。
${csvName}_${yyyy}${MM}${dd}${HH}${mm}${ss}
(例)保存リストの場合は保存名を先頭に付加する。
<%
def fileName = entityDisplayName;
if (savedListName != null) {
    fileName = savedListName + "_" + entityDisplayName;
}
%>
${fileName}_${yyyy}${MM}${dd}${HH}${mm}${ss}
Query interrupter

パフォーマンス改善などの目的で、実際に検索を行う直前のEQLをカスタマイズすることが可能です。 以下のQueryInterrupterを実装したJavaクラスまたはUtilityClassを指定します。

org.iplass.mtp.view.entitylisting.QueryInterrupter

EntityListingの検索では、ページング制御のための件数取得と実際のデータ検索の2回EQLが実行されます。 QueryInterrupterではこの直前にEQLをカスタマイズする処理を追加することができます。

スナップショットとして保存されたリストの場合は実行されません。
処理一覧
メソッド 引数 戻り値 処理内容

beforeCount

QueryContext

void

件数取得前処理を行います。

beforeSearch

QueryContext

void

検索前処理を行います。

afterSearch

Object[]

void

検索後処理を行います。afterSearchでは1レコード毎に処理が呼ばれます。
QueryContext#getSelectIndex(propertyName) を利用して、Select句の何番目にプロパティが含まれているかを取得することができます。

QueryContext

package sample.entitylisting;

import org.iplass.mtp.entity.query.Query;
import org.iplass.mtp.entity.query.hint.CacheHint;
import org.iplass.mtp.entity.query.hint.CacheHint.CacheScope;
import org.iplass.mtp.entity.query.hint.TimeoutHint;
import org.iplass.mtp.view.entitylisting.QueryContext;

//実装するIF定義
import org.iplass.mtp.view.entitylisting.QueryInterrupter;

//サンプル用
import org.iplass.mtp.auth.User;

public class SampleQueryInterrupter implements QueryInterrupter{

    //beforeCountとbeforeSearchで渡されるQueryContextはインスタンスが異なります

    @Override
    public void beforeCount(QueryContext context) {

        //QueryContextからQueryを取得
        Query query = context.getQuery();

        //(例)Queryに対してCacheHintを指定
        query.hint(new CacheHint(CacheScope.GLOBAL, 60));

        System.out.println("interrupt result:" + query.toString());

        //(例)Entity権限における限定条件の除外設定
        setWithoutConditionReferenceName(context);
    }

    @Override
    public void beforeSearch(QueryContext context) {

        //QueryContextからQueryを取得
        Query query = context.getQuery();

        //(例)Queryに対してCacheHint、TimeoutHintを指定
        query.hint(new CacheHint(CacheScope.GLOBAL, 60))
        .hint(new TimeoutHint(120));

        System.out.println("interrupt result:" + query.toString());

        //QueryContextからはEntityListing定義名、エンティティ名も取得可能
        System.out.println("target entity listing definition name:" + context.getDefinitionName());
        System.out.println("target entity definition name:" + context.getEntityName());

        //(例)Entity権限における限定条件の除外設定
        setWithoutConditionReferenceName(context);
    }

    @Override
    public void afterSearch(Object[] data, QueryContext context) {

        //(例)Userエンティティに対してメールアドレスを検索された場合、値を置き換える
        if (context.getEntityName().equals(User.DEFINITION_NAME)) {

            //Select句にメールアドレスが含まれる場合(含まれない場合はnull)
            if (context.getSelectIndex(User.MAIL) != null) {

                //Select句に同じプロパティを複数指定可能なので配列で返ってくるので、返ってきた分置き換える
                for (int index : context.getSelectIndex(User.MAIL)) {
                    data[index] = "*****";
                }
            }
        }
    }

    /**
     * Entity権限における限定条件の除外設定
     */
    private void setWithoutConditionReferenceName(QueryContext context) {

        //QueryContextに対してWithoutConditionReferenceNameとしてEntity権限における限定条件を除外するプロパティを指定することができる

        //EntityListingは対象Entityを選択可能なためデフォルト設定のInterrupterで処理する場合はEntity名をチェック
        //Entity別にInterrupterを定義している場合は特にチェック不要

        //対象EntityがUserの場合
        if (context.getEntityName().equals(User.DEFINITION_NAME)) {
            //groupsとrankのEntity権限における限定条件を除外
            context.setWithoutConditionReferenceName(User.GROUPS, User.RANK);
        }
    }

}

Custom Setting

Default Settingではなく、エンティティ個別に設定を行いたい場合に指定します。

entitylisting set customsetting
設定項目 設定値

Target

参照可能なエンティティを選択します。対象外のエンティティを参照しようとした場合は権限エラーとなります。 1つも選択されていない場合は、Default Settingの exclude mtp entities 設定により対象を決定します。

DisRoot

Target 指定されたエンティティのうち、エンティティの選択リストから除外したいエンティティを選択します。 他エンティティの参照先としてのみ検索を許可する場合に指定します。

Custom

個別に Entity Custom Setting 設定されている場合に「Y」が表示されます。

個別にプロパティなどを絞り込みたい場合は、対象のエンティティをダブルクリックしてください。 右側にエンティティごとの設定項目が表示されます。

Entity Custom Setting

設定項目 設定値

exclude inherited properties

選択可能なプロパティとして継承プロパティを除外します。 下のプロパティ選択部分で1件でも選択されている場合は、そちらが優先されます。

handle inherited user property as name

エンティティの「作成者」、「更新者」、「ロックユーザー」を名前で扱います。

display user name in privileged execution

handle inherited user property as name がチェックされている場合、ユーザー名を特権実行で取得します。 それによりユーザー情報のEntity、またはユーザー名のプロパティに参照権限が無いユーザーでもユーザー名を表示することが可能です。

show reference dialog for edit mode

エンティティの参照画面を開く際に編集可能モードで開くかを指定します。

show reference dialog from name property

抽出項目として「name」プロパティを指定した際に、参照画面のリンクを表示するかを指定します。

View Name

エンティティの参照画面を開く際のView名をGroovyTemplate書式を利用して指定します。 詳細はView Nameの指定を参照してください。

CSV file name format

CSVファイルダウンロード時のファイル名をGroovyTemplate書式を利用して指定します。 「Default Setting」と同様です。

Without Condition Reference

Entity権限における限定条件を適用せずに検索を実行する参照先プロパティ名を設定します。特権実行する場合、または Query interrupter class name の設定がある場合はそちらが優先されます。

Query interrupter class name

実際に検索が実行される直前に、実行するEQLをカスタママイズするためのクラスを指定します。 未指定の場合は「Default Setting」の設定が有効になります。 詳細はQuery Interrupterを参照してください。

Propertyリスト

選択可能としたいプロパティをチェックしてください。

View Nameの指定

エンティティの参照画面を開く際のView名をGroovyTemplate書式を利用して指定します。 値が設定されている場合、ボタンに「(*)」が表示されます。

利用可能なバインド変数は、編集ダイアログの「Notes」を参照してください。

(例)文字列直接指定
opeView
(例)GroovyTemplate指定
<%@import org.iplass.mtp.entity.Entity %>

<%
def viewName = "XXXXXXXXX";
%>

${viewName}

検索結果のリンク表示時には、表示対象データのOIDが「oid」としてバインドされています。 Filter条件としてReferenceを指定した場合の参照時はOIDはバインドされません。

3.3. 表示方法

メニューへの登録

条件設定画面を表示するにはメニューにActionMenuItemを登録します。

ActionMenuItemには雛型として gem/template/entitylisting/ViewEntityListingAction というメニューアイテムがあります。 このActionMenuItemをコピーしてメニューアイテムを編集してください。

項目 設定値

Name

管理しやすいように設定してください。

DisplayName

メニューの表示名になります。

Execute Action

gem/entitylisting/view を指定してください。

Parameter

defName=XXX&entityName=XXX&listedId=XXXX

defName

作成したEntityListingメタデータ名を指定します。

entityName

初期表示時に選択したいエンティティ名を指定します。 defNameには表示可能なエンティティを指定する必要があります。

listedId

保存されているListを直接編集モードで開きたい場合に保存リストのOIDを指定します。 これが指定された場合、defName、entityNameは無視されます。 またスナップショットのデータは指定できません(編集不可)。

※EntityListingメタデータが1つでも登録されている場合は、雛形の ViewEntityListingAction から起動しようとするとエラーが発生します。

entitylisting set view error

もしEntityListingメタデータ定義を1件でも作成した場合は、必ずパラメータに defName を指定してください。

4. 保存リスト

保存リスト(SavedList)は、EntityListingや定型集計・簡易BIのローデータを保存、復元する機能です。

Widget

画面左側のWidget表示エリアに表示されます。

savedlist widget
保存リスト

他のユーザーが保存している、かつ公開されているデータも含めて表示されます。

所有リスト

自分で保存したデータが表示されます。 こちらはフォルダ形式ではありません。

データを選択することで、右側に詳細画面が表示されます。

Parts

Top画面に表示されます。

savedlist parts

保存リストと、所有リストがタブで表示されます。 フォルダの作成や名前変更、削除、保存データの名前変更、削除が可能です。 フォルダや保存データを編集する機能はPartsでのみ提供しています。

所有するリスト については、Parts上で 共有他者編集 のON・OFFを設定することができます。

savedlist parts own

4.1. 設定

TopViewのSavedListパーツでは以下の設定が可能です。

設定項目 設定値

Title

タイトルをカスタマイズする場合に設定します。

Icon Tag

Fontawsomeによるアイコンタグを設定します。

Class

スタイルシートのクラス名を指定します。複数指定する場合は半角スペースで区切って下さい。

visible to top view

PartsをTop画面に表示するかを設定します(デフォルト:表示)
Top画面に保存リストPartsを表示したくない場合で、保存リスト機能に対する設定のみを行う場合に表示不可にします。

can delete other user saved list

他のユーザーが保存したデータを削除可能かを設定します(デフォルト:不可)
削除可能とした場合、他者が作成した保存リストのうち、他者編集を許可しているリストが削除できるようになります。

can create folder

フォルダを作成可能かを設定します(デフォルト:可)
作成可能とした場合は、 保存リスト のタブに フォルダの作成 ボタンが表示されます。 またポップアップに フォルダの作成 が表示されます。

can delete folder

フォルダを削除可能かを設定します(デフォルト:不可)
削除可能とした場合は、ポップアップに 削除 が表示されます。

can save snapshot type

スナップショットとして保存可能かを設定します(デフォルト:可)
OFFにした場合は、条件として保存されます。

can csv download

CSV Downloadが可能かを設定します(デフォルト:可)

can direct csv download

保存リストの一覧画面から直接CSV Downloadを許可するかを設定します(デフォルト:不可)
可能とした場合は、ポップアップに CSV Download が表示されます。
またCSV Download時に文字コードを指定する場合は、TopViewの CsvDownload Settings で設定します。

保存リストの詳細画面では、対象となるAggregationやEntityListing定義のCSV Download可否設定をチェックして CSV Downloadボタンの表示を制御していますが、保存リスト一覧上ではこのチェックは行いません (それぞれの保存データをロードする必要があるためパフォーマンスを考慮してチェックしていません)。 許可されていない保存リストについてはWARNログを出力後、空のCSVファイルが出力されます。

run a search when loading detailed data

保存リストを表示する際に、初期検索を行うかのデフォルト値を設定します。

link action mode

保存データのリンクをクリックした際に、ダイアログで表示するか画面遷移するかを指定します(デフォルト:ダイアログ)
画面遷移 を選択した場合は、右クリックで別タブ表示などが行える状態になります。

Interrupter Class

保存リスト上のフォルダやアイテムの表示制御をカスタマイズしたい場合に、カスタマイズ処理を実装したJavaクラスまたはUtilityClassを指定します。 指定するClassは org.iplass.mtp.view.top.parts.listing.SavedListInterrupter を実装する必要があります。 詳細はカスタム処理の組み込みを参照してください。

Edit Custom ViewScript

保存リストの保存画面内に埋め込むカスタムコード(HTML)を設定できます。GroovyTemplateとして定義します。

4.2. 表示方法

メニューへの登録

TopViewの一部としてではなく、専用の保存リスト画面を表示したい場合は、保存リスト画面表示用のActionを利用します(メニューにActionMenuItemを登録します)。

フォルダの作成や他ユーザーの作成したデータの削除など、標準動作を変更しない場合は、ActionMenuItemにあらかじめ登録されている ViewSavedListAction という雛型のメニューアイテムをメニューに追加してください。

savedlist menu

この設定によりメニューに 保存リスト が追加され、保存リスト画面を起動することができます。

savedlist view

標準動作を変更したい場合、ActionMenuItemをコピーし、下記パラメータを指定する必要があります。

Key 設定値

listingTitle

画面タイトルをカスタマイズする場合に設定します。

canDelete

他のユーザーが保存したデータを削除可能かを設定します(デフォルト:false)
削除可能とした場合は、 保存リスト のタブに 削除 ボタンが表示されます。
削除不可とした場合は、 所有するリスト タブ側のみ 削除 ボタンが表示されます。

canCreateFolder

フォルダを作成可能かを設定します(デフォルト:true)
作成可能とした場合は、 保存リスト のタブに フォルダの作成 ボタンが表示されます。

linkActionMode

保存データのリンクをクリックした際に、画面遷移するかを指定します(デフォルト:DIALOG)
画面遷移 にする場合は、 SCREEN_TRANSITION を指定してください。
画面遷移 の場合は、右クリックで別タブ表示などが行える状態になります。

TopViewでの表示

TopViewの一部として保存リストを表示させたい場合は、以下のようにItemをドロップしてください。

savedlist topview

Widget、Parts、または両方を設定することができます。 この設定によりTop画面から保存されたデータを参照することができます。

4.3. カスタム処理の組み込み

保存リスト上に表示されるフォルダやアイテムの表示制御や、変更、削除などの更新制御はEntity権限により制御されます。 カスタム処理を実装することでEntity権限での制御に加えてユーザーごとやフォルダごとの詳細なカスタマイズが可能になります。

以下のインターフェースを実装したJavaクラスまたはUtilityClassを作成してください。 作成したクラスを保存リストパーツの Interrupter Class に指定します。

org.iplass.mtp.view.top.parts.listing.SavedListInterrupter

処理一覧
メソッド 引数 戻り値 処理内容

needFolderPathInfo

boolean
デフォルト: false

権限チェック時にフォルダ情報を必要とするかを返します。 true を返した場合、フォルダまたはアイテムに対するパス情報を引数で渡します。 フォルダの場合、自身のフォルダは含まれません。

getPermission

folder : SavedListFolder

SavedListFolderPermission
デフォルト: SavedListFolderPermission.ALL_PERMIT (全許可)

フォルダに対する権限を返します。 ルートの場合は foldernull で実行されます。 folder に対して、参照、更新、削除、サブフォルダ作成、アイテム作成の権限を返します。
needFolderPathInfotrue を返した場合、 path にルートからのフォルダ情報が渡されます。

path :List<SavedListFolder>

getPermission

savedList : SavedList

SavedListPermission
デフォルト: SavedListPermission.ALL_PERMIT (全許可)

アイテムに対する権限を返します。 savedList に対して、参照、更新、削除の権限を返します。
needFolderPathInfotrue を返した場合、 path にルートからのフォルダ情報が渡されます。

path :List<SavedListFolder>

SavedListInterrupterの例

SavedListInterrupter 上、全ての処理に対してデフォルト実装されています。 必要に応じてオーバーライドします。

package sample.listing;

import org.iplass.mtp.listing.SavedList;
import org.iplass.mtp.listing.SavedListFolder;
import org.iplass.mtp.view.top.parts.listing.SavedListFolderPermission;
import org.iplass.mtp.view.top.parts.listing.SavedListInterrupter;
import org.iplass.mtp.view.top.parts.listing.SavedListPermission;

import org.iplass.mtp.auth.AuthContext;

public class SampleSavedListInterrupter implements SavedListInterrupter {

    @Override
    public boolean needFolderPathInfo() {
        //権限チェックの判断でフォルダ情報が欲しい場合はtrue
        //trueの場合、引数でルートからのパス情報が渡される
        return true;
    }

    @Override
    public SavedListFolderPermission getPermission(SavedListFolder folder, List<SavedListFolder> path) {

        //Adminは全て許可
        if (AuthContext.getCurrentContext().getUser().isAdmin()) {
            return SavedListFolderPermission.ALL_PERMIT;
        }

        if (folder == null) {
            //ルートフォルダは参照のみ
            return new SavedListFolderPermission(true, false, false, false, false);
        }

        if (folder.getName().equals("test")) {
            //testフォルダは非表示
            return SavedListFolderPermission.NO_PERMIT;
        }

        //pathを利用して階層による制御

        if (path == null) {
            //1階層目は「Public」の場合はフォルダ作成、アイテム作成許可
            if (folder.getName().equals("Public")) {
                return new SavedListFolderPermission(true, false, false, true, true);
            } else {
                //それ以外は参照のみ
                return new SavedListFolderPermission(true, false, false, false, false);
            }
        }

        //2階層以上の場合、一階層目が「Public」であれば、全て許可
        if (path.get(0).getName().equals("Public")) {
            return SavedListFolderPermission.ALL_PERMIT;
        } else {
            //それ以外は参照のみ
            return new SavedListFolderPermission(true, false, false, false, false);
        }
    }

    @Override
    public SavedListPermission getPermission(SavedList savedList, List<SavedListFolder> path) {

        //Adminは全て許可
        if (AuthContext.getCurrentContext().getUser().isAdmin()) {
            return SavedListPermission.ALL_PERMIT;
        }

        if (savedList.getFolder() == null) { // またはpath == null
            //ルートフォルダ直下のアイテムは非表示
            return SavedListPermission.NO_PERMIT;
        }

        if (savedList.getFolder().getName().equals("test1")) {
            //test1フォルダのアイテムは参照のみ
            return new SavedListPermission(true, false, false);
        }

        //pathを利用して階層による制御

        //2階層以上の場合、一階層目が「Public」であれば、全て許可
        if (path.get(0).getName().equals("Public")) {
            return SavedListPermission.ALL_PERMIT;
        } else {
            //それ以外は参照のみ
            return new SavedListPermission(true, false, false);
        }
    }

}