Files
sdl_base/doc/공통기능/결재메일/Knox결재상태동기화.adoc
T
2026-05-29 17:49:25 +09:00

57 lines
2.4 KiB
Plaintext

= 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<ApprovalStep> approvalStepList, Map<String, Object> attribute) {
log.debug("execute ApprovalSampleInterceptor afterSubmit");
//Knox 상신 후 문서 상태 업데이트
knoxApprovalSampleService.updateSampleApprovalDocument(approval.getDbDocId(), ApprovalDocStatus.INPROCESS);
}
-- 생략 --
----