4.1
Generic Entity Manager (Spreadsheet)

1. Spreadsheet

Spreadsheetはエンティティをスプレッドシート形式(グリッド)で表示・編集する機能です。 Excelライクな操作感で、データの一覧表示、一括編集、フィルタリング、ファイル出力などを効率的に行えます。

Spreadsheetの定義としてAdmin Console上で以下の属性を設定することができます。

  • グリッド編集 : エンティティをExcelライクなグリッド上で直接編集できます。行の追加、削除、コピー&ペーストによる一括操作に対応しています。

  • 列エディタ : 列ごとにエディタタイプ(文字列、数値、日付、選択、参照など)を指定することで、プロパティの型に応じた入力サポートを提供します。

  • フィルタ機能 : フィルタ項目を設定することで、グリッドに表示するデータを絞り込めます。

  • セル結合 : 結合ルール(セルレイアウトまたはExpression)を定義してセルを結合し、見やすいグリッドを表示できます。

  • ファイル出力 : グリッドのデータをExcel形式で出力できます。

2. 操作説明

2.1. SpreadsheetとExcelの違い・制限事項

SpreadsheetとExcelの違い

SpreadsheetはExcelライクな画面を提供しますが、Excelのすべての機能をサポートするものではありません。 主な違いと制限事項は以下のとおりです。

項目 内容

セル結合・結合解除

画面操作では行えません。セル結合は、Spreadsheet定義の結合ルール(セルレイアウトまたはExpression)に基づいて表示時に適用されます。

数式・ユーザー定義関数

セルへの数式入力やユーザー定義関数の利用はできません。セル編集は値の入力のみです。式・自動採番のプロパティの列は読み取り専用です。

列幅の手動変更

列境界のドラッグやダブルクリックによる列幅の変更はできません。列幅は、Spreadsheet定義の列定義の設定(幅、グリッドオプションの列幅自動調整)に従います。

オートフィルター

列ヘッダーからの絞り込み(オートフィルター)はできません。データの絞り込みは、フィルタ条件エリア(Spreadsheet定義のフィルタ項目)で行います。

複数シート

1つのSpreadsheet定義で扱えるグリッドは1つで、Excelのような複数シート(シートタブ)には対応していません。

列の並べ替え

列ヘッダーのドラッグによる列の並べ替えは表示上のみ有効です。Spreadsheet定義は変更されず、再表示すると元の列順に戻ります。

行の追加・削除、コピー&ペースト、Undo/Redoなどの操作は、機能フラグの設定に応じて利用できます。 データのソートは、機能フラグのソート許可と列定義のソート可能が有効な列のみ可能です。 詳細はグリッド操作を参照してください。

表示上の制限事項:

  • TopViewのパーツとしては未対応です。Spreadsheet画面はメニューから表示してください。

2.2. 画面構成

Spreadsheet画面は以下の要素で構成されます。

spreadsheet ope structure
構成要素 説明

ページタイトル

Spreadsheet定義の表示名が表示されます。

フィルタ条件エリア

グリッドに表示するデータを絞り込むための検索条件を入力するエリアです。 Spreadsheet定義のフィルタ項目に設定されたプロパティが表示されます。

ツールバー

追加削除保存エクスポート ボタンが表示されます。
ボタンの表示は、Spreadsheet定義の機能フラグ(行追加許可、行削除許可、エクスポート許可)の設定により切り替わります。 保存処理の実行中は、ローディングアイコンが表示されます。

バリデーションエラー表示エリア

保存時に入力エラーが発生した場合に、エラー内容が表示されます。

ステータスバー

選択 (選択中の行・セルの件数)、 フィルタ後 (フィルタ適用後のデータ件数)、 全体 (データの全体件数)、 状態 (グリッドの編集状態)が表示されます。

ページャー

グリッドの上下に表示され、ページ単位でのデータ移動が可能です。

グリッドエリア

Spreadsheet定義の列定義に従って、エンティティのデータがスプレッドシート形式(グリッド)で表示されます。

2.3. フィルタ

フィルタ条件エリアでは、グリッドに表示するデータを絞り込むための条件を入力します。

フィルタ条件の入力

検索

各フィルタ項目に比較演算子と条件値を入力し、 検索 ボタンをクリックすると、条件に一致するデータがグリッドに表示されます。

条件の追加

フィルタ項目の右端に表示される + ボタンをクリックすると、同一プロパティに対する条件を追加できます。 例えば 含むより小さい のように、異なる比較演算子の条件を組み合わせることができます。

リセット

リセット ボタンをクリックすると、入力済みのフィルタ条件がクリアされます。

必須設定されたフィルタ項目は、条件を入力しないと検索できません。
spreadsheet ope filter

利用可能な比較演算子

