nexacro-xeniの拡張インターフェース

nexacro-xeniはユーザーがExcelファイルのエクスポート/インポート機能を拡張できる拡張インターフェースをサポートします。

本章では拡張インターフェースを用いてExcelファイルのエクスポート/インポート機能を拡張する方法について説明します。

概要

提供される拡張インターフェースの実装を通いて、nexacroから渡されたGridコンポーネントのデータをExcelファイルとして生成する前に、ユーザー定義機能を追加することができます。また、nexacroから渡されたExcelファイルをGridコンポーネントのデータに変換する前に追加作業を処理することができます。

nexacro-xeniの拡張インターフェースを用いて、下記のような追加機能を実装することができます。nexacro-xeniの基本的な実行段階を超えない範囲で追加機能を実現することができます。

各製品によって、利用できる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ファイルのインポートのロジックを含めて自由に拡張することができます。

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ファイルのエクスポートのロジックを含めて自由に拡張することができます。

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ファイルを下記のパスのいずれかの場所に生成します。

3

xeni.propertiesファイルに開発したクラス名をnexacro-xeniの拡張インターフェースとして登録します。

製品名

拡張インターフェース登録

nexacro platform 14

xeni.exportimport.extend={ユーザーパッケージ名}.{ユーザークラス名}

例)xeni.exportimport.extend=com.nexacro.xeni.util.XeniExtendUseFile

nexacro beyond

xeni.exportimport.storage={ユーザーパッケージ名}.{ユーザークラス名}

例)xeni.exportimport.storage=com.extend.userExtendClass