Часто задаваемые вопросы о Сервере документов:
Вопросы по управлению версиями

  • Какие методы можно использовать при работе с историей изменения документа?
  • Историю документа можно посмотреть с помощью функции onRequestHistory (с событием events.onRequestHistory). Если вы их не используете, пункт меню «История версий» (кнопка «История версий» на вкладке «Совместная работа») не отображается в интерфейсе Сервера документов. После вызова этой функции в файле конфигурации (вместе с методом refreshHistory) отображаются пункт меню и кнопка, и программа отобразит существующие версии документа. Данные, которые отображаются в истории версий документа, можно взять из обратного вызова службы редактирования документа.Таким образом, реализация отображения истории версий документа должна выглядеть так:
    1. Обработчик обратного вызова получает данные в ответ от службы редактирования документа со статусом 2 (что означает, что все пользователи документа закрыли его и текущая версия была скомпилирована). Этот ответ будет выглядеть примерно так:
      {
          "key": "2745492410",
          "status": 2,
          "users": ["F89d8069ba2b"],
          "url": "https://documentserver/url-to-edited-document.docx",
          "history": {
              "serverVersion": serverVersion,
              "changes": changes
          }
      }
    2. Обработчик обратного вызова анализирует полученные данные и передает их в файл конфигурации (ему не нужно анализировать данные history.serverVersion и history.changes, которые могут использоваться функцией onRequestHistory как есть).
    3. В конфигурационном файле должны присутствовать следующие разделы: events.onRequestHistory и сама функция onRequestHistory:
      var onRequestHistory = function() {
          docEditor.refreshHistory({
              "currentVersion": 2,
              "history": [
                  {
                      "changes": changes,
                      "created": "2019-02-01 3:03 PM",
                      "key": "2745492410",
                      "serverVersion": serverVersion,
                      "user": {
                          "id": "F89d8069ba2b",
                          "name": "Kate Cage"
                      },
                      "version": 1
                  },
                  {
                      "changes": changes,
                      "created": "2010-07-07 3:46 PM",
                      "key": "Khirz6zTPdfd7",
                      "serverVersion": serverVersion,
                      "user": {
                          "id": "78e1e841",
                          "name": "John Smith"
                      },
                      "version": 2
                  },
                  ...
              ]
          });
      };
      
      var docEditor = new DocsAPI.DocEditor("placeholder", {
          "events": {
              "onRequestHistory": onRequestHistory,
              ...
          },
          ...
      });

      Где

  • currentVersion — номер последней версии, которая будет отображаться в интерфейсе редактора как текущая;
  • history — это массив объектов, каждый из которых представляет сохраненную единственную версию документа:
  • history.changes и history.serverVersion — данные, полученные от сервиса редактирования документов;
  • history.user.id — идентификатор пользователя, который последним сохранил изменения в документе для указанной версии;
  • history.created — время компиляции указанной версии документа (соответствует моменту получения статуса 2);
  • history.version — это номер указанной версии, который будет отображаться в разделе истории версий интерфейса редактора документо
  • Документ открывается с указанными выше параметрами. Переключитесь на пункт меню «Файл» > «История версий» (или «Совместная работа» > «История версий»), и там будут отображаться данные версии.
Как отобразить документ с выделенными изменениями?
 

Сервис редактирования документа сохраняет все промежуточные изменения документа в отдельные файлы и после компиляции версии и получения статуса 2 ссылка на архив со всеми изменениями между версиями также отправляется обработчику обратного вызова.

Итак, если вы хотите дополнительно показать разницу между версиями, вам также придется использовать функцию onRequestHistoryData (с событием events.onRequestHistoryData), которая должна содержать данные, также возвращаемые обратным вызовом службы редактирования документов.

Помимо действий, описанных в вопросе выше, вам потребуется:

  • Проанализируйте параметр changesurl службы редактирования документов, получившего ответ со статусом 2:
    {
        "changesurl": "https://documentserver/url-to-changes.zip",
        "key": "2745492410",
        "status": 2,
        "users": ["F89d8069ba2b"],
        "url": "https://documentserver/url-to-edited-document.docx",
        "history": {
            "serverVersion": serverVersion,
            "changes": changes
        }
    }
  • Добавьте функцию onRequestHistoryData в файл конфигурации вместе с методом setHistoryData и событием events.onRequestHistoryData:
    var onRequestHistoryData = function(event) {
        var version = event.data;
        docEditor.setHistoryData({
            "changesUrl": "https://example.com/url-to-changes.zip",
            "key": "2745492410",
            "previous": {
                "key": "af86C7e71Ca8",
                "url": "https://example.com/url-to-the-previous-version-of-the-document.docx"
            },
            "url": "https://documentserver/url-to-edited-document.docx",
            "version": version
        })
    };
    
    var docEditor = new DocsAPI.DocEditor("placeholder", {
        "events": {
            "onRequestHistoryData": onRequestHistoryData,
            ...
        },
        ...
    });
  • В файл конфигурации необходимо передать объект, содержащий действительные ссылки на текущую версию документа (url) и на предыдущую версию документа (previous.url), а также идентификаторы (key и previous.key). Архивный файл changesUrl также должен быть доступен и загружаться из браузера, чтобы иметь возможность отображать изменения.
Почему новая версия не отображается в истории документа после его принудительного сохранения?
 

Р7 Document Server выделяет изменения, сделанные с начала текущего сеанса работы с документом, а не с начала версии документа. И даже если за один сеанс создается несколько версий документа, все изменения из этого сеанса будут выделены. Таким образом, вы не можете видеть версии документов, созданные с опцией принудительного сохранения, в истории документов.