2017-02-22 27 views
0

Я хочу получить все записи аудита из приложения аудита Alfresco.Запрос аудита Alfresco: fromTime/toTime, похоже, не имеет эффекта

После Alfresco Audit REST API documentation, я написал этот вопрос:

curl -u admin:admin "http://localhost:8080/alfresco/service/api/audit/query/audit-custom?fromId=1&toId=100000&fromTime=2017-02-19T18:46:09.212+09:00&toTime=2017-02-20T18:46:09.212+09:00&user=admin&forward=true&limit=0&verbose=true" 

(Учитывайте fromTime={2017-02-19T18:46:09.212+09:00}&toTime={2017-02-20T18:46:09.212+09:00} часть)

ПРОБЛЕМА: Это возвращает те же 90 результатов, как просьбу без Fromtime и toTime. Кстати, я установил Alfresco на 2017-02-21, поэтому запрос выше должен фактически вернуть нулевые результаты.

  • Такая же проблема с { и } символы вокруг даты
  • Такая же проблема с простыми датами как fromTime={2017-02-19}&toTime={2017-02-20}
  • Та же проблема, без дополнительных параметров

Как правильно использовать fromTime и toTime параметры ?

ответ

2

Это не очевидно в документации, но fromTime и longTime должны быть введены как значения long.

Вот соответствующий источник Alfresco код:

public static final String PARAM_FROM_TIME = "fromTime"; 

protected Long getParamFromTime(WebScriptRequest req) 
{ 
    String paramStr = req.getParameter(PARAM_FROM_TIME); 
    try 
    { 
     return Long.parseLong(paramStr); 
    } 
    catch (NumberFormatException e) 
    { 
     return DEFAULT_TO_TIME; 
    } 
} 

Как вы можете видеть, проблемы формата тихо упали, и значение по умолчанию, используемое вместо, который является то, что происходит с запросами, включенными в вышеуказанном вопросе.

С длинными значениями, действительный запрос может быть:

curl -u admin:admin "http://localhost:8080/alfresco/service/api/audit/query/audit-custom?fromTime=1485152993728&toTime=1485239393728&verbose=true" 

(Обратите внимание на fromTime=1485152993728&toTime=1485239393728 части)

Вот удобный Java врезка для преобразования даты в длинные значения при выполнении тестов:

import java.util.concurrent.TimeUnit; 
public class Main { 
    public static void main(String[] args) { 

     long now = System.currentTimeMillis(); 
     long lastMonth = now - TimeUnit.DAYS.toMillis(30); 
     long lastMonthPlusOne = now - TimeUnit.DAYS.toMillis(29); 

     System.out.println("Now:" + now); 
     System.out.println("Last month:" + lastMonth); 
     System.out.println("Last month plus one day:" + lastMonthPlusOne); 
    } 
}