Initial commit
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
= 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);
|
||||
}
|
||||
-- 생략 --
|
||||
----
|
||||
Reference in New Issue
Block a user