문서 이력 비교

1.00

3.1.0 버전부터 지원, 2.19.0 버전부터 지원합니다.

저장된 문서의 추가/삭제 이력을 비교할 수 있는 플러그인입니다.

문서 이력 플러그인을 사용할 때, 에디터의 내용은 에디터 문서 모델(JSON) 데이터로 데이터베이스에 저장되며, 문서의 변경 이력을 비교하기 위해 불러옵니다.

내용은 HTML이 아니라 에디터 문서 모델(JSON)로 저장되어야 합니다.

(HTML은 고객의 정책에 따라 별도로 저장할 수 있습니다.)

참고

문서 변경 이력을 관리할 수 있는 데이터베이스가 필요합니다.

1.00

사용 방법

플러그인 파일 불러오기

<!-- The SynapEditor object must exist for this to take effect,
     so include after the editor script files. -->
<script src="url of documentComparison.min.js"></script>
<link rel="stylesheet" href="url of documentComparison.min.css">

UI

플러그인 이름 'documentComparison'을 사용하여 툴바 영역에 버튼을 추가할 수 있습니다.

툴바에 추가

// synapeditor.config.js
//...
'editor.toolbar': [
    //...,
    'documentComparison',
    //...
],
// ...

메뉴에 추가

// synapeditor.config.js
//...
'editor.menu.definition': {
    //...,
    'tools': [
        //...,
        'documentComparison',
        //...
    ],
    //...
},
//...

플러그인 구성

사용 가능한 키

키타입필수설명
list.urlstringO요청을 보낼 URL을 설정합니다.저장된 문서 목록을 조회하는 API 주소입니다.이 설정이 없으면 문서 이력 플러그인이 동작하지 않습니다.
list.headersstring
요청과 함께 보낼 헤더를 설정합니다.
list.paramsstring
요청과 함께 전송되는 기본 매개변수를 설정합니다.
data.urlstringO요청을 보낼 URL을 설정합니다.저장된 문서 목록에서 하나의 문서 데이터를 조회하는 API 주소입니다.이 설정이 없으면 문서 이력 플러그인이 동작하지 않습니다.
data.headersstring
요청과 함께 보낼 헤더를 설정합니다.
data.paramsstring
요청과 함께 전송되는 기본 매개변수를 설정합니다.
data.paramKeystring
요청과 함께 전송되는 매개변수의 키 이름을 설정합니다.

플러그인 구성 예시

// synapeditor.config.js
/**
 * Configure the Document Comparison API.
 */
'documentComparison.config': {
    'list': { // Config for the saved document list.
        'url': '/getDocumentVersionList', // Get(POST)
        'headers': {
            "Content-Type": "application/json"
        },
        'params': {
        }
    },
    'data': { // Config for one of the saved document versions.
        'url': '/getDocumentVersionData', // Get(POST) and Delete(DELETE)
        'headers': {
            "Content-Type": "application/json"
        },
        'paramKey': 'id' // The history id corresponding to each doc_id (document number)
    }
}

API 설정 예시

문서 이력을 비교할 때, 에디터의 내용을 SEModel(JSON)로 저장하고 불러와야 합니다. (별도의 HTML 저장이 필요하며, 이 예제에는 HTML 저장이 포함되어 있지 않습니다.)

HTML로 저장하는 데 사용되는 getPublishingHtml() 및 openHTML() 대신, getBodyModelJSON() 및 openSEModel()을 사용해야 합니다.

  • Save: getBodyModelJSON()
  • Load: openSEModel()
// Open the editor as SEModel (JSON type)
window.editor = new SynapEditor(editorId, that.editorConfig);
window.editor.openSEModel(json); // json retrieved from the DB

var documentComparisonPlugin = window.editor.plugins.documentComparison;
if (documentComparisonPlugin) {
    // addListParam: Adds a parameter for the document history list query API
    //               (e.g. /getDocumentVersionList).
    documentComparisonPlugin.addListParam('docId', docId);
}

// Save as model
var json = window.editor.getBodyModelJSON(true);
// POST `json` (SEModel: editor model) to the document history save API
// (e.g. /saveDocumentVersionData)

DB 스키마 예시

DB 스키마 구성은 예시로 제공되며, 고객이 선호하는 형태로 구성하는 것을 권장합니다.

컬럼 이름필수타입제약 조건기본값설명
idYBIGINT(20) 또는 VARCHAR(100)Not Null-각 문서 버전 레코드의 고유 식별자 (예: 게시글 이력).
user_nameYVARCHAR(255)Not Null-문서 버전을 생성한 사용자의 이름.
doc_idYBIGINT(20) 또는 VARCHAR(255)Not Null-문서 번호 (예: 게시글 번호).
jsonYLONGTEXTNot Null-문서 모델 JSON 데이터. getBodyModelJSON()에서 추출된 JSON 데이터.
created_atYDATETIMENot NullCURRENT_TIMESTAMP()버전이 생성된 시간.

문서 이력 목록 가져오기

[요청]

문서 이력 목록을 가져오기 위해 에디터는 지정된 고객 시스템 URL로 요청을 보냅니다. 이 URL은 이전에 설정된 'documentComparison.config'의 'list' - 'url' 값에 해당합니다.

Request URL:    http://hostname/getDocumentVersionList
Request Method: POST
키설명필수타입
doc_id문서 번호(예: 게시글 번호).OString 또는 Int

[응답]

문서 이력 목록 요청에는 다음 형식으로 응답해야 합니다:

[
    {
        "id": "1",
        "date": "2024-12-23 10:39:04",
        "author": "synap"
    },
    {
        "id": "2",
        "date": "2024-12-23 11:21:31",
        "author": "synap"
    }
]
키설명타입
id버전 번호입니다.String 또는 Int
date버전 생성 날짜입니다.Date
author버전 작성자입니다.String

단일 문서 이력 가져오기

[요청]

단일 문서 이력을 가져오기 위해 에디터는 지정된 고객 시스템 URL로 요청을 보냅니다. 이 URL은 이전에 설정된 'documentComparison.config'의 'data' - 'url' 값에 해당합니다.

Request URL:    http://hostname/getDocumentVersionData
Request Method: POST
키설명필수타입
id문서 버전 번호(예: 게시글 이력 번호).OString 또는 Long

[응답]

단일 문서 이력 요청에는 다음 형식으로 응답해야 합니다:

// Output of getBodyModelJSON()
키설명타입
jsongetBodyModelJSON()에 의해 저장된 에디터 본문 이력 데이터입니다.JSON 객체 또는 JSON String

단일 문서 이력 삭제

[요청]

단일 문서 이력을 삭제하려면, 에디터가 지정된 고객 시스템 URL로 삭제 요청을 보냅니다. 이 URL은 이전에 설정된 'documentComparison.config'의 'data' - 'url' 값에 해당합니다.

Request URL:    http://hostname/getDocumentVersionData
Request Method: DELETE
키설명필수타입
id문서 버전 번호(예: 게시글 이력 번호).OString 또는 Long

문서 이력 데이터 저장

문서 이력 데이터를 저장할 때, 별도의 설정이나 API는 제공되지 않습니다. 이는 고객의 서버 환경에 맞춘 설정이 필요하기 때문입니다.

다음 예시는 위의 DB 스키마 구조를 기반으로 합니다.

[요청]

키설명타입
doc_id문서 번호.String 또는 Int
id버전 번호.String 또는 Int
created_at버전 생성 날짜.Date
user_name버전 작성자.String
json문서 모델 JSON 데이터. getBodyModelJSON()으로 추출한 JSON 데이터.LONGTEXT

하위 문서