커스터마이즈

아래는 커스터마이즈 할 수 있는 목록에 대한 설명 및 예시이다.

BXM Web Admin의 서버단은 BXM으로 개발된 프로젝트이기 때문에, BXM의 기본 흐름(Service > Bean > DBIO)을 따라서 개발한다.

1. 메뉴 추가

  • 기본 메뉴 구성은 BXM_USER_MENU 테이블에 있는 데이터로 만들어지며, BXM_USER_ROLE_N_MENU 테이블에서 역할과 메뉴를 매칭시켜야 한다.

  • 소메뉴의 상위 메뉴(이하 대메뉴라 한다.)가 존재하는 경우에는 반드시 대메뉴도 함께 추가해야 하며, 사용할 메뉴는 'USE_YN' 필드를 반드시 'Y’로 지정한다.

  • MENU00100의 숫자 중 처음 세 자리는 대메뉴의 분류를 나타낸다.

  • MENU00100의 숫자 중 마지막 두 자리는 대메뉴 속 소메뉴들의 분류를 나타낸다.

[예시] 아래와 같이 BXM_USER_MENU 테이블에 메뉴를 추가한다고 가정한다.

Insert into BXM_USER_MENU (MENU_ID,MENU_NM,MENU_DESC,USE_YN,PARENT_MENU_ID,MENU_TYPE_CD,MENU_SEQ) values ('MENU00100','테스트 관리','테스트 관리','Y',null,'0',100);
Insert into BXM_USER_MENU (MENU_ID,MENU_NM,MENU_DESC,USE_YN,PARENT_MENU_ID,MENU_TYPE_CD,MENU_SEQ) values ('MENU00101','테스트 조회','테스트 조회','Y','MENU00100','1',101);
Insert into BXM_USER_MENU (MENU_ID,MENU_NM,MENU_DESC,USE_YN,PARENT_MENU_ID,MENU_TYPE_CD,MENU_SEQ) values ('MENU00102','테스트 현황','테스트 현황','Y','MENU00100','1',102);

메뉴는 역할에 따라 보여지는 목록이 달라지는데, 이를 설정하는 데이터는 BXM_USER_ROLE_N_MENU 테이블에 존재한다. 만약 역할ID가 'R0001’인 사용자가 'MENU00100', 'MENU00101’을 사용할 수 있게 설정하려면 아래와 같이 추가하면 된다.

Insert into BXM_USER_ROLE_N_MENU (ROLE_ID,MENU_ID) values ('R00001','MENU00100');
Insert into BXM_USER_ROLE_N_MENU (ROLE_ID,MENU_ID) values ('R00001','MENU00101');

메뉴 정보를 추가한 뒤 화면 커스터마이즈는 BXM Web Admin UI 커스터마이즈 가이드를 참조한다.

2. 메인 옵션 추가

  • 메인 옵션을 사용해 UI 커스터마이징에 활용할 수 있다.

  • 개발자가 필요한 옵션을 임의로 추가할 수 있으며, 옵션 목록은 Key와 Value를 값으로 가지는 OMM(Object)의 리스트 형태로 저장 된다.

  • MainBean의 getMain에서 추가 설정할 수 있다.

추가 방법

  1. ExtraOptionOMM의 객체를 생성한다.

  2. ExtraOptionOMM의 객체에 key와 value값을 설정한다.

  3. output.getExtraOption() 리스트에 객체를 추가한다.

ExtraOptionOMM option = new ExtraOptionOMM();

    ...

    option = new ExtraOptionOMM();
    option.setKey("BatchTypeField");
    if(!Boolean.getBoolean(BxmConfig.BATCH_TYPE_CLASSIFICATION)) {
            option.setValue("hide");
    } else {
            option.setValue("show");
    }
    output.getExtraOption().add(option);

    option = new ExtraOptionOMM();
    option.setKey(<<옵션key값>>);
    if(Boolean.getBoolean(BxmConfig.SCHEDULER_USE_YN)) {
            option.setValue(<<옵션value값>>);
    } else {
            option.setValue(<<옵션value값>>);
    }
    output.getExtraOption().add(option);

    ...

3. 공통메시지 자동채번 추가

  • 자동 채번은 ICommonMessageUtil 인터페이스를 구현해서 사용할 수 있다. 기본적인 메시지 자동채번은 bxm.web.admin.common.inf.concrete.CommonMessageBeanUtil에 구현되어 있다.

