nexacro-xeni 확장 인터페이스

nexacro-xeni는 사용자가 Excel 파일 Export/Import 기능을 확장할 수 있게 확장 인터페이스를 지원합니다.

이번 장에서는 확장 인터페이스를 사용해 Excel 파일 Export/Import 기능을 확장하는 방법을 설명합니다.

개요

제공된 확장 인터페이스 구현을 통해 넥사크로플랫폼에서 전달받은 Grid 컴포넌트 데이터를 Excel 파일로 생성하기 전에 사용자 정의 기능을 추가할 수 있습니다. 또한, 넥사크로플랫폼에서 전달받은 Excel 파일을 Grid 컴포넌트 데이터로 변환하기 전에 추가적인 작업을 처리할 수 있습니다.

nexacro-xeni 확장 인터페이스를 이용해 아래와 같은 추가 기능을 구현할 수 있습니다. nexacro-xeni의 기본 실행 단계를 벗어나지 않는 범위에서 원하는 기능을 구현할 수 있습니다.

제품 버전에 따라 사용할 수 있는 nexacro-xeni 확장 인터페이스는 아래와 같습니다.

제품 버전

nexacro-xeni 확장 인터페이스

넥사크로플랫폼 14

XeniExtendBase

넥사크로플랫폼 17.1, N

XeniExcelDataStorageBase

nexacro-xeni 확장 인터페이스는 다음의 메소드를 제공합니다.

Type

Method

InputStream

loadTargetStream

String

saveImportStream

int

saveExportStream

Dataset

saveExportStream

해당 메소드는 확장 인터페이스를 상속받아서 구현할 수 있습니다. 구현된 인터페이스를 사용하기 위해서는 사용자가 구현한 Class를 해당 properties 파일에 등록하여 사용합니다.

Excel 파일을 PlatformData로 변환하거나 PlatformData을 Excel 파일로 변환하는 기능은 nexacro-xeni 내부에서 구현되어 있으며 사용자가 해당 기능을 변경하는 것은 허용되지 않습니다.

메소드

(InputStream) loadTargetStream

public InputStream loadTargetStream(String filepath)

Export/Import 기능을 처리하기 위해 저장된 Excel 파일을 스트림으로 반환하는 인터페이스입니다.

DRM 기능을 적용했을 경우

Import 시 넥사크로플랫폼에서 전달받아 임시로 저장된 Excel 파일의 DRM을 해제하고 스트림으로 반환하도록 구현합니다. 또는 DRM이 적용된 Excel 파일에 Export를 추가하는 경우에도 사용됩니다(여러 Grid 컴포넌트를 한 번에 Export 하는 경우).

아래는 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)

Import 시 넥사크로플랫폼에서 전달받은 Excel 파일(InputStream)을 지정된 디렉터리(filepath)나 데이터베이스에 저장하고 filepath나 데이터베이스의 Key값을 반환하는 인터페이스입니다.

DRM이 적용된 Excel 파일인 경우

DRM 해제 후 저장하도록 구현하거나 DRM이 적용된 상태로 저장 후 loadTargetStream에서 DRM을 해제할 수 있습니다.

인터페이스의 구현은 아래의 기본적인 Excel Import 로직을 포함하여 자유롭게 확장할 수 있습니다.

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 스트림으로 변환된 Grid 컴포넌트 데이터를 Excel 파일로 저장하고 해당 파일을 다운로드할 수 있는 URL을 포함한 Export 결과를 넥사크로플랫폼으로 전달하는 인터페이스입니다.

생성되는 Excel 파일에 DRM을 적용할 수 있습니다.

아래의 기본적인 Excel Export 로직을 포함하여 자유롭게 확장할 수 있습니다.

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의 확장 인터페이스로 등록합니다.

제품 버전

확장 인터페이스 등록

넥사크로플랫폼 14

xeni.exportimport.extend={사용자패키지명}.{사용자클래스명}

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

넥사크로플랫폼 17.1, N

xeni.exportimport.storage={사용자패키지명}.{사용자클래스명}

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