フィルタ項目で選択できる比較演算子は以下となります。 Spreadsheet定義のフィルタ項目ごとに、利用可能な比較演算子を限定することができます。

演算子 説明

等しい

入力値と等しいデータを検索します。

等しくない

入力値と等しくないデータを検索します。

前方一致

入力値で始まるデータを検索します。

後方一致

入力値で終わるデータを検索します。

含む

入力値を含むデータを検索します。

含まない

入力値を含まないデータを検索します。

いずれかと等しい

複数入力した値のいずれかと等しいデータを検索します。

より小さい

入力値より小さいデータを検索します。

より大きい

入力値より大きいデータを検索します。

以下

入力値以下のデータを検索します。

以上

入力値以上のデータを検索します。

範囲

開始値と終了値を入力し、その範囲内のデータを検索します。

相対範囲

日付型の場合は日付の相対範囲、日時型の場合は日時の相対範囲でデータを検索します。 現在日時を基準とした相対的な期間(例:前月1日から現在まで)を指定できます。

値が設定されている

値が設定されている(NULLでない)データを検索します。

値が設定されていない

値が設定されていない(NULLの)データを検索します。

2.4. グリッド操作

セル編集

グリッドオプションで編集許可が有効な場合、セルをダブルクリックすると編集モードになります。 入力後、Enterキーで値を確定し、Escapeキーで編集をキャンセルします。 グリッドオプションの自動編集開始が有効な場合は、セルを移動するだけで自動的に編集モードが開始されます。

セルの編集では、プロパティの型に応じたエディタが使用されます。

プロパティの型 エディタ

文字列

テキスト入力欄で編集します。

長文

複数行のテキスト入力欄で編集します。

整数・浮動小数点・小数

数値入力欄で編集します。最小値・最大値などの入力制約が設定されている場合があります。

日付・日時・時刻

カレンダー(日付選択)や時刻選択の入力支援が表示されます。

真偽値

真値・偽値のラベルを選択して編集します。

選択

ドロップダウンリストから選択して編集します。

参照

参照先エンティティの値を、プルダウンまたは検索ダイアログから選択して編集します。

バイナリ

ファイルをアップロードして編集します(アップロード可能が有効な場合)。

自動採番・式

システムにより値が自動生成されるため、常に読み取り専用です。

列定義で編集可能を無効にした列、および自動採番・式の列は編集できません。
spreadsheet ope celledit

行の追加・削除

行の追加と削除は、以下の方法で行います。

操作 説明

ツールバーの 追加 ボタン

グリッドの末尾に新しい行を追加します。

ツールバーの 削除 ボタン

選択中の行を削除します。

右クリックメニュー

グリッド上で右クリックするとコンテキストメニューが表示され、 追加削除 を実行できます。

キーボードショートカット

行追加は Ctrl + Shift + + ( Cmd + Shift + + )、行削除は Ctrl + - ( Cmd + - )で実行できます。

追加・削除の操作は、保存するまで画面上でのみ反映されます。実際のデータベースへの反映は、 保存 ボタンクリック時の一括保存で行われます。

コピー&ペースト

機能フラグのコピー許可・貼り付け許可が有効な場合、セル範囲のコピー&ペーストが可能です。

  • コピー: 範囲を選択して Ctrl + C ( Cmd + C )

  • 貼り付け: 貼り付け先のセルを選択して Ctrl + V ( Cmd + V )

貼り付けでは、クリップボードの内容が選択セルを起点として展開されます。 Excelなど外部アプリケーションからコピーした値を貼り付けることもできます。

Undo/Redo

セル編集・貼り付け・行追加・行削除は、共通のUndoスタックで管理されており、以下のショートカットで元に戻す・やり直しが可能です。

  • 元に戻す(Undo): Ctrl + Z ( Cmd + Z )

  • やり直し(Redo): Ctrl + Y ( Cmd + Y )、または Ctrl + Shift + Z ( Cmd + Shift + Z )

保存済みの操作は元に戻せません。Undo/Redoの対象は、保存されていない画面上の編集操作です。

ソート

機能フラグのソート許可と列定義のソート可能が有効な列では、列ヘッダーをクリックすることでソートできます。 クリックするたびに昇順・降順が切り替わります。

選択モード

グリッドオプションの選択モードの設定により、グリッド上の選択方法が変わります。

選択モード 説明

セル

セル単位で選択します。

行単位で選択します。

範囲

セル範囲(ドラッグによる矩形選択)で選択します。

チェックボックス

行頭のチェックボックスで行を選択します。

複数選択の設定が 複数 の場合、CtrlキーやShiftキーを併用して複数の行・セルを選択できます。 Ctrl + A ( Cmd + A )で全選択できます。セル編集中の場合は、編集中のセル内のテキスト全選択として動作します(Excelと同じ挙動です)。

