2017-02-22 38 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); 
    } 
}