nexacro-xeni는 사용자가 Excel 파일 Export/Import 기능을 확장할 수 있게 확장 인터페이스를 지원합니다.
이번 장에서는 확장 인터페이스를 사용해 Excel 파일 Export/Import 기능을 확장하는 방법을 설명합니다.
개요
제공된 확장 인터페이스 구현을 통해 넥사크로플랫폼에서 전달받은 Grid 컴포넌트 데이터를 Excel 파일로 생성하기 전에 사용자 정의 기능을 추가할 수 있습니다. 또한, 넥사크로플랫폼에서 전달받은 Excel 파일을 Grid 컴포넌트 데이터로 변환하기 전에 추가적인 작업을 처리할 수 있습니다.
nexacro-xeni 확장 인터페이스를 이용해 아래와 같은 추가 기능을 구현할 수 있습니다. nexacro-xeni의 기본 실행 단계를 벗어나지 않는 범위에서 원하는 기능을 구현할 수 있습니다.
DRM이 적용된 Excel 파일의 DRM 해제
생성된 Excel 파일에 DRM 적용
Excel 파일을 데이터베이스에 저장하고 데이터베이스에서 읽어오는 기능 (파일 시스템 사용하지 않음)
기타 추가적인 사용자 로직
제품 버전에 따라 사용할 수 있는 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 로직을 포함하여 자유롭게 확장할 수 있습니다.
지정된 디렉터리(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 스트림으로 변환된 Grid 컴포넌트 데이터를 Excel 파일로 저장하고 해당 파일을 다운로드할 수 있는 URL을 포함한 Export 결과를 넥사크로플랫폼으로 전달하는 인터페이스입니다.
생성되는 Excel 파일에 DRM을 적용할 수 있습니다.
아래의 기본적인 Excel Export 로직을 포함하여 자유롭게 확장할 수 있습니다.
파라미터로 전달된 filepath(Excel 파일명)의 디렉터리가 없으면 생성
생성된 Excel 파일에 파라미터로 전달받은 Excel로 변환된 Stream(ByteArrayOutputStream out)을 저장
넥사크로플랫폼으로 다운로드 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의 확장 인터페이스로 등록합니다.
제품 버전 | 확장 인터페이스 등록 |
---|---|
넥사크로플랫폼 14 | xeni.exportimport.extend={사용자패키지명}.{사용자클래스명} 예) |
넥사크로플랫폼 17.1, N | xeni.exportimport.storage={사용자패키지명}.{사용자클래스명} 예) |