2.5. データの保存

ツールバーの 保存 ボタンをクリックすると、グリッド上の編集内容が一括して保存されます。 追加した行は登録、更新した行は更新、削除した行は削除として、それぞれの操作が一括して実行されます。

保存処理は単一のトランザクションで実行され、いずれかの行でエラーが発生した場合は全体がロールバックされます。 エラーが発生した場合、データは保存されず、編集内容は画面上に保持されます。

spreadsheet ope save

バリデーションエラー表示

保存時に必須チェックやプロパティの型チェックでエラーが検出された場合、バリデーションエラー表示エリアに行番号・プロパティ単位のエラー内容が表示されます。

例:

  • 「N行目:[項目名]を入力してください。」(必須エラー)

  • 「N行目:プロパティ名[項目名]の値[入力値]の記述形式が不正です。」(型変換エラー)

  • 「N行目にバリデーションエラーがあります。」(Entity定義のバリデーションエラー)

spreadsheet ope validation

更新競合時の挙動

保存対象のデータが他のユーザーによって更新されていた場合(バージョン不一致)、更新競合エラーとなり、保存はキャンセルされます。 エラーが発生した行番号が表示されるため、画面を検索し直して最新のデータを取得し、編集し直してください。

2.6. セル結合

機能フラグで結合許可が有効な場合、設定したルールに従ってセルが結合されて表示されます。 結合のルールは、以下のいずれかの方法で定義します。

  • セルレイアウト(静的設定): 結合するセル範囲を行・列・行結合数・列結合数で固定値として定義します。

  • Expression(式設定): ルールベースで結合条件(同値比較など)を定義します。

設定方法の詳細はセル結合設定を参照してください。

spreadsheet ope merge

2.7. ファイル出力

機能フラグのエクスポート許可が有効な場合、ツールバーの エクスポート ボタンでグリッドのデータをExcel形式(xlsx)で出力できます。 出力されるファイルには、検索時のフィルタ条件・ソート条件が適用された状態のデータが含まれます。

spreadsheet ope export

3. Spreadsheetの管理

3.1. Spreadsheetの作成

Spreadsheet定義は、Admin Consoleのメタデータ管理から作成します。 メタデータツリーの Spreadsheet アイコン直下または配下のフォルダを右クリックし、 Spreadsheetを作成する を選択します。 表示されたダイアログで、定義名・表示名・概要を入力して作成します。

spreadsheet set create

作成後、編集画面が表示されます。 編集画面では、左側のプロパティドラッグエリアに対象Entityのプロパティ一覧が表示され、フィルタ項目や列定義にドラッグ&ドロップで追加できます。

対象Entityを変更すると、設定済みのフィルタ項目と列定義はクリアされます。

3.2. 設定

Spreadsheet定義の編集画面の Spreadsheet属性 タブでは、以下のセクションを設定します。 各設定項目の詳細は、Definition定義の詳細を参照してください。

spreadsheet set edit
セクション 説明

基本設定

対象Entity、デフォルト検索条件、グリッドオプション、カスタム処理、機能フラグを設定します。

フィルタ項目

フィルタ条件エリアに表示する検索条件の項目を設定します。 対象Entityのプロパティをドラッグ&ドロップで追加できます。

列定義

グリッドに表示する列を設定します。 対象Entityのプロパティをドラッグ&ドロップで追加できます。 列定義は1つ以上必要です。

基本設定

対象Entityとデフォルト検索条件を設定します。

設定項目 説明

対象Entity

Spreadsheetの対象となるEntityを選択します。

デフォルト検索条件

画面表示時に初期適用する検索条件をGroovyスクリプトで指定します。

spreadsheet set basic

グリッドオプション

グリッドの表示・操作に関する設定を行います。 行の高さ、デフォルト列幅、検索件数上限、列幅自動調整、固定列・固定行、選択モード、編集許可などの項目を設定できます。

spreadsheet set gridoptions

カスタム処理

データ登録時のカスタム処理を設定します。

設定項目 説明

カスタム登録処理クラス名

データ登録時に行うカスタム登録処理のクラス名を指定します。 SpreadSheetRegistrationInterrupterインターフェースを実装するクラスを指定してください。

グリッド初期化スクリプト

グリッド生成後に実行する初期化JavaScriptをGroovyテンプレートで指定します。

機能フラグ

グリッド上で許可する操作を設定します。 行追加許可、行削除許可、エクスポート許可、コピー許可、貼り付け許可、ソート許可、結合許可を設定できます。 結合許可を有効にした場合は、セル結合設定(セルレイアウトまたはExpression)もあわせて設定します。

spreadsheet set featureflags

フィルタ項目

