cpf:document-set-state在MarkLogic中没有按预期工作

时间:2017-11-08 07:35:55

标签: marklogic marklogic-8

我正在使用公积金。

为集合范围创建域(如果在特定集合中创建或更新了任何文档,则触发触发器。)

我正在尝试使用xs:anyURI('http://marklogic.com/states/updated')将文档状态显式设置为cpf:document-set-state

少数URIS触发器被触发,少数未触发(所有uris都属于域中使用的集合)

没有触发触发器的URIS,我先运行xdmp:node-replace(用相同的文本替换了一个节点)。

运行xdmp:node-replace后,cpf:document-set-state开始按预期工作。我可以看到触发器被触发。

我无法理解为什么在我将文档状态设置为xs:anyURI('http://marklogic.com/states/updated')时第一次没有触发触发器

1 个答案:

答案 0 :(得分:2)

CPF运行两个互锁状态机:一个决定CPF是否有兴趣对文档做任何事情(通过cpf:processing-status属性记录),另一个用于记录文档所在位置的特定应用程序应用程序(通过cpf:state属性记录)。

由于CPF在运营过程中更新了这些属性,并且由于它需要响应属性的变化,因此许多CPF代码都关注自身避免创建级联触发器,以响应其自身的操作,而不应该这样做。吨。

因此,如果您要执行的操作是触发文档通过其应用程序状态机,就像它刚刚更新一样,最简单的方法是更新它,即节点替换而不是其他任何内容。如果你有状态改变管道,它将负责其余部分。更新属性片段以更新文档片段的成本不会更高或更低。

如果你想戳一个文件来开始处理,但是开始的状态不是通常从文档更新中获得的状态(即应用程序管道中的某个中间状态),你需要将处理状态设置为"有源"和国家到中间状态。但这是一个忍者行动,我真的建议你做更简单的事情,除非你有充分的理由不这样做。