= Knox 상신

== 결재 Entity Class 생성 및 설정

결재 기능을 구현해야 하는 업무의 Entity Class를 생성하고 Annotation을 설정하고 기본 결재 Class를 상속 받는다.

[source,java]
----
@Data
@EqualsAndHashCode(callSuper = true)
@ApprovalDocument(docType = "knoxSample", description = "Sample Approval Doc. (Knox)", approvalClass = Approval.class, templateEngine = TemplateEngineType.VELOCITY,
        templateFile = "/templates/approval/approval-sample.vm", docSecuType = ApprovalDocSecuType.PERSONAL,
        isArbitrary = true, bodyType = ApprovalBodyType.MIME)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class KnoxApprovalSampleDocument extends DefaultApprovalDocument {

	private static final long serialVersionUID = 1L;

    private String docId;
    private String contents;
    private String creator;
}
----

업무프로세스 Entity Class 에 @ApprovalDocument 을 달아 주고 DefaultApprovalDocument를 상속 받아야만 결재 Object 라는 것을 결재 모듈에서 알수 있다.

=== @ApprovalDocument

@ApprovalDocument를 이용해 결재 문서의 속정을 정의한다.

[cols=5]
|====
|props명
|필수여부
|Type
|Default
|설명

|docType
|필수
|String
|
|사용자가 식별할수 있는 이름

|description
|필수
|String
|
|결재 문서에 대한 설명

|approvalClass
|필수
|class
|Approval.class
|결재 문서를 DB에 저장할때 사용하는 클래스명

|templateEngine
|필수
|TemplateEngineType
|VELOCITY
|결재 본문 파싱에 필요한 템플릿 엔진. THYMELEAF, VELOCITY 2개의 템플릿 엔진을 사용할 수 있다.

|templateFile 또는 templateKey
|필수
|String
|
|templateFile: 템플릿 파일 이름을 경로와 확장자 포함해서 설정한다. +
tempageKey: 결재양식 관리 메뉴에서 지정한 key

|docSecuType
|
|ApprovalDocSecuType
|PERSONAL
|결재 문서의 보안 형태

|isBodyModify
|
|boolean
|true
|문서의 기본 결재 본문 수정 true일 때만 UI에서 수정 가능


|isRouteModify
|
|boolean
|true
|문서의 기본 결재 경로 수정 true일 때만 UI에서 수정 가능

|isArbitrary
|
|boolean
|false
|문서의 기본 결재 전결 true일 때만 UI에서 수정 가능

|bodyType
|
|ApprovalBodyType
|MIME
|전송할 문서의 형태 TEXT, HTML, MIME

|isInternalApproval
|
|boolean
|false
|true: 내부결재, false: Knox결재

|====

== 결재 본문 등록

결재 본문은 VELOCITY 또는 THYMELEAF 로 등록 할 수 있다. +
SDL에서 제공하는 결재 샘플에서는 VELOCITY 파일로 제공하고 있으며 vm 파일을 작성하고, + 
위의 Entity Class 샘플에서와 같이 `@ApprovalDocument` 의 `templateEngine=엔진타입` 과 `templateFile="템플릿파일경로"` 값을 등록한다.


== 결재 상신

=== 결재 상신 UI

샘플 문서를 등록 하고나면 상세하면 하단에 결재 경로를 설정할 수 있는 결재 스텝을 입력 받는 Component가 표시된다. +
결재 문서 화면 개발시 이 Component를 붙여서 상신 기능을 구현한다.

image::approvalSumit_01.png[]