フィルタ条件エリアに表示する項目を設定します。 プロパティドラッグエリアからプロパティをドラッグ&ドロップで追加し、各項目の編集ダイアログで表示ラベル、プロパティエディタ、利用可能な比較演算子、必須設定を行います。

spreadsheet set filter

列定義

グリッドに表示する列を設定します。 プロパティドラッグエリアからプロパティをドラッグ&ドロップで追加し、各列の編集ダイアログで表示ラベル、幅、配置、ソート可否、編集可否、必須、多重度、多重度表示モード、カスタムスタイル、エディタタイプを設定します。 エディタタイプはプロパティの型から自動的に決定されます。

spreadsheet set column

3.3. 表示方法

メニューへの登録

Spreadsheet画面を表示するにはメニューにActionMenuItemを登録します。

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

項目 設定値

Name

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

DisplayName

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

Execute Action

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

Parameter

definitionName=XXX

definitionName

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

以下は商品一覧を表示するActionMenuItemの登録例です。

spreadsheet set menu
ActionMenuItemの具体的な登録方式は、Menuを参照してください。
TopViewのパーツとしては未対応です。詳細は、SpreadsheetとExcelの違い・制限事項を参照してください。

4. Definition定義の詳細

Spreadsheet定義( org.iplass.mtp.view.spreadsheet パッケージ)の設定項目について説明します。 Admin Consoleの編集画面で設定する項目と対応しています。

4.1. 基本設定

SpreadSheetDefinitionの設定項目は以下となります。

設定項目 設定値

定義名

定義名を指定します。

表示名

定義の表示名を指定します。多言語対応が可能です。

多言語表示名リスト

多言語の表示名を指定します。

概要

定義の概要を指定します。

対象Entity

Spreadsheetの対象となるEntityを選択します。

グリッドオプション

グリッドの表示・操作に関する設定を指定します。
詳細はグリッドオプションを参照してください。

機能フラグ

グリッド上で許可する操作を指定します。
詳細は機能フラグを参照してください。

デフォルト検索条件

画面表示時にフィルタ条件エリアへ初期設定する検索条件をGroovyスクリプトで指定します。
詳細はデフォルト検索条件スクリプトを参照してください。

グリッド初期化スクリプト

グリッド生成後に実行する初期化JavaScriptをGroovyテンプレートで指定します。
詳細はグリッド初期化スクリプトを参照してください。

フィルタ項目リスト

フィルタ条件エリアに表示する項目を指定します。
詳細はフィルタ項目を参照してください。

列定義リスト

グリッドに表示する列を指定します。列定義は1つ以上必要です。
詳細は列定義を参照してください。

デフォルトソート条件

画面表示時に適用するソート条件を指定します。 ソート対象のプロパティ名とソート方向(ascまたはdesc)をカンマ区切りで指定します(例: name asc, age desc)。 ソート方向を省略した場合は昇順になります。

カスタム登録処理クラス名

データ登録時のカスタム処理クラスを指定します。
詳細はカスタム処理の組み込みを参照してください。

デフォルト検索条件スクリプト

デフォルト検索条件は、画面表示時にフィルタ条件エリアへ初期値を設定するためのGroovyスクリプトです。 リクエストパラメータで指定された条件を引き継いだ上で、スクリプト内で条件を追加・変更できます。

スクリプト内では以下の変数が利用できます。

変数 説明

initCondMap

フィルタ条件を保持する Map<String, String> です。 このMapの内容がフィルタ条件エリアの初期表示に使用されます。

request

リクエスト情報です。

session

セッション情報です。

user

ログインユーザー情報です。

initCondMapのキーは、フィルタ項目のプロパティ名をプレフィックスとした以下の形式で指定します。

キー 説明

{プロパティ名}ConditionCount

同一プロパティに対する条件の件数を指定します。

{プロパティ名}_ope_{index}

比較演算子を指定します。EQ、NE、LT、GT など。

{プロパティ名}_{index}

条件値を指定します。

{プロパティ名}_to_{index}

範囲指定(RG)の終了値を指定します。

{プロパティ名}_in_{index}

いずれかと等しい(IN)の条件値を指定します。

{プロパティ名}_dateRange_{index}

相対範囲(RD/RDT)の範囲種別を指定します。

{プロパティ名}_relativeRangeName_{index}

相対範囲でカスタム範囲を使用する場合の範囲名を指定します。

記述例:

// 検索日(dateプロパティ)の初期条件として、現在日時以降を設定する例
initCondMap.put("startDate_ope_0", "GE")
initCondMap.put("startDate_0", new java.text.SimpleDateFormat("yyyyMMdd").format(new Date()))

// nameプロパティに初期値を設定する例
initCondMap.put("name_ope_0", "IC")
initCondMap.put("name_0", "サンプル")

