针对 Oracle WCC 10G 服务器的 RIDC 更新失败并显示创建日期无效错误消息
RIDC Update against Oracle WCC 10G Server fails with Creation Date Invalid Error message
我有一个通过 RIDC 对内容项执行更新的应用程序。该项目是通过 内容 ID 指定的。由于 UPDATE_DOCINFO 服务需要 dID,因此 DOC_INFO 服务是 运行第一个拿到。
DOC_INFO returns 信息就好了。但是,当 UPDATE_DOCINFO 为 运行 时,似乎总是 return 一条错误消息表明 Creation Date is invalid。内容项通过本机 Web UI 更新而没有该错误消息。我的代码在指向 Oracle WCC 11G 服务器时有效。
我试过:
- 添加 dID 到新的 DataBinder,没有 dCreateDate
将 dID 添加到新的 DataBinder,使用 dCreateDate
- 添加 dCreateDate 作为日期对象(来自 DOC_INFO 我试过的回复)
- 通过
getDate()
- 使用
DataObjectEncodingUtils.decodeDate()
手动转换(w/ get()
)
- 添加为字符串
- 使用类似于 RIDC 编码方式的 SimpleDateFormatter 进行转换(带
getDate()
)
- 使用
DataObjectEncodingUtils.encodeDate()
手动转换(w/ getDate()
)
- 作为“”
- as null
get()
而不是 getDate()
直接使用DOC_INFO的response Binder
- 使用 11G RIDC 库(上面 3)
5 使用 10G RIDC 库(上面 1-3)
列出的所有方法都return编辑了相同的错误消息。
尝试使用 oracle.stellent.ridc.model.impl.DataObjectEncodingUtils.decodeDate 将字符串(格式为 2010-02-04 06:00:00Z)转换为 Java 日历对象。
可以找到更多信息 here。
dCreateDate 不应被要求执行 UPDATE_DOCINFO。必须有一些上游的东西(在 Content Server 内部,例如 profile/rule 或组件)导致需要该字段 and/or 将其设置为一个值。也有可能是某些原因导致该字段被设置,即使您没有设置它(无论哪种方式,当您没有设置它时我都会转储活页夹只是为了确保它以某种方式没有被设置)。
我找到了这篇您可能看过也可能没看过的文章:http://onwardpath.com/2015/09/19/date-formatting-while-using-ridc.html 其中包含一些有关设置日期格式的附加信息。
在 Content Server 日志中发布堆栈跟踪的样子(如果有的话)可能会有帮助。
在与 Oracle 支持部门合作解决该问题后,我找到了答案。
RIDC 默认为 ISO8601 格式的日期。但是,我的服务器使用不同的日期格式。
解决方案是:
- 在 RIDC Binder.
上设置 UserDateFormat 属性
- 将所有日期序列化到具有匹配格式的 RIDC Binder 中。
- 还好
UserDateFormat 使用非常相似的格式字符串
SimpleDateFormat
我有一个通过 RIDC 对内容项执行更新的应用程序。该项目是通过 内容 ID 指定的。由于 UPDATE_DOCINFO 服务需要 dID,因此 DOC_INFO 服务是 运行第一个拿到。
DOC_INFO returns 信息就好了。但是,当 UPDATE_DOCINFO 为 运行 时,似乎总是 return 一条错误消息表明 Creation Date is invalid。内容项通过本机 Web UI 更新而没有该错误消息。我的代码在指向 Oracle WCC 11G 服务器时有效。
我试过:
- 添加 dID 到新的 DataBinder,没有 dCreateDate
将 dID 添加到新的 DataBinder,使用 dCreateDate
- 添加 dCreateDate 作为日期对象(来自 DOC_INFO 我试过的回复)
- 通过
getDate()
- 使用
DataObjectEncodingUtils.decodeDate()
手动转换(w/get()
)
- 通过
- 添加为字符串
- 使用类似于 RIDC 编码方式的 SimpleDateFormatter 进行转换(带
getDate()
) - 使用
DataObjectEncodingUtils.encodeDate()
手动转换(w/getDate()
) - 作为“”
- as null
get()
而不是getDate()
- 使用类似于 RIDC 编码方式的 SimpleDateFormatter 进行转换(带
- 添加 dCreateDate 作为日期对象(来自 DOC_INFO 我试过的回复)
直接使用DOC_INFO的response Binder
- 使用 11G RIDC 库(上面 3) 5 使用 10G RIDC 库(上面 1-3)
列出的所有方法都return编辑了相同的错误消息。
尝试使用 oracle.stellent.ridc.model.impl.DataObjectEncodingUtils.decodeDate 将字符串(格式为 2010-02-04 06:00:00Z)转换为 Java 日历对象。
可以找到更多信息 here。
dCreateDate 不应被要求执行 UPDATE_DOCINFO。必须有一些上游的东西(在 Content Server 内部,例如 profile/rule 或组件)导致需要该字段 and/or 将其设置为一个值。也有可能是某些原因导致该字段被设置,即使您没有设置它(无论哪种方式,当您没有设置它时我都会转储活页夹只是为了确保它以某种方式没有被设置)。
我找到了这篇您可能看过也可能没看过的文章:http://onwardpath.com/2015/09/19/date-formatting-while-using-ridc.html 其中包含一些有关设置日期格式的附加信息。
在 Content Server 日志中发布堆栈跟踪的样子(如果有的话)可能会有帮助。
在与 Oracle 支持部门合作解决该问题后,我找到了答案。
RIDC 默认为 ISO8601 格式的日期。但是,我的服务器使用不同的日期格式。
解决方案是:
- 在 RIDC Binder. 上设置 UserDateFormat 属性
- 将所有日期序列化到具有匹配格式的 RIDC Binder 中。
- 还好 UserDateFormat 使用非常相似的格式字符串 SimpleDateFormat