1. 원래 Axboot의 처리방식

  : 신규 행추가 후 기존의 키값과 동일한 키값을 입력 후 저장시 원래있던 데이터를 행추가시 입력한 데이터로 

    업데이트 해버린다.

   ==> 실제 업무화면에서는 사고가 발생할 여지가 있는 부분임.

          실수로 기존의 키값과 동일한 값을 추가하여 나머지 데이터는 다른값을 입력하고 저장했을 경우

          의도치 않게 기존에 있던 데이터가 업데이트되어 사고가 발생할 수 있다.

          보통은 신규로 행추가 했을 경우 기존값과 중복된 키값을 입력했을 경우 에러를 벹어내도록 구현된다.

   1) 기존 처리방식의 예시화면

      - 기존데이터 상태


  - 기존에 있는 데이터와 중복되는 제품코드가 11 인 데이터를 추가함(제품명,원산지,매입가격,판매가격은 다르게 입력)

    (데이터가 많으면 인지하지 못할 수 있음)


  - 저장시 기존의 데이터가 있다는 경고 없이 그냥 저장됨.


2. 중복체크로직 추가

  1) javascript에서 로직 추가

     - 조회 후 조회값인지 화면에서 행추가한 값인지 상태값 체크할 수 있는 "__searched__" key를 조회결과 처리부분의

      json 에 추가해준다. 

      ==>이유 : 신규로 행추가 후 중복값 입력 후 저장했을 경우 에러메시지가 발생해서 중복값을 삭제 후 

                    저장했을 경우 화면에서는 없어졌지만 계속 값이 deletedList라는 json key에 "__create__" key로 저장되어있어

                    계속 중복된다는 메시지가 리턴됨. 그래서 화면에서만 추가/삭제된 것은 deletedList에서 없애주기 위해서는

                    기존에 조회된 값인지의 여부를 판단할 필요가 있어 "__searched__" flag가 필요함.

    - 저장(PAGE_SAVE) 시 에러가 발생할 경우 메시지처리하는 부분을 추가함.

    - Grid의 delRow 부분에 행삭제시 기존에 조회된 값이 아닌 경우 불필요하게 데이터가 서버로 날라가는것을

       방지하기 위해 deletedList에서 "__searched__" key가 없는(undefined) 것은 삭제하는 로직 추가


  2) Controller 에서 로직 추가

    - Exception을 받아 화면으로 넘기는 처리한다.

      ==> axboot에 있는 class를 활용한다. 

   : ApiException 으로 받아 com.chequer.axboot.core.controllers.BaseController.handleApiException을 화면으로 넘긴다.


  3) ProductService 에서 로직 추가

    - 신규추가된 데이터에 대해 기존에 있는데이터인지 체크해서 중복 시 ApiException으로 메시지를 리턴한다.


   

다음 글에 중복등록체크로직 추가 -2 에서 실제 구현되는 방식을 보시겠습니다.


어때요? 도움이 많이 되셨나요? ~~~~~~~

+ Recent posts