グリッド初期化スクリプト

グリッド初期化スクリプトは、グリッド生成後にクライアント側で実行する初期化JavaScriptを、Groovyテンプレートで記述します。 Groovyテンプレートはサーバサイドで評価され、その出力結果がクライアント側のグリッド初期化スクリプトとして実行されます。

クライアント側では以下の変数が利用できます。

変数 説明

grid

Slick.Gridインスタンスです。

function(grid, options) { …​ } のような関数宣言は不要です。 関数本体となるJavaScriptコードをそのまま記述してください。 グリッドオプションや機能フラグで設定済みの値を重複して上書きしないように注意してください。

記述例:

// オプションを初期化する場合
grid.setOptions({ autoEdit: true });

// イベントを追加した場合
return {
    onServerDataSet: function(ctx) {
        if (ctx.grid && ctx.grid.headerMenu) {
            ctx.grid.headerMenu.onAfterMenuShow.subscribe((e, args) => {
                console.log('headerMenu');
            });
        }
    }
};
SlickGridの詳細は SlickGrid Universal のリファレンスを参照してください。

4.2. グリッドオプション

SpreadSheetGridOptionsの設定項目は以下となります。

設定項目 設定値

行の高さ

行の高さをピクセル単位で指定します。

デフォルト列幅

列のデフォルト幅を指定します。 列定義で幅が指定されていない列に適用されます。

検索件数上限

初期表示およびフィルタ検索時の取得件数上限を指定します。 未指定の場合はSpreadsheetサービスのデフォルト値(20)を使用します。

列幅自動調整

列幅をグリッド幅に自動的に合わせます。

固定列

固定する列のインデックスを指定します。 -1を指定した場合は固定しません。

固定行

固定する行のインデックスを指定します。 -1を指定した場合は固定しません。

選択モード

グリッドの選択モードを指定します。

cell

セル単位で選択します(デフォルト)。

row

行単位で選択します。

range

セル範囲(ドラッグによる矩形選択)で選択します。

checkbox

行頭のチェックボックスで行を選択します。

選択

単一選択または複数選択を指定します。

single

単一選択です(デフォルト)。

multiple

複数選択です。CtrlキーやShiftキーを併用して複数選択できます。

編集許可

セル値の編集を許可します。

高さ自動調整

行数に合わせてグリッドの高さを自動調整します。

列ヘッダー表示

グリッドの列ヘッダーを表示します。

自動編集開始

セルがアクティブになったとき自動で編集モードを開始します。

セルナビゲーション有効

キーボードやアクティブセルの移動を有効にします。

自動ツールチップ有効

セル内容が省略表示されたとき自動でツールチップを表示します。

セル内テキスト選択有効

セル操作と競合しない範囲でセル内テキストの選択を有効にします。

4.3. 機能フラグ

SpreadSheetFeatureFlagsの設定項目は以下となります。

設定項目 設定値

行追加許可

新しい行の追加を許可します。

行削除許可

行の削除を許可します。

エクスポート許可

データのエクスポートを許可します。

コピー許可

データのコピーを許可します。

貼り付け許可

データの貼り付けを許可します。

ソート許可

列のソートを許可します。

結合許可

セルの結合機能を有効にします。

セル結合静的設定

結合するセル範囲をJSON形式で定義します。
詳細はセル結合設定を参照してください。

セル結合式設定

ルールベースで結合条件をJSON形式で定義します。
詳細はセル結合設定を参照してください。

セル結合設定

結合許可を有効にした場合、セル結合の設定は、 セルレイアウト または Expression(ルールベース) のいずれかで行います。

セルレイアウト(静的設定)

結合するセル範囲を固定値として定義します。 JSON配列形式で、各結合範囲を以下の要素で指定します。

要素 説明

row

結合開始行のインデックス(0開始)を指定します。

col

結合開始列のインデックス(0開始)を指定します。

rowspan

行の結合数を指定します。

colspan

列の結合数を指定します。

displayValue

結合後に表示する値を指定します。 未指定の場合は結合範囲の左上セルの値を表示します。

記述例:

[
  { "row": 0, "col": 0, "rowspan": 2, "colspan": 1 },
  { "row": 0, "col": 1, "rowspan": 1, "colspan": 2, "displayValue": "結合値" }
]
Expression(式設定)

ルールベースで結合条件を定義します。 データの値に応じて動的に結合範囲が決定されます。 JSON配列形式で、各ルールを以下の要素で指定します。

要素 説明

columns

対象列のプロパティ名を配列で指定します。

columnExpression

横方向(列)の結合条件を指定します。

never

適用しません。

always

常に適用します。

sameValue

隣接する値が同一の場合に適用します。

left>right

