문서 이력 비교
![]()
3.1.0 버전부터 지원, 2.19.0 버전부터 지원합니다.
저장된 문서의 추가/삭제 이력을 비교할 수 있는 플러그인입니다.
문서 이력 플러그인을 사용할 때, 에디터의 내용은 에디터 문서 모델(JSON) 데이터로 데이터베이스에 저장되며, 문서의 변경 이력을 비교하기 위해 불러옵니다.
내용은 HTML이 아니라 에디터 문서 모델(JSON)로 저장되어야 합니다.
(HTML은 고객의 정책에 따라 별도로 저장할 수 있습니다.)
참고
문서 변경 이력을 관리할 수 있는 데이터베이스가 필요합니다.

사용 방법
플러그인 파일 불러오기
<!-- 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.url | string | O | 요청을 보낼 URL을 설정합니다.저장된 문서 목록을 조회하는 API 주소입니다.이 설정이 없으면 문서 이력 플러그인이 동작하지 않습니다. |
list.headers | string | 요청과 함께 보낼 헤더를 설정합니다. | |
list.params | string | 요청과 함께 전송되는 기본 매개변수를 설정합니다. | |
data.url | string | O | 요청을 보낼 URL을 설정합니다.저장된 문서 목록에서 하나의 문서 데이터를 조회하는 API 주소입니다.이 설정이 없으면 문서 이력 플러그인이 동작하지 않습니다. |
data.headers | string | 요청과 함께 보낼 헤더를 설정합니다. | |
data.params | string | 요청과 함께 전송되는 기본 매개변수를 설정합니다. | |
data.paramKey | string | 요청과 함께 전송되는 매개변수의 키 이름을 설정합니다. |
플러그인 구성 예시
// 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 스키마 구성은 예시로 제공되며, 고객이 선호하는 형태로 구성하는 것을 권장합니다.
| 컬럼 이름 | 필수 | 타입 | 제약 조건 | 기본값 | 설명 |
|---|---|---|---|---|---|
id | Y | BIGINT(20) 또는 VARCHAR(100) | Not Null | - | 각 문서 버전 레코드의 고유 식별자 (예: 게시글 이력). |
user_name | Y | VARCHAR(255) | Not Null | - | 문서 버전을 생성한 사용자의 이름. |
doc_id | Y | BIGINT(20) 또는 VARCHAR(255) | Not Null | - | 문서 번호 (예: 게시글 번호). |
json | Y | LONGTEXT | Not Null | - | 문서 모델 JSON 데이터. getBodyModelJSON()에서 추출된 JSON 데이터. |
created_at | Y | DATETIME | Not Null | CURRENT_TIMESTAMP() | 버전이 생성된 시간. |
문서 이력 목록 가져오기
[요청]
문서 이력 목록을 가져오기 위해 에디터는 지정된 고객 시스템 URL로 요청을 보냅니다. 이 URL은 이전에 설정된 'documentComparison.config'의 'list' - 'url' 값에 해당합니다.
Request URL: http://hostname/getDocumentVersionList
Request Method: POST
| 키 | 설명 | 필수 | 타입 |
|---|---|---|---|
doc_id | 문서 번호(예: 게시글 번호). | O | String 또는 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 | 문서 버전 번호(예: 게시글 이력 번호). | O | String 또는 Long |
[응답]
단일 문서 이력 요청에는 다음 형식으로 응답해야 합니다:
// Output of getBodyModelJSON()
| 키 | 설명 | 타입 |
|---|---|---|
json | getBodyModelJSON()에 의해 저장된 에디터 본문 이력 데이터입니다. | JSON 객체 또는 JSON String |
단일 문서 이력 삭제
[요청]
단일 문서 이력을 삭제하려면, 에디터가 지정된 고객 시스템 URL로 삭제 요청을 보냅니다. 이 URL은 이전에 설정된 'documentComparison.config'의 'data' - 'url' 값에 해당합니다.
Request URL: http://hostname/getDocumentVersionData
Request Method: DELETE
| 키 | 설명 | 필수 | 타입 |
|---|---|---|---|
id | 문서 버전 번호(예: 게시글 이력 번호). | O | String 또는 Long |
문서 이력 데이터 저장
문서 이력 데이터를 저장할 때, 별도의 설정이나 API는 제공되지 않습니다. 이는 고객의 서버 환경에 맞춘 설정이 필요하기 때문입니다.
다음 예시는 위의 DB 스키마 구조를 기반으로 합니다.
[요청]
| 키 | 설명 | 타입 |
|---|---|---|
doc_id | 문서 번호. | String 또는 Int |
id | 버전 번호. | String 또는 Int |
created_at | 버전 생성 날짜. | Date |
user_name | 버전 작성자. | String |
json | 문서 모델 JSON 데이터. getBodyModelJSON()으로 추출한 JSON 데이터. | LONGTEXT |