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

时间:2018-07-26 09:28:11

标签: triggers marklogic marklogic-9

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

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

有没有办法获取交易中已删除文档的内容?

1 个答案:

答案 0 :(得分:2)

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

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

Pre-Commit Triggers

  

作为预提交触发器的结果调用的模块将作为产生触发事件的同一事务的一部分进行评估。通过在运行触发事务的同一App Server上调用模块来评估它。但是,它与以一种方式用xdmp:invoke调用模块不同。 由预提交触发器调用的模块可以看到对触发文档的更新。

     

因此,预提交触发器和调用触发器的模块在单个上下文中执行; 如果触发器由于某种原因未能完成(例如,引发异常) ,那么整个交易,包括触发交易,都会回滚到交易开始评估之前的时刻。

您尚未描述您要实现的目标,或如何执行删除操作。听起来您确实需要预先删除操作,而不是预先提交。可能还有其他方式可以达到期望的结果。

例如,您可能考虑使用自定义功能执行删除。

  • 您可以将逻辑从预提交触发器中移出,并移至该自定义函数中,以避免完全使用触发器。

  • 或者自定义功能可以执行“软删除”,以将其标记为已删除并且否则不可用(即,调整权限),然后允许预提交触发器执行xdmp:document-delete()。 / p>