左の値が右の値より大きい場合に適用します。

left<right

左の値が右の値より小さい場合に適用します。

left>=right

左の値が右の値以上の場合に適用します。

left⇐right

左の値が右の値以下の場合に適用します。

rowExpression

縦方向(行)の結合条件を指定します。 指定できる値はcolumnExpressionと同じです。

resultExpression

結合後に表示する値の算出方法を指定します。

firstCell

結合範囲の左上セルの値を表示します。

concat

結合範囲の値を連結して表示します。

mapping

結合範囲の値を「プロパティ名:値」形式で連結して表示します。

記述例:

[
  {
    "columns": ["department", "division"],
    "columnExpression": "sameValue",
    "rowExpression": "sameValue",
    "resultExpression": "firstCell"
  }
]
同値判定では、空の値同士は結合されません。
多重度表示モードが複数列展開(MULTI_COL)の列は、セル結合の対象外です。

4.4. フィルタ項目

SpreadSheetFilterItemの設定項目は以下となります。

設定項目 設定値

プロパティ名

フィルタ条件の対象となるプロパティ名を指定します。

表示ラベル

フィルタ条件エリアに表示するラベルを指定します。多言語対応が可能です。

多言語設定リスト

表示ラベルの多言語設定を指定します。

必須フラグ

フィルタ条件として必須の場合はtrueを指定します。 必須項目は、条件を入力しないと検索できません。

プロパティエディタ

フィルタ条件の入力で使用するエディタを指定します。 GEM既存のPropertyEditorを使用します。

利用可能な比較演算子

フィルタ条件で選択可能な比較演算子を限定する場合に指定します。 未指定の場合はすべての比較演算子が利用可能です。 指定できる演算子は、利用可能な比較演算子を参照してください。

4.5. 列定義

SpreadSheetColumnDefinitionの設定項目は以下となります。

設定項目 設定値

プロパティ名

列に表示するプロパティ名を指定します。

表示ラベル

列ヘッダーに表示するラベルを指定します。多言語対応が可能です。

多言語設定リスト

表示ラベルの多言語設定を指定します。

列の幅をピクセル単位で指定します。 未指定の場合はグリッドオプションのデフォルト列幅が適用されます。

配置

列内のテキストの配置を指定します。

left

左寄せで表示します(デフォルト)。

center

中央寄せで表示します。

right

右寄せで表示します。

ソート可能

この列でソートを許可するかどうかを指定します。 ソートするには、機能フラグのソート許可も有効である必要があります。

編集可能

この列を編集可能にするかどうかを指定します。 編集するには、グリッドオプションの編集許可も有効である必要があります。

必須

この列に値が必須かどうかを指定します。

多重度

プロパティの多重度を指定します。 1は単一、2以上は複数、0は無制限です。

多重度表示モード

多重度プロパティの表示方法を指定します。
詳細は多重度表示モードを参照してください。

カスタムスタイル

セルに適用するカスタムCSSクラス名を指定します。

エディタ定義

列の編集で使用するエディタの設定を指定します。
詳細はエディタ設定を参照してください。

多重度表示モード

多重度が複数のプロパティをグリッドで表示する場合の表示方法を指定します。

モード 説明

COMMA_SEPARATED(カンマ区切り)

複数値をカンマ区切りで1セルに表示します(デフォルト)。

MULTI_COL(複数列展開)

複数値を多重度分の列に展開して表示します。

複数列展開(MULTI_COL)を指定した列は、セル結合の対象外です。

エディタ設定

列定義のエディタタイプは、対象プロパティの型から自動的に決定されます。 エディタごとの設定項目は以下となります。

spreadsheet def editor
SpreadSheetStringEditor

文字列型のプロパティに適用されるエディタです。

設定項目 設定値

最大長

許容される最大文字数を指定します。

パターン

検証用の正規表現パターンを指定します。

SpreadSheetLongTextEditor

長文型のプロパティに適用されるエディタです。

設定項目 設定値

行数

テキストエリアの行数を指定します。

列数

テキストエリアの列数を指定します。

最大文字数

入力可能な最大文字数を指定します。

SpreadSheetIntegerEditor

整数型のプロパティに適用されるエディタです。

設定項目 設定値

桁区切り表示

数値を桁区切りで表示します。

最小値

入力可能な最小値を指定します。

最大値

入力可能な最大値を指定します。

SpreadSheetFloatEditor

浮動小数点型のプロパティに適用されるエディタです。

設定項目 設定値

最小値

入力可能な最小値を指定します。

最大値

入力可能な最大値を指定します。

小数点以下桁数

表示時の小数点以下の桁数を指定します。 未設定の場合、実際の値の桁数がそのまま表示されます。

桁区切り表示

数値を桁区切りで表示します。

