2017-02-22 37 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參數。順便說一下,我在2017-02-21安裝了Alfresco,所以上面的查詢實際上應該返回零結果。

  • 同樣的問題{和日期周圍}字符
  • 同樣的問題簡單的日期,就像fromTime={2017-02-19}&toTime={2017-02-20}
  • 同樣的問題,而無需額外的參數

如何正確使用fromTimetoTime參數?

回答

2

在文檔中不明顯,但fromTimelongTime必須輸入爲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); 
    } 
}