57 lines
2.4 KiB
Plaintext
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);
|
|
}
|
|
-- 생략 --
|
|
---- |