= Knox 결재 상태 동기화 == 결재 Batch 설정 Knox 결재 문서는 10분마다 배치가 실행되어 동기화 되고 있다. * config.properties : 동기화 배치 실행 주기 설정 [source,properties] ---- ## Knox Approval Sync knox.approval.sync.cron=0 0/10 * * * ? ---- * QuartzConfig.java: Scheduler 등록 * KnoxSyncBatchConfig.java: 배치 Job, Trigger 등록 * KnoxSyncBatchExecutor.java: 서비스 호출 == 결재 동기화 로직 배치에서 실행되는 동기화 로직을 구현한 서비스는 knoxApprovalSyncServiceImpl.java 파일의 synchronizeKnox() 메소드 이며 동기화 로직은 간략하게 아래와 같다. . SDL 결재 테이블에서 결재 진행중인 문서 목록 대상 조회. . 대상 목록의 결재ID로 Knox REST를 조회하여 Revision이 변경되었는지 확인. . Revision 변경된 대상에 대해서 결재 정보 동기화 처리. . 동기화 완료 후 결재 후처리 진행. 결재 동기화 시 오류가 발생한 결재 문건은 결재정보 테이블(TN_CF_APPROVAL)에 결재 동기화 상태값(APPROVAL_FAULT)이 false로 Update되며 다음 배치 실행시 대상으로 선정되지 않는다. + 이런 경우 이벤트 로그 테이블(TN_CF_APPROVAL_EVENT)의 로그를 확인하여 다시 동기화 해야 한다면 결재 관리 상세화면에서 개별 동기화가 가능하다. image::approvalSync_01.png[] == 결재 전후처리 결재 동기화 처리전 또는 처리후 결재 문서 상태에 대한 비지니스를 처리할 수 있도록 인터페이스를 제공하고 있다. ApprovalInterceptor 를 결재 문서별로 상속 받는 구현 클래스를 만들면 된다. * 구현 예시(KnoxApprovalSampleInterceptor.java) [source,java] ---- @Log4j2 @ApprovalDocumentType(names = {"knoxSample"}) public class KnoxApprovalSampleInterceptor implements ApprovalInterceptor { @Autowired KnoxApprovalSampleService knoxApprovalSampleService; @Override public void afterSubmit(Approval approval, List approvalStepList, Map attribute) { log.debug("execute ApprovalSampleInterceptor afterSubmit"); //Knox 상신 후 문서 상태 업데이트 knoxApprovalSampleService.updateSampleApprovalDocument(approval.getDbDocId(), ApprovalDocStatus.INPROCESS); } -- 생략 -- ----