ONLYOFFICEでのファイル保存方法

ONLYOFFICE Document Serverで文書を保存するまでの流れを参考図と以下の手順で説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2655664/f7c9f70f-96c1-3cf6-eee1-b21b5101f0e2.png)

## ファイルを開く

１．ユーザーは、ドキュメントエディターでドキュメントを編集する。
２．ドキュメントエディターは、ドキュメント編集サービスに変更内容を送信します。
３．ユーザーは、ドキュメントエディターを閉じます。
４．文書編集サービスは、文書編集作業の終了を見届け、文書編集者から送られてきた変更内容を1つの文書にまとめます。
５．文書編集サービスは、[JavaScript API](https://api.onlyoffice.com/editors/basic)のcallbackUrlを使用して、文書編集の終了を文書保管サービスに通知し、変更した文書へのリンクを返します。

>なお、バージョン5.5以降では、リクエストの[ステータス](https://api.onlyoffice.com/editors/callback#status)に応じて[callbackUrl](https://api.onlyoffice.com/editors/config/editor#callbackUrl)が選択されます。バージョン4.4からバージョン5.5までは、共同編集に参加した最後のユーザーからcallbackUrlが使用されます。バージョン4.4以前では、共同編集の場合、最初に編集用のファイルを開いたユーザーからcallbackUrlが使用されます。

６．文書保管サービスは、文書編集サービスから保存されたすべての変更点を含む文書ファイルをダウンロードし、保管します。

## 実際にどのようにできるのか

１．文書編集サービスから文書を保存するための[コールバックハンドラ](https://api.onlyoffice.com/editors/callback)を作成する。
２．[ドキュメントを開く](https://api.onlyoffice.com/editors/open#apply)ためのhtmlファイルを作成する。
３．ドキュメントエディター初期化用設定スクリプトの[パラメータ行](https://api.onlyoffice.com/editors/config/editor#callbackUrl)に、コールバックハンドラーを持つファイルのURLを指定します。

```javascript
new DocsAPI.DocEditor("placeholder", {
    "document": {
        "fileType": "docx",
        "key": "Khirz6zTPdfd7",
        "title": "Example Document Title.docx",
        "url": "https://example.com/url-to-example-document.docx"
    },
    "documentType": "word",
    "editorConfig": {
        "callbackUrl": "https://example.com/url-to-callback.ashx"
    }
});
```
ここで、example.comは、ドキュメントマネージャーとドキュメントストレージサービスがインストールされているサーバーの名前です。

４．ブラウザでhtmlファイルを開き、ドキュメントを編集します。
５．ドキュメントエディターを閉じます。約10秒後にあなたのドキュメントをチェックしてください。すべての変更が保存され、構成が正しいことを意味します。

## 保存遅延

文書編集が終了すると、文書編集サービスから文書保管サービスにその旨が通知される。その時間は、編集したファイルをOffice Open XML形式に変換する時間（ファイルの大きさ、複雑さ、コンピュータのパワーに依存し、かなり長い時間がかかる）と、変換開始遅延時間（デフォルトでは5秒に等しい）を使って計算します。一般的なケースでは、編集終了後10秒程度となります。

変換開始遅延時間は、ファイルを保存せずに編集セッションに戻るために必要です（例えば、編集のためにファイルを開いたブラウザページを再読み込みする場合など）。デフォルトの変換開始遅延時間は、Document Server設定ファイルの[services.CoAuthoring.server.savetimeoutdelay](https://helpcenter.onlyoffice.com/installation/docs-developer-configuring.aspx#services-CoAuthoring-server-savetimeoutdelay)パラメータで定義されます（以下のパスにあります）：

Linuxの場合 - /etc/onlyoffice/documentserver/default.json
Windowsの場合 - %ProgramFiles%ONLYOFFICE}DocumentServer}config}default.json

変更したい場合は、編集したすべてのパラメータを格納する必要があるlocal.jsonファイルを使用することができます。このファイルはdefault.jsonファイルと同じディレクトリにあり、必要なパラメーターのオブジェクト構造全体を保持する必要があります（以下の例を参照）。

>default.jsonファイルの内容を直接編集しないでください。Dockerコンテナを再起動したり、Document Serverを新しいバージョンにアップグレードしたりするたびにデフォルト値が復元され、変更内容がすべて失われてしまいます。

## フォースセービング

文書編集サービスでは、編集が終了する前に現在の文書の状態を取得することができます。ONLYOFFICE Document Serverでは、この処理をforceaveと呼んでいます。forceaveが開始されると、ドキュメント編集サービスは、urlパラメータにドキュメントへのリンクを、statusパラメータに6の値を指定して、[コールバックハンドラ](https://api.onlyoffice.com/editors/callback)へのリクエストを実行します。forceaveプロセスは、以下の方法で開始することができます：

* cパラメータに[forceave](https://api.onlyoffice.com/editors/command/forcesave)値を指定した[ドキュメントコマンドサービス](https://api.onlyoffice.com/editors/command)へのリクエストによって。コールバックハンドラへリクエストを送信する際、forceavetypeパラメータは0を持ちます。
* エディター初期化設定において、[editorConfig.customization.formsave](https://api.onlyoffice.com/editors/config/editor/customization#forcesave)モードをtrueに設定し、有効化する。この場合、ユーザーが保存ボタンをクリックするたびに、強制保存が行われ、コールバックハンドラへのリクエストを送信する際に、forceavetyパラメータは1の値を持ちます。
* ドキュメントサーバーの追加設定ファイルで、[forceaveの繰り返し](https://helpcenter.onlyoffice.com/installation/docs-developer-configuring.aspx#AutoAssembly)起動を有効にすることができます。この設定ファイルは、次の場所で見つけるか（すでに作成している場合）、次のパスに配置します：
Linuxの場合 - /etc/onlyoffice/documentserver/local.json.
Windowsの場合 - %ProgramFiles%ONLYOFFICE}DocumentServer}config}local.json.


## オリジナルフォーマットでの保存

バージョン7.0から、アセンブルしたファイルを元の形式で保存するために、[assemblyFormatAsOrigin]()サーバーの設定がデフォルトで有効になっています。ファイル形式をOOXMLからODFに変更する場合や、マクロを含むファイルを保存する場合に使用されます。