GXS Korea 문의 결과 해당 기능과 관련한 공식 가이드/메뉴얼 문서는 없는 상황.

BizManager Library 디컴파일 해보면 참고가 될만한 샘플을 볼수가 있어서 해당 내용을 기반으로 첨부와 같이 가이드 문서를 작성


1. 기능 설명

- Parties -> Processing Rule -> Action 에 해당 하는 기능임

- Provides the capability to configure the system to invoke a Java class.



2. 설정 세부 항목 설명

   1) Name 

       -  실행될 Processing Rule Action 명칭 정의


   2) Java Class 

       - 실행할 Java Class에 대한 Class Qualified Name

       - Class 생성과 관련한 현재까지 공개된 내용(현재 BizManager측의 해당 Class 생성관련한 공식 가이드 없음)


       (1) 주요 Interface or Class            - com.ipnetsolutions.msgsrv.script.ScrBean 

              => 생성할 Class에서는 이 Interface를 Implement 해야만 함

            - com.ipnetsolutions.msgsrv.script.ScrResults

              => 생성한 Class내에서의 처리결과를 저장하는데 사용되는 클래스

            - com.ipnetsolutions.msgsrv.script.ScrBean.Context

              => 생성하는 Class내에서 BizManager 프로세싱 단계에 저장된 각 Object에 접근할수 있는 통로


       (2) 생성 Class의 적용위치

            - BizManager의 ClassPath상에 위치하면 될것으로 추정됨

            - 현재 C:\BizConnect\Application\app3.3.0\lib\common 경로에 생성한 클래스를 위치히야 정상동작

              하는것으로 확인됨

            - 생성 Class 적용시 서버 재기동 과정이 필요함


       (3) 샘플 소스

            - 첨부의 샘플소스 확인


package kr.co.inspien.bizmanager;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import com.ipnetsolutions.config.itf.Configurator;
import com.ipnetsolutions.logger.Logger;
import com.ipnetsolutions.msgsrv.script.ScrBean;
import com.ipnetsolutions.msgsrv.script.ScrResults;

public class SampleJavaAction implements ScrBean{

	@Override
	public ScrResults run(Context context) throws Exception {
		// TODO Auto-generated method stub
		
		Logger oLog = context.getLog();
				
		//Action Script 실행 결과 객체 생성
		ScrResults oResult = new ScrResults(oLog);
		
		//Context 객체에서 Parameter String 추출
		String sParam = context.getParam();
		
		//Context 객체에서 현재 처리중인 데이터 파일명 추출하기 
		Input oInput = context.getInput();
		String outFnm = oInput.logicalFilename;
		
		//Context 객체에서 현재 처리중인 데이터 추출하기
		InputStream is = oInput.getInputStream();
		String sProcData = convertStreamToString(is);
		
		
		//Context 객체에서 Output 출력하기
		String sOutFile = "TRANS_JAVA_OUTPUT";
		FileWriter wtr = new FileWriter(sOutFile);
		StringBuffer sb = new StringBuffer();
		sb.append("");
		sb.append("");	
		sb.append("");
		sb.append("YUMI_DUNS");
		sb.append("lswDUNS");
		sb.append("YUMI_XML_DOC");
		sb.append("123123");
		sb.append("");
		sb.append("");
		sb.append("");
		sb.append("444");
		sb.append("10");
		sb.append("Test");
		sb.append("");
		sb.append("");
		sb.append("");
		
        wtr.write(sb.toString());
        wtr.close();
        
      //Context 객체에서 Output 출력하기
        oResult.addOutput(sOutFile);
	
		//Configuration 정보
		Configurator cf = context.getConfigurator();
		String sCF = null;
		if(cf != null){
			sCF = cf.getDatabaseConnectionName();
		}

		//==> Test Output File 
		FileWriter fstream = new FileWriter("C:/temp/BizManagerTestOutput_0724.txt");
		BufferedWriter out = new BufferedWriter(fstream);
		out.write("Logger Level="+oLog.getLevel()+"\r\n");
		out.write("Logger Name="+oLog.getName()+"\r\n");
		out.write("Parameter String = "+sParam+"\r\n");
		out.write("logicalFileName = "+outFnm+"\r\n");
		out.write("Configuration DB Connection Name="+sCF+"\r\n");
		out.write("============================== Contents Start =============================\r\n");
		out.write(sProcData);
		out.write("============================== Contents End =============================\r\n");
		out.close();
		
		if(sParam.equals("ERROR")){
			oResult.addError("Custom Error Message");    //처리결과 에러상태로 지정
		}else if(sParam.equals("WARNING")){
			oResult.addWarning("Custom Warning Message");
                        //처리결과는 Success이나 지정한 메시지가  Operation 모니터링내에 Error Message 항목에 출력됨
		}
		
		
		return oResult;
	}
	
	public String convertStreamToString(InputStream is) throws IOException {
		
		if (is != null) {
            StringBuilder sb = new StringBuilder();
            String line;

            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                while ((line = reader.readLine()) != null) {
                    sb.append(line).append("\n");
                }
            } finally {
                is.close();
            }
            return sb.toString();
        } else {      
            return "";
        }
	}
	

}

    3) System ID

       - 서버 이중화 구성의 경우 해당 Class가 실행될 특정 서버를 지정할 수 있음


   4) Parameter String

       - 생성한 Java Class 내부로 전달할 Parmeter String 지정

       - //Context 객체에서 Parameter String 추출 String sParam = context.getParam();


   5) Stop Default Transmission

       - Java Class 호출후 수신자(Receipt)의 Default Trandport를 실행할지 여부임 

       - 하나의 Processing Rule에 등록된 Acition 모두 동일하게 셋팅해야 적용된다         

          예) 모두 해당 옵션을 선택해제해야 각 Action의 처리상태와 상관없이 수신지 Default Transport 수행함 


   6) Cascade Multiple Actions

       - 현재 등록하는 Action의 처리상태에 따라 후속 Action을 실행여부 결정 

       - 해당 옵션선택시 현재 단계의 Action이 실패할경우 후속 Action이 실행되지 않음 


   7) Schedule

       - immediately : 즉시 실행

       - 그외 스케쥴 지정시 지정된 시간만큼의 Delay를 가진후 실행되는 모습을 취함

         ※ 특정시간 실행 지정가능


3. 해당 기능 활용 방안

    - 각 Processing Rule에서 지정한 Document 처리시 BizManager에서 제공하지 않는 기능들에 대해서

      Custom Java 소스를 활용하여 극복이 가능 할것으로 보임


    - Java Class의 처리상태가 Error인경우 Operation 메뉴에서 Retry 처리도 가능함


    - Java Class에서 문서의 변환 및 외부 작업 수행후 후속 프로세스로의 연계도 가능함     

      예) 아래와 같이  ACT_JAVACALL2 단계에서 문서를 변환하고 이후 후속 프로세스가 진행됨

Schedule 지정시 Operation 옵션에서 아래와 같이 Delay 처리되는 상황을 확인할수 있다. 




Posted by INSPIEN
,