추가 방법

  1. ICommonMessageUtil 인터페이스를 구현하는 구상 클래스를 기존의 코드를 참고해 생성한다.

  2. bxm-management-instance.xml 파일의 시스템 프로퍼티에 common.message.id.generator=[커스터마이즈한 구상 클래스 명]을 추가한다.

//인터페이스
public interface ICommonMessageUtil {
    public void generateMsgId(CommonMessageOMM input) throws ApplicationException;
}
//구상 클래스(Defualt)
public class CommonMessageBeanUtil implements ICommonMessageUtil {
    final Logger logger = LoggerFactory.getLogger(this.getClass());

    private CommonMessageDBIO commonMessageDBIO;

    /**
    * Common Message 추가할 때 자동채번을 사용할 시 필요한 유틸
    */
    @Override
    public void generateMsgId(CommonMessageOMM input) throws ApplicationException {

    if(commonMessageDBIO == null){
    commonMessageDBIO = LApplicationContext.getBean(CommonMessageDBIO.class);
    }

    ThreadSafeDecimalFormat msgSrNoFormat = new ThreadSafeDecimalFormat(AdminConstant.AUTO_00000);

    StringBuilder builder = new StringBuilder();

    if(StringUtils.isEmpty(input.getMsgId())) {
    String lastMsgId = commonMessageDBIO.selectAutoNumbering(input);

    ...
bxm-management-instance.xml
Figure 1. bxm-management-instance.xml*

4. 이미지 로그 파싱

-이미지 로그 상세 팝업에서 전문 유형이 FLD, XML, JSON일 때 시스템 헤더부와 데이터부는 특정 클래스의 정보를 가지고 파싱한 후 그리드에 출력된다.

이미지 로그 상세 팝업
Figure 2. 이미지 로그 상세 팝업

-기본적인 옵션은 bxm-management-instance.xml의 system-properties인 admin.image.log.system.header=bxm.dft.context.DefaultSystemHeader를 따른다.

설정 방법

  1. 시스템 헤더를 커스터마이징한 경우 system-properties의 admin.image.log.system.header값을 커스터마이징한 클래스 명으로 바꿔야 한다.

5. 재실행 입력 전문 생성

-거래 재실행은 입력 전문의 GUID만 재생성해서 똑같은 입력 전문으로 거래를 실행시키는 기능이다. 온라인 로그 조회 메뉴의 이미지 로그 상세 팝업에서 실행시킬 수 있다.

-온라인 거래의 헤더를 커스터마이징했으면, IInputRegenerator를 구현하는 구상 클래스를 반드시 커스터마이징해야 한다.

-거래 재실행은 전문 유형이 JSON, XML, FLD일 때만 가능하다.

이미지 로그 상세 팝업
Figure 3. 이미지 로그 상세 팝업
  • 기본적인 입력 전문 재생성은 bxm.web.admin.common.inf.concrete.DefaultInputRegenerator에 구현되어 있다. bxm-management-instance.xml의 시스템 프로퍼티에 별다른 옵션이 없을 경우 DefaultInputRegenerator를 사용한다.

추가 방법

  1. IInputRegenerator 인터페이스를 구현하는 구상 클래스를 기존의 코드를 참고해 생성한다.

  2. bxm-management-instance.xml 파일의 시스템 프로퍼티에 admin.online.input.regenerator=[커스터마이즈한 구상 클래스 명]을 추가한다.

//인터페이스
public interface IInputRegenerator {
    public String reproduceInputData(ExecuteTranInOMM input, StringBuilder newGuid);
}
//구상 클래스(Defualt)
public class DefaultInputRegenerator implements IInputRegenerator{
    private Logger logger = LoggerFactory.getLogger(DefaultInputRegenerator.class);

    @Override
    public String reproduceInputData(ExecuteTranInOMM input, StringBuilder newGuid) {

        //Generate Guid
        String guid = DefaultGuidGenerator.generateInitialGuid();
        newGuid.append(guid);
        String oldMessage = input.getMsgData();
        String newMessage = null;

        logger.debug("New GUID : [{}]", guid);

        switch (input.getMsgType()) {

        case AdminConstant.MSG_FLD:
            StringBuilder fldBuilder = new StringBuilder(oldMessage);
            fldBuilder.replace(8, 40, guid);
            newMessage = fldBuilder.toString();
            break;

        case AdminConstant.MSG_JSON:
            newMessage =remakeJsonInputData(guid, oldMessage);
            break;

        case AdminConstant.MSG_XML:
            newMessage =remakeXmlInputData(guid, oldMessage);
            break;
        default:
            logger.info("Not Supported except for FLD, JSON, XML message type.");
            ...

Copyright© Bankwareglobal All Rights Reserved.