nexacro-xeniはユーザーがExcelファイルのエクスポート/インポート機能を拡張できる拡張インターフェースをサポートします。
本章では拡張インターフェースを用いてExcelファイルのエクスポート/インポート機能を拡張する方法について説明します。
概要
提供される拡張インターフェースの実装を通いて、nexacroから渡されたGridコンポーネントのデータをExcelファイルとして生成する前に、ユーザー定義機能を追加することができます。また、nexacroから渡されたExcelファイルをGridコンポーネントのデータに変換する前に追加作業を処理することができます。
nexacro-xeniの拡張インターフェースを用いて、下記のような追加機能を実装することができます。nexacro-xeniの基本的な実行段階を超えない範囲で追加機能を実現することができます。
DRMが適用されたExcelファイルに対して、DRMを解除する
生成されたExcelファイルにDRMを適用する
ExcelファイルのデータをDBに保存し、DBからデータを読み込む機能(ファイルシステムを使用しない)
その他、追加的なユーザー定義ロジック
各製品によって、利用できるnexacro-xeniの拡張インターフェースは下記の通りです。
製品名 | nexacro-xeniの拡張インターフェース |
---|---|
nexacro platform 14 | XeniExtendBase |
nexacro beyond | XeniExcelDataStorageBase |
nexacro-xeniの拡張インターフェースでは下記のメソッドを提供します。
Type | Method |
---|---|
InputStream | loadTargetStream |
String | saveImportStream |
int | saveExportStream |
Dataset | saveExportStream |
該当のメソッドは、拡張インターフェースを継承して実装します。実装したインターフェースを使用するためにはユーザーが実装したクラスを該当のpropertiesファイルに登録する必要があります。
ExcelファイルをPlatformDataに変換したり、PlatformDataをExcelファイルに変換する機能はnexacro-xeni内部に実装されていて、ユーザーが該当の機能を変更することは許可されていません。
メソッド
(InputStream) loadTargetStream
public InputStream loadTargetStream(String filepath)
エクスポート/インポート機能を処理するために保存されたExcelファイルをStreamに変換するインターフェースです。
- DRM機能を適用している場合
インポート時にnexacroから渡された一時ファイルとして保存されたExcelファイルのDRMを解除し、Streamに変換するように実装します。また、DRMが適用されているExcelファイルにエクスポートしたデータを追加する場合にも使用することができます。(複数のGridコンポーネントをまとめてエクスポートする場合)
以下はDRMが適用されていないExcelファイルを読み込むサンプルコードです。
public InputStream loadTargetStream(String filepath) throws Exception { File file = new File(filepath); return new FileInputStream(file); }
(String) saveImportStream
public String saveImportStream(VariableList varlist, InputStream in, String filepath)
インポート時にnexacroから渡されたExcelファイル(InputStream)を制定したディレクトリ(filepath)もしくはDBに保存し、filepathもしくはDBのKey値を返すメソッドです。
- DRMが適用されているExcelファイルの場合
DRMを解除してから保存するように実装したり、DRMが適用されている状態で保存した後に loadTargetStreamでDRMを解除することもできます。
インターフェースの実装は下記の基本的なExcelファイルのインポートのロジックを含めて自由に拡張することができます。
指定されたディレクトリ(filepath)が存在しない場合は生成する
指定されたディレクトリ(filepath)FileOutputStreamファイルを生成する
渡されたExcel(InputStream in)を読み込み、FileOutputStreamに保存する
FileOutputStreamを閉じる
public String saveImportStream(VariableList varlist, InputStream in, String filepath) throws Exception { int nIdx = filepath.lastIndexOf("/"); String sPath = filepath.substring(0, nIdx); File file = new File(sPath); if (file.exists() == false) { file.mkdirs(); } // write input stream to file OutputStream out = new FileOutputStream(filepath); byte[] buf = new byte[1024]; int length = 0; while ((length = in.read(buf)) > 0) { out.write(buf, 0, length); } out.flush(); out.close(); in.close(); return null; }
(int) saveExportStream
public int saveExportStream(VariableList varlist, DataSet dscmd, ByteArrayOutputStream out, String filepath, String fileurl, HttpServletResponse response)
ExcelのStreamに変換されたGridコンポーネントのデータをExcelファイルとして保存し、該当のファイルをダウンロードできるURLを含めてエクスポートの結果をnexacroに渡すインターフェースです。
生成されるExcelファイルにDRMを適用することができます。
下記の基本的なExcelファイルのエクスポートのロジックを含めて自由に拡張することができます。
パラメータとして渡されたfilepath(Excelファイル名)のディレクトリが存在しない場合は生成する
生成されたExcelファイルに、パラメータとして渡されExcelに変換された Stream(ByteArrayOutputStream out)を保存する
nexacroにダウンロードURLおよびファイル名を含むPlatformDataを渡す
生成されたExcelファイルは環境設定により自動削除される
public int saveExportStream(VariableList varlist, DataSet dscmd, ByteArrayOutputStream out, String filepath, String fileurl, HttpServletResponse response) throws Exception { int nIdx = filepath.lastIndexOf("/"); String sPath = filepath.substring(0, nIdx); File file = new File(sPath); if (file.exists() == false) { file.mkdirs(); } FileOutputStream fout = new FileOutputStream(filepath); fout.write(out.toByteArray()); fout.close(); out.close(); DataSet dsRes = CommUtil.getDatasetExportResponse(dscmd); PlatformData resData = new PlatformData(); VariableList varList = resData.getVariableList(); varList.add("ErrorCode", 0); varList.add("ErrorMsg", "SUCCESS"); dsRes.set(0, "url", fileurl); resData.addDataSet(dsRes); HttpPlatformResponse platformRes = new HttpPlatformResponse(response, PlatformType.CONTENT_TYPE_SSV, "UTF-8"); platformRes.setData(resData); platformRes.sendData(); return 0; }
(Dataset) saveExportStream
public Dataset saveExportStream(VariableList varlist, DataSet dscmd, ByteArrayOutputStream out, String filepath, String fileurl)
内容の実装が不要なメソッドです。空のメソッドとして宣言します。
利用のための設定
1
拡張インターフェースを実装した後、クラスファイルを下記のパスにコピーします。
拡張されたクラス名は変更することができます。
nexacro-xeni > WEB-INF > classes
2
開発したクラスを利用するためには、xeni.propertiesファイルを下記のパスのいずれかの場所に生成します。
nexacro-xeni > WEB-INF > classes
nexacro-xeni > WEB-INF > lib
CLASSPATHに定義されたパス
3
xeni.propertiesファイルに開発したクラス名をnexacro-xeniの拡張インターフェースとして登録します。
製品名 | 拡張インターフェース登録 |
---|---|
nexacro platform 14 | xeni.exportimport.extend={ユーザーパッケージ名}.{ユーザークラス名} 例) |
nexacro beyond | xeni.exportimport.storage={ユーザーパッケージ名}.{ユーザークラス名} 例) |