Как я могу переместить файл/папку Nuxeo в корзину с помощью REST API

Из документа Nuxeo REST API я вижу удаленный файл/папку в TRASH с помощью этого кода

SELECT * FROM Document WHERE ecm:mixinType != 'HiddenInNavigation' 
AND ecm:currentLifeCycleState = 'deleted' AND ecm:isProxy = 0 AND ecm:isCheckedInVersion = 0

Но как я могу обновить документ с помощью ecm:currentLifeCycleState, чтобы переместить документ в корзину?

Спасибо


person Victoria    schedule 04.12.2014    source источник


Ответы (2)


Вот код, который я использовал для перемещения документа в корзину.

  public boolean deleteDocument(Session session, String documentId) throws Exception {
    try {
      Document document = getDocumentById(session, documentId);
      // When delete a document, only move it to Trash
      session.newRequest("Document.SetLifeCycle")
          .setInput(document).set("value", "delete").execute();
      return true;
    } catch (Exception e) {
      log.error(e.getMessage(), e);
      throw e;
    }
  }

И следующий код удалит документ навсегда.

  public static boolean deleteDocument(Session session, String documentId) throws Exception {
    try {
      Document document = getDocumentById(session, documentId);

      // Delete the document permanently
      session.newRequest("Document.Delete").setInput(document).execute();
      return true;
    } catch (Exception e) {
      log.error(e.getMessage(), e);
      throw e;
    }
  }

Один из способов — сначала найти документы в корзине с помощью NXQL, например:

SELECT * FROM Document WHERE ecm:currentLifeCycleState = 'deleted'

А затем удалите их навсегда с помощью метода, описанного выше. Об этом также упоминается сообщение: http://answers.nuxeo.com/questions/1830/actioncommand-to-permanently-delete-all-document-in-trash

Вспомогательный метод: получить документ по documentId:

  public static Document getDocumentById(Session session, String documentId) throws Exception {
    try {
      return (Document) session.newRequest("Document.Fetch").set("value", documentId)
          .setHeader(Constants.HEADER_NX_SCHEMAS, "*").execute();
    } catch (Exception e) {
      log.error("Failed to fetch document: " + e.getMessage(), e);
      throw e;
    }
  }
person Jake W    schedule 05.12.2014
comment
Это спасет мой день. Для получения дополнительной информации, как я могу удалить все файлы/папки в корзину? - person Victoria; 05.12.2014
comment
Спасибо за ваш ответ, у вас есть идеи по удалению 100 файлов? Должны ли мы вызывать вышеуказанный метод 100 раз? Поддерживает ли Nuxeo API для удаления нескольких файлов, это означает, что мы должны отправить массив из 100 идентификаторов документов и вызвать Document.Delete ? - person Victoria; 06.12.2014
comment
Нет, я не видел лучшего способа очистить корзину в Nuxeo. Да, может потребоваться вызвать эту операцию 100 раз. Это должно быть быстро для 100 документов. Если для события больше документов, например. 10k (редко) просто нужно написать фоновую программу, чтобы сделать это в цикле с некоторой паузой, если это необходимо. - person Jake W; 06.12.2014
comment
Document.SetLifeCycle: Входы: документ, документы. Вы имеете представление о документах? - person Victoria; 13.12.2014
comment
Ах я вижу. Вы можете получить объект Documents при получении документов через NXQL. Возможно, вы можете попробовать setInput(documents). Я не пробовал это раньше, но это может сработать. Я думаю, что работа сервера Nuxeo также будет проходить через документы. - person Jake W; 13.12.2014
comment
Теперь у меня есть String documentId, как я могу создать документы? Я пытался, но у меня не получилось, есть ли у вас какие-либо идеи, чтобы создать его? - person Victoria; 16.12.2014
comment
У вас есть documentId, затем вы можете получить документ, а затем получить объект Document. Я добавил метод утилиты в ответ, чтобы у нас был хороший формат кода. - person Jake W; 16.12.2014
comment
Я уже знаю, как создать объект Document, но я спрашиваю об объекте Documents. Я попытался установить ввод с документами и столкнулся с этой проблемой: {тип объекта: исключение, код: org.nuxeo.ecm.automation.TraceException, статус: 500, сообщение: не удалось вызвать операцию: Document.Delete} - person Victoria; 16.12.2014
comment
Только что посмотрел исходный код операции Document.Delete. Похоже, он принимает только один документ каждый раз. github.com/nuxeo/nuxeo-features/blob/master/nuxeo-automation/ - person Jake W; 16.12.2014

Следует использовать операцию Document.SetLifeCycle, delete переход.

person Florent Guillaume    schedule 04.12.2014