Triggers 检索事务中由预提交触发器删除的文档

Triggers 检索事务中由预提交触发器删除的文档,triggers,marklogic,marklogic-9,Triggers,Marklogic,Marklogic 9,我们在文档删除事件上有一个预提交触发器,在与触发器关联的XQuery模块中,我们无法检索文档内容 我们得到了文档URI,但当我们执行fn:doc($URI)时,它不会返回文档内容 是否有办法在事务中获取已删除文档的内容?如果您删除文档,则在预提交触发器中它将不可用 触发器将看到对文档所做的更新。在这种情况下,它将已被删除且不可用 作为预提交触发器的结果调用的模块将作为生成触发事件的同一事务的一部分进行评估。通过调用运行触发事务的同一应用程序服务器上的模块对其进行评估。但是,它不同于使用xdmp调

我们在文档删除事件上有一个预提交触发器,在与触发器关联的XQuery模块中,我们无法检索文档内容

我们得到了文档URI,但当我们执行
fn:doc($URI)
时,它不会返回文档内容


是否有办法在事务中获取已删除文档的内容?

如果您删除文档,则在预提交触发器中它将不可用

触发器将看到对文档所做的更新。在这种情况下,它将已被删除且不可用

作为预提交触发器的结果调用的模块将作为生成触发事件的同一事务的一部分进行评估。通过调用运行触发事务的同一应用程序服务器上的模块对其进行评估。但是,它不同于使用
xdmp调用模块:invoke
预提交触发器调用的模块会看到对触发文档所做的更新。

因此,预提交触发器和从中调用触发器的模块在单个上下文中执行如果触发器由于某种原因未能完成(例如,如果它引发异常),则整个事务(包括触发事务)将回滚到事务开始计算之前的点

您没有描述您试图实现的目标,也没有描述删除是如何执行的。听起来你真的需要一个预删除操作,而不是预提交。可能还有其他方法可以达到预期的结果

例如,您可以考虑使用自定义函数执行删除。

  • 您可以将逻辑从pre-commit触发器移到该自定义函数中,以避免完全使用触发器

  • 或者,自定义函数可以执行“软删除”,以将其标记为已删除或不可用(即调整权限),然后允许预提交触发器执行
    xdmp:document-delete()