SpreadSheetDecimalEditor

小数型のプロパティに適用されるエディタです。

設定項目 設定値

最小値

入力可能な最小値を指定します。

最大値

入力可能な最大値を指定します。

小数点以下桁数

小数点以下の桁数を指定します。

桁区切り表示

数値を桁区切りで表示します。

SpreadSheetDateEditor

日付型のプロパティに適用されるエディタです。

設定項目 設定値

表示フォーマット

日付の表示フォーマットを指定します。

最小日付

許容される最小日付を指定します。

最大日付

許容される最大日付を指定します。

SpreadSheetDateTimeEditor

日時型のプロパティに適用されるエディタです。

設定項目 設定値

表示フォーマット

日時の表示フォーマット(例:yyyy/MM/dd HH:mm:ss)を指定します。

時間表示範囲

時間の表示範囲を指定します。

SEC

秒まで表示します。

MIN

分まで表示します。

HOUR

時まで表示します。

HIDDEN

時間を表示しません。

分の間隔

分の入力間隔を指定します。

_1MIN

1分間隔です。

_5MIN

5分間隔です。

_10MIN

10分間隔です。

_15MIN

15分間隔です。

_30MIN

30分間隔です。

最小日時

選択可能な最小日時を指定します。

最大日時

選択可能な最大日時を指定します。

SpreadSheetTimeEditor

時刻型のプロパティに適用されるエディタです。

設定項目 設定値

表示フォーマット

時刻の表示フォーマット(例:HH:mm:ss)を指定します。

時間表示範囲

時間の表示範囲を指定します。 指定できる値は日時エディタの時間表示範囲と同じです。

分の間隔

分の入力間隔を指定します。 指定できる値は日時エディタの分の間隔と同じです。

SpreadSheetBooleanEditor

真偽値型のプロパティに適用されるエディタです。

設定項目 設定値

真値ラベル

真値に表示するラベルを指定します。多言語対応が可能です。

真値ラベル多言語設定リスト

真値ラベルの多言語設定を指定します。

偽値ラベル

偽値に表示するラベルを指定します。多言語対応が可能です。

偽値ラベル多言語設定リスト

偽値ラベルの多言語設定を指定します。

SpreadSheetSelectEditor

選択型のプロパティに適用されるエディタです。

設定項目 設定値

選択値

選択肢となる値と表示名のリストを指定します。

選択肢のソート

選択肢をアルファベット順にソートして表示します。

SpreadSheetReferenceEditor

参照型のプロパティに適用されるエディタです。

設定項目 設定値

参照先Entity定義名

参照先のEntity定義名を指定します。

表示方式

参照先の値の選択方式を指定します。

SELECT

プルダウンで選択します。

LINK

検索ダイアログで選択します。

表示ラベルプロパティ

表示ラベルに使用するプロパティ名を指定します。 未指定の場合はnameが使用されます。

フィルタ条件

候補を絞り込むEQL WHERE句条件を指定します。

ソートキー

候補リストのソートに使用するプロパティ名を指定します。

ソート順

候補リストのソート順を指定します。

ASC

昇順にソートします。

DESC

降順にソートします。

ビュー名

検索ダイアログで使用するEntityViewのビュー名を指定します。

選択アクション

検索ダイアログの代わりに使用する選択アクション名を指定します。

詳細表示アクション

詳細表示に使用するアクション名を指定します。

URLパラメータ

詳細表示アクション呼び出し時に追加するURLパラメータを指定します。

SpreadSheetExpressionEditor

式型のプロパティに適用されるエディタです。 式の値はシステムにより自動計算されるため、常に読み取り専用です。

設定項目 設定値

結果型

式の結果型を指定します。 STRING(文字列)、INTEGER(整数)、DECIMAL(小数)、FLOAT(浮動小数点)、DATE(日付)、DATETIME(日時)、BOOLEAN(真偽値)が指定できます。

SpreadSheetAutoNumberEditor

自動採番型のプロパティに適用されるエディタです。 自動採番の値はシステムによって採番されるため、常に読み取り専用です。設定項目はありません。

SpreadSheetBinaryEditor

バイナリ型のプロパティに適用されるエディタです。

設定項目 設定値

アップロード可能

この列のファイルアップロードを許可します。

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

Spreadsheetの保存処理(登録・更新・削除)にカスタム処理を組み込むことができます。 カスタム処理クラスは org.iplass.mtp.view.spreadsheet.SpreadSheetRegistrationInterrupter インターフェースを実装して作成し、基本設定のカスタム登録処理クラス名にUtility Class名を指定します。

SpreadSheetRegistrationInterrupterのメソッド

実装可能なメソッドは以下となります。 すべてのメソッドはdefaultメソッドのため、必要なメソッドのみオーバーライドしてください。

