11.nexacro-xeni 확장 인터페이스

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

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

11.1개요

제공된 확장 인터페이스 구현을 통해 넥사크로플랫폼에서 전달받은 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 내부에서 구현되어 있으며 사용자가 해당 기능을 변경하는 것은 허용되지 않습니다.

11.2메소드

11.2.1(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);
}

11.2.2(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;
}

11.2.3(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;
}

11.2.4(Dataset) saveExportStream

public Dataset saveExportStream(VariableList varlist,
    DataSet dscmd,
    ByteArrayOutputStream out, 
    String filepath, 
    String fileurl)

구현이 필요하지 않은 메소드 입니다. 빈 메소드로 선언 합니다.

11.3사용 설정

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={사용자패키지명}.{사용자클래스명}

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

넥사크로플랫폼 17.1, N

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

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