使用存储库的更改日志是正确的方法,但要意识到并非每个存储库都支持这一点。例如,对于 Alfresco,您必须配置审计子系统,并且必须在 alfresco-global.properties 中设置 audit.cmischangelog.enabled=true。
要了解您的存储库是否支持更改,您可以查看存储库的 getCapabilities 响应的结果。如果您看到“更改”设置为“无”,则您的存储库不支持更改日志。
假设确实如此,您需要向存储库询问其最新的更改日志令牌。您可以从 getRepositoryInfo 获取。在调用 getContentChanges 之前保存它。然后,在下一次调用时,传入令牌。您将获得自发行令牌以来所做的更改。
因此,您的代码需要:
- 检查 getCapabilities 除了 Changes = None
- 保存 getRepositoryInfo 的 latestChangeLogToken
- 第一次询问时,不带参数调用 getContentChanges
- 下次询问时,使用最后保存的令牌调用 getcontentChanges
- 然后,您可以处理结果集。每个更改日志条目都会告诉您其类型(创建、更新、删除、权限等,具体值参见规范)并提供更改对象的 cmis:objectId。
- 重复步骤 2。
我有一个“cmis-sync”脚本,它使用 Python 中实现的这种方法进行单向同步。我已经针对 Alfresco 作为源和 OpenCMIS InMemory 存储库作为目标对其进行了测试。如果有兴趣,我可以提供。