メソッド 説明

dataMapping

各行のEntity構築後、登録処理の前に呼び出されます。 Entityに対して値の加工や追加設定を行うことができます。

isSpecifyAllProperties

更新対象プロパティの決定方法を指定します。 trueの場合、getAdditionalPropertiesの戻り値のプロパティのみを更新対象にします(置き換え)。 false(デフォルト)の場合、自動算出した更新対象プロパティにgetAdditionalPropertiesの戻り値を追加します。

getAdditionalProperties

更新対象に追加するプロパティを取得します。 isSpecifyAllPropertiesの設定により対象範囲が変わります。

beforeRegister

各行のEntity登録(insert/update/delete)の直前に呼び出されます。 戻り値にValidateErrorが含まれる場合、登録処理は中断されます。

afterRegister

各行のEntity登録(insert/update/delete)の直後に呼び出されます。 戻り値にValidateErrorが含まれる場合、トランザクション全体がロールバックされます。

登録処理の種類はRegistrationType(INSERT:新規追加、UPDATE:更新、DELETE:削除)として引数で渡されます。

実装例

カスタム処理の典型的なユースケースを2つの例で示します。

例1:登録時に更新ユーザーを自動的に設定したい

ユースケース:画面から入力させずに、保存処理を実行したユーザーを更新ユーザーとして自動的に設定します。 次の SampleSpreadSheetInterrupter は、dataMapping のタイミングで実行ユーザーのアカウント情報をEntityにセットします。

package your.package;

import java.util.Collections;
import java.util.List;
import java.util.Map;

import org.iplass.mtp.auth.AuthContext;
import org.iplass.mtp.command.RequestContext;
import org.iplass.mtp.entity.Entity;
import org.iplass.mtp.entity.EntityDefinition;
import org.iplass.mtp.entity.ValidateError;
import org.iplass.mtp.view.spreadsheet.SpreadSheetDefinition;
import org.iplass.mtp.view.spreadsheet.SpreadSheetRegistrationInterrupter;
import org.iplass.mtp.view.spreadsheet.SpreadSheetRegistrationInterrupter.RegistrationType;

public class SampleSpreadSheetInterrupter implements SpreadSheetRegistrationInterrupter {

    @Override
    public void dataMapping(Entity entity, RequestContext request,
            EntityDefinition definition, SpreadSheetDefinition spreadSheetDefinition,
            Map<String, Object> row) {
        // 登録用Entityに対する値の加工や追加設定を行います
        entity.setValue("updateUser", AuthContext.getCurrentContext().getUser().getName());
    }

    @Override
    public List<ValidateError> beforeRegister(Entity entity, RequestContext request,
            EntityDefinition definition, SpreadSheetDefinition spreadSheetDefinition,
            RegistrationType registrationType) {
        // 登録前のバリデーションを行います
        // エラーがある場合はValidateErrorを返却し、登録処理を中断します
        return Collections.emptyList();
    }
}
例2:特定の条件に該当する行の登録を拒否したい

ユースケース:価格が未入力の行など、特定の条件に該当する行の登録を拒否し、エラーとして差し戻します。 次の SampleValidationInterrupter は、beforeRegister で価格が未設定の行をチェックします。 戻り値のリストにValidateErrorが含まれる場合、該当行の登録処理は中断されます。

package your.package;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.iplass.mtp.command.RequestContext;
import org.iplass.mtp.entity.Entity;
import org.iplass.mtp.entity.ValidateError;
import org.iplass.mtp.entity.definition.EntityDefinition;
import org.iplass.mtp.view.spreadsheet.SpreadSheetDefinition;
import org.iplass.mtp.view.spreadsheet.SpreadSheetRegistrationInterrupter;
import org.iplass.mtp.view.spreadsheet.SpreadSheetRegistrationInterrupter.RegistrationType;

public class SampleValidationInterrupter implements SpreadSheetRegistrationInterrupter {

    @Override
    public List<ValidateError> beforeRegister(Entity entity, RequestContext request,
            EntityDefinition definition, SpreadSheetDefinition spreadSheetDefinition,
            RegistrationType registrationType) {
        List<ValidateError> errors = new ArrayList<>();
        // 価格が未設定の行は登録を拒否します
        if (entity.getValue("price") == null) {
            ValidateError error = new ValidateError();
            error.setPropertyName("price");
            error.addErrorMessage("価格を入力してください。");
            errors.add(error);
        }
        return errors;
    }

    @Override
    public void dataMapping(Entity entity, RequestContext request,
            EntityDefinition definition, SpreadSheetDefinition spreadSheetDefinition,
            Map<String, Object> row) {
    }
}

作成したクラスはUtility Classとして